diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/lwtrace/control.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/lwtrace/control.cpp')
-rw-r--r-- | library/cpp/lwtrace/control.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/library/cpp/lwtrace/control.cpp b/library/cpp/lwtrace/control.cpp new file mode 100644 index 0000000000..d9404ff269 --- /dev/null +++ b/library/cpp/lwtrace/control.cpp @@ -0,0 +1,97 @@ +#include "probes.h" + +#include <library/cpp/lwtrace/protos/lwtrace.pb.h> + +#include <util/generic/string.h> + +namespace NLWTrace { + +LWTRACE_USING(LWTRACE_INTERNAL_PROVIDER); + +TProbeMap TManager::GetProbesMap() { + class TProbeReader + { + private: + TProbeMap& Result; + + public: + TProbeReader(TProbeMap& result) + : Result(result) + {} + + void Push(NLWTrace::TProbe* probe) + { + Result[std::make_pair(probe->Event.Name, probe->Event.GetProvider())] = probe; + } + }; + + TProbeMap result; + + auto reader = TProbeReader(result); + ReadProbes(reader); + return result; +} + +void TManager::CreateTraceRequest(TTraceRequest& msg, TOrbit& orbit) +{ + msg.SetIsTraced(orbit.HasShuttles()); +} + +bool TManager::HandleTraceRequest( + const TTraceRequest& msg, + TOrbit& orbit) +{ + if (!msg.GetIsTraced()) { + return false; + } + TParams params; + SerializingExecutor->Execute(orbit, params); + return true; +} + +TTraceDeserializeStatus TManager::HandleTraceResponse( + const TTraceResponse& msg, + const TProbeMap& probesMap, + TOrbit& orbit, + i64 timeOffset, + double timeScale) +{ + TTraceDeserializeStatus result; + if (!msg.GetTrace().GetEvents().size()) { + return result; + } + + ui64 prev = EpochNanosecondsToCycles( + msg.GetTrace().GetEvents()[0].GetTimestampNanosec()); + + for (auto& v : msg.GetTrace().GetEvents()) { + auto it = probesMap.find(std::make_pair(v.GetName(), v.GetProvider())); + if (it != probesMap.end()) { + TProbe* probe = it->second; + TParams params; + if(!probe->Event.Signature.DeserializeFromPb(params, v.GetParams())) { + LWTRACK(DeserializationError, orbit, probe->Event.Name, probe->Event.GetProvider()); + result.AddFailedEventName(v.GetName()); + } else { + ui64 timestamp = EpochNanosecondsToCycles(v.GetTimestampNanosec()); + orbit.AddProbe( + probe, + params, + prev + (timestamp-prev)*timeScale + timeOffset); + probe->Event.Signature.DestroyParams(params); + prev = timestamp; + } + } else { + result.AddFailedEventName(v.GetName()); + } + } + return result; +} + +void TManager::CreateTraceResponse(TTraceResponse& msg, TOrbit& orbit) +{ + orbit.Serialize(0, *msg.MutableTrace()); +} + +} + |