diff options
| author | serxa <[email protected]> | 2022-02-10 16:49:08 +0300 |
|---|---|---|
| committer | Daniil Cherednik <[email protected]> | 2022-02-10 16:49:08 +0300 |
| commit | d6d7db348c2cc64e71243cab9940ee6778f4317d (patch) | |
| tree | bac67f42a02f9368eb4d329f5d79b77d0a6adc18 /library/cpp/lwtrace/example3 | |
| parent | 8d57b69dee81198a59c39e64704f7dc9f04b4fbf (diff) | |
Restoring authorship annotation for <[email protected]>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/lwtrace/example3')
| -rw-r--r-- | library/cpp/lwtrace/example3/example_query.tr | 8 | ||||
| -rw-r--r-- | library/cpp/lwtrace/example3/lwtrace_example3.cpp | 12 | ||||
| -rw-r--r-- | library/cpp/lwtrace/example3/my_action.h | 162 | ||||
| -rwxr-xr-x | library/cpp/lwtrace/example3/start_with_query.sh | 10 | ||||
| -rw-r--r-- | library/cpp/lwtrace/example3/ya.make | 6 |
5 files changed, 99 insertions, 99 deletions
diff --git a/library/cpp/lwtrace/example3/example_query.tr b/library/cpp/lwtrace/example3/example_query.tr index 1f841b0932a..e53c21c02d1 100644 --- a/library/cpp/lwtrace/example3/example_query.tr +++ b/library/cpp/lwtrace/example3/example_query.tr @@ -4,10 +4,10 @@ Blocks { Provider: "LWTRACE_EXAMPLE_PROVIDER" } Action { - CustomAction { - Name: "MyAction" - Opts: "/dev/stdout" - } + CustomAction { + Name: "MyAction" + Opts: "/dev/stdout" + } } } diff --git a/library/cpp/lwtrace/example3/lwtrace_example3.cpp b/library/cpp/lwtrace/example3/lwtrace_example3.cpp index 4493dc0077b..2fa2976a692 100644 --- a/library/cpp/lwtrace/example3/lwtrace_example3.cpp +++ b/library/cpp/lwtrace/example3/lwtrace_example3.cpp @@ -1,8 +1,8 @@ #include <library/cpp/lwtrace/all.h> #include <google/protobuf/text_format.h> -#include "my_action.h" +#include "my_action.h" -#define LWTRACE_EXAMPLE_PROVIDER(PROBE, EVENT, GROUPS, TYPES, NAMES) \ +#define LWTRACE_EXAMPLE_PROVIDER(PROBE, EVENT, GROUPS, TYPES, NAMES) \ PROBE(IterationProbe, GROUPS(), TYPES(i32, double), NAMES("n", "result")) \ /**/ @@ -10,12 +10,12 @@ LWTRACE_DECLARE_PROVIDER(LWTRACE_EXAMPLE_PROVIDER) LWTRACE_DEFINE_PROVIDER(LWTRACE_EXAMPLE_PROVIDER) void InitLWTrace() { - NLWTrace::StartLwtraceFromEnv([=](NLWTrace::TManager& mngr) { - mngr.RegisterCustomAction<TMyActionExecutor>(); - }); + NLWTrace::StartLwtraceFromEnv([=](NLWTrace::TManager& mngr) { + mngr.RegisterCustomAction<TMyActionExecutor>(); + }); } -long double Fact(int n) { +long double Fact(int n) { if (n < 0) { ythrow yexception() << "N! is undefined for negative N (" << n << ")"; } diff --git a/library/cpp/lwtrace/example3/my_action.h b/library/cpp/lwtrace/example3/my_action.h index 9a04293ba27..80a34ecca83 100644 --- a/library/cpp/lwtrace/example3/my_action.h +++ b/library/cpp/lwtrace/example3/my_action.h @@ -1,85 +1,85 @@ -#pragma once - +#pragma once + #include <library/cpp/lwtrace/all.h> -#include <util/stream/file.h> - -// Example of custom state for custom executors -// Holds file for output from TMyActionExecutor -class TMyFile: public NLWTrace::IResource { -private: - TMutex Mutex; +#include <util/stream/file.h> + +// Example of custom state for custom executors +// Holds file for output from TMyActionExecutor +class TMyFile: public NLWTrace::IResource { +private: + TMutex Mutex; THolder<TUnbufferedFileOutput> File; - -public: - // Note that this class must have default ctor (it's declared here just for clearness) - TMyFile() { - } - - // Note that dtor will be called by TManager::Delete() after detachment and destruction of all executors - ~TMyFile() { - } - - // Some kind of state initialization - // Can be called only from executor constructor, and should not be thread-safe - void Open(const TString& path) { - if (File) { - // We must avoid double open because each executor will call Open() on the same object - // if the same file was specified in Opts - return; - } + +public: + // Note that this class must have default ctor (it's declared here just for clearness) + TMyFile() { + } + + // Note that dtor will be called by TManager::Delete() after detachment and destruction of all executors + ~TMyFile() { + } + + // Some kind of state initialization + // Can be called only from executor constructor, and should not be thread-safe + void Open(const TString& path) { + if (File) { + // We must avoid double open because each executor will call Open() on the same object + // if the same file was specified in Opts + return; + } File.Reset(new TUnbufferedFileOutput(path)); - } - - // Outputs a line to opened file - // Can be called from DoExecute() and must be thread-safe - void Output(const TString& line) { - Y_VERIFY(File); - TGuard<TMutex> g(Mutex); // Because DoExecute() call can come from any thread - *File << line << Endl; - } -}; - -// Action that prints events to specified file -class TMyActionExecutor: public NLWTrace::TCustomActionExecutor { -private: - TMyFile& File; - -public: - TMyActionExecutor(NLWTrace::TProbe* probe, const NLWTrace::TCustomAction& action, NLWTrace::TSession* session) - : NLWTrace::TCustomActionExecutor(probe, false /* not destructive */) - , File(session->Resources().Get<TMyFile>("FileHolder/" + action.GetOpts(0))) // unique state id must include your d - { - if (action.GetOpts().size() != 1) { - yexception() << "wrong number of Opts in MyAction"; - } - File.Open(action.GetOpts(0)); - } - - static const char* GetActionName() { - static const char name[] = "MyAction"; - return name; - } - -private: - virtual bool DoExecute(NLWTrace::TOrbit&, const NLWTrace::TParams& params) { - // Serialize param values to strings + } + + // Outputs a line to opened file + // Can be called from DoExecute() and must be thread-safe + void Output(const TString& line) { + Y_VERIFY(File); + TGuard<TMutex> g(Mutex); // Because DoExecute() call can come from any thread + *File << line << Endl; + } +}; + +// Action that prints events to specified file +class TMyActionExecutor: public NLWTrace::TCustomActionExecutor { +private: + TMyFile& File; + +public: + TMyActionExecutor(NLWTrace::TProbe* probe, const NLWTrace::TCustomAction& action, NLWTrace::TSession* session) + : NLWTrace::TCustomActionExecutor(probe, false /* not destructive */) + , File(session->Resources().Get<TMyFile>("FileHolder/" + action.GetOpts(0))) // unique state id must include your d + { + if (action.GetOpts().size() != 1) { + yexception() << "wrong number of Opts in MyAction"; + } + File.Open(action.GetOpts(0)); + } + + static const char* GetActionName() { + static const char name[] = "MyAction"; + return name; + } + +private: + virtual bool DoExecute(NLWTrace::TOrbit&, const NLWTrace::TParams& params) { + // Serialize param values to strings TString paramValues[LWTRACE_MAX_PARAMS]; - Probe->Event.Signature.SerializeParams(params, paramValues); - - // Generate output line - TStringStream ss; - ss << "TMyActionExecutor>>> "; - ss << Probe->Event.Name; - for (ui32 i = 0; i < Probe->Event.Signature.ParamCount; ++i) { - ss << " " << Probe->Event.Signature.ParamNames[i] << "=" << paramValues[i]; - } - - // Write line to file - File.Output(ss.Str()); - - // Executors can chain if you specify multiple actions in one block (in trace query). - // So return true to continue execution of actions for given trace query block (on current triggered event) - // or return false if this action is the last for this block - return true; - } -}; + Probe->Event.Signature.SerializeParams(params, paramValues); + + // Generate output line + TStringStream ss; + ss << "TMyActionExecutor>>> "; + ss << Probe->Event.Name; + for (ui32 i = 0; i < Probe->Event.Signature.ParamCount; ++i) { + ss << " " << Probe->Event.Signature.ParamNames[i] << "=" << paramValues[i]; + } + + // Write line to file + File.Output(ss.Str()); + + // Executors can chain if you specify multiple actions in one block (in trace query). + // So return true to continue execution of actions for given trace query block (on current triggered event) + // or return false if this action is the last for this block + return true; + } +}; diff --git a/library/cpp/lwtrace/example3/start_with_query.sh b/library/cpp/lwtrace/example3/start_with_query.sh index 5cd221856f3..09f4395f7c3 100755 --- a/library/cpp/lwtrace/example3/start_with_query.sh +++ b/library/cpp/lwtrace/example3/start_with_query.sh @@ -1,6 +1,6 @@ #!/bin/bash -echo "Executing program with following trace query:" -cat example_query.tr -echo -n "Press any key to start program" -read -LWTRACE="example_query.tr" ./lwtrace-example3 +echo "Executing program with following trace query:" +cat example_query.tr +echo -n "Press any key to start program" +read +LWTRACE="example_query.tr" ./lwtrace-example3 diff --git a/library/cpp/lwtrace/example3/ya.make b/library/cpp/lwtrace/example3/ya.make index c5b31586e96..e3a16da2b26 100644 --- a/library/cpp/lwtrace/example3/ya.make +++ b/library/cpp/lwtrace/example3/ya.make @@ -1,9 +1,9 @@ -PROGRAM(lwtrace-example3) +PROGRAM(lwtrace-example3) -OWNER(serxa) +OWNER(serxa) SRCS( - lwtrace_example3.cpp + lwtrace_example3.cpp ) PEERDIR( |
