[Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins
Allows the plugins to add information to the log. Signed-off-by: Frediano Ziglio --- Not entirely happy to export a kind of C function, any suggestion welcome --- include/spice-streaming-agent/plugin.hpp | 5 + src/concrete-agent.cpp | 16 ++-- src/concrete-agent.hpp | 6 ++ src/frame-log.cpp| 9 + src/frame-log.hpp| 2 ++ src/spice-streaming-agent.cpp| 8 ++-- 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/include/spice-streaming-agent/plugin.hpp b/include/spice-streaming-agent/plugin.hpp index 3b265d9..a51f060 100644 --- a/include/spice-streaming-agent/plugin.hpp +++ b/include/spice-streaming-agent/plugin.hpp @@ -116,6 +116,11 @@ public: * \todo passing options to entry point instead? */ virtual const ConfigureOption* Options() const = 0; +/*! + * Write something in the log. + */ +__attribute__ ((format (printf, 2, 3))) +virtual void LogStat(const char* format, ...) = 0; }; typedef bool PluginInitFunc(spice::streaming_agent::Agent* agent); diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp index f94aead..d279656 100644 --- a/src/concrete-agent.cpp +++ b/src/concrete-agent.cpp @@ -5,13 +5,15 @@ */ #include +#include "concrete-agent.hpp" +#include "frame-log.hpp" + #include #include #include #include #include - -#include "concrete-agent.hpp" +#include using namespace spice::streaming_agent; @@ -145,3 +147,13 @@ FrameCapture *ConcreteAgent::GetBestFrameCapture(const std::setlog_statv(format, ap); +va_end(ap); +} +} diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp index 99dcf54..aa4d6aa 100644 --- a/src/concrete-agent.hpp +++ b/src/concrete-agent.hpp @@ -14,6 +14,8 @@ namespace spice { namespace streaming_agent { +class FrameLog; + struct ConcreteConfigureOption: ConfigureOption { ConcreteConfigureOption(const char *name, const char *value) @@ -33,11 +35,15 @@ public: // pointer must remain valid void AddOption(const char *name, const char *value); FrameCapture *GetBestFrameCapture(const std::set& codecs); +void SetFrameLog(FrameLog *logger) { this->logger = logger; } +__attribute__ ((format (printf, 2, 3))) +void LogStat(const char* format, ...) override; private: bool PluginVersionIsCompatible(unsigned pluginVersion) const; void LoadPlugin(const std::string &plugin_filename); std::vector> plugins; std::vector options; +FrameLog *logger = nullptr; }; }} // namespace spice::streaming_agent diff --git a/src/frame-log.cpp b/src/frame-log.cpp index 62fffc3..db6b652 100644 --- a/src/frame-log.cpp +++ b/src/frame-log.cpp @@ -52,6 +52,15 @@ void FrameLog::log_stat(const char* format, ...) } } +void FrameLog::log_statv(const char* format, va_list ap) +{ +if (log_file) { +fprintf(log_file, "%" PRIu64 ": ", get_time()); +vfprintf(log_file, format, ap); +fputc('\n', log_file); +} +} + void FrameLog::log_frame(const void* buffer, size_t buffer_size) { if (log_file) { diff --git a/src/frame-log.hpp b/src/frame-log.hpp index 8503345..a104723 100644 --- a/src/frame-log.hpp +++ b/src/frame-log.hpp @@ -24,6 +24,8 @@ public: __attribute__ ((format (printf, 2, 3))) void log_stat(const char* format, ...); +__attribute__ ((format (printf, 2, 0))) +void log_statv(const char* format, va_list ap); void log_frame(const void* buffer, size_t buffer_size); static uint64_t get_time(); diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp index 9507a54..f262118 100644 --- a/src/spice-streaming-agent.cpp +++ b/src/spice-streaming-agent.cpp @@ -401,13 +401,15 @@ int main(int argc, char* argv[]) register_interrupts(); try { +FrameLog frame_log(log_filename, log_binary, log_frames); + +agent.SetFrameLog(&frame_log); + // register built-in plugins MjpegPlugin::Register(&agent); agent.LoadPlugins(pluginsdir); -FrameLog frame_log(log_filename, log_binary, log_frames); - for (const std::string& arg: old_args) { frame_log.log_stat("Args: %s", arg.c_str()); } @@ -419,8 +421,10 @@ int main(int argc, char* argv[]) cursor_updater.detach(); do_capture(stream_port, frame_log); +agent.SetFrameLog(nullptr); } catch (std::exception &err) { +agent.SetFrameLog(nullptr); syslog(LOG_ERR, "%s", err.what()); return EXIT_FAILURE; } -- 2.20.1 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins
ping > > Allows the plugins to add information to the log. > > Signed-off-by: Frediano Ziglio > --- > Not entirely happy to export a kind of C function, any suggestion > welcome > --- > include/spice-streaming-agent/plugin.hpp | 5 + > src/concrete-agent.cpp | 16 ++-- > src/concrete-agent.hpp | 6 ++ > src/frame-log.cpp| 9 + > src/frame-log.hpp| 2 ++ > src/spice-streaming-agent.cpp| 8 ++-- > 6 files changed, 42 insertions(+), 4 deletions(-) > > diff --git a/include/spice-streaming-agent/plugin.hpp > b/include/spice-streaming-agent/plugin.hpp > index 3b265d9..a51f060 100644 > --- a/include/spice-streaming-agent/plugin.hpp > +++ b/include/spice-streaming-agent/plugin.hpp > @@ -116,6 +116,11 @@ public: > * \todo passing options to entry point instead? > */ > virtual const ConfigureOption* Options() const = 0; > +/*! > + * Write something in the log. > + */ > +__attribute__ ((format (printf, 2, 3))) > +virtual void LogStat(const char* format, ...) = 0; > }; > > typedef bool PluginInitFunc(spice::streaming_agent::Agent* agent); > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp > index f94aead..d279656 100644 > --- a/src/concrete-agent.cpp > +++ b/src/concrete-agent.cpp > @@ -5,13 +5,15 @@ > */ > > #include > +#include "concrete-agent.hpp" > +#include "frame-log.hpp" > + > #include > #include > #include > #include > #include > - > -#include "concrete-agent.hpp" > +#include > > using namespace spice::streaming_agent; > > @@ -145,3 +147,13 @@ FrameCapture *ConcreteAgent::GetBestFrameCapture(const > std::set } > return nullptr; > } > + > +void ConcreteAgent::LogStat(const char* format, ...) > +{ > +if (logger) { > +va_list ap; > +va_start(ap, format); > +logger->log_statv(format, ap); > +va_end(ap); > +} > +} > diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp > index 99dcf54..aa4d6aa 100644 > --- a/src/concrete-agent.hpp > +++ b/src/concrete-agent.hpp > @@ -14,6 +14,8 @@ > namespace spice { > namespace streaming_agent { > > +class FrameLog; > + > struct ConcreteConfigureOption: ConfigureOption > { > ConcreteConfigureOption(const char *name, const char *value) > @@ -33,11 +35,15 @@ public: > // pointer must remain valid > void AddOption(const char *name, const char *value); > FrameCapture *GetBestFrameCapture(const std::set& > codecs); > +void SetFrameLog(FrameLog *logger) { this->logger = logger; } > +__attribute__ ((format (printf, 2, 3))) > +void LogStat(const char* format, ...) override; > private: > bool PluginVersionIsCompatible(unsigned pluginVersion) const; > void LoadPlugin(const std::string &plugin_filename); > std::vector> plugins; > std::vector options; > +FrameLog *logger = nullptr; > }; > > }} // namespace spice::streaming_agent > diff --git a/src/frame-log.cpp b/src/frame-log.cpp > index 62fffc3..db6b652 100644 > --- a/src/frame-log.cpp > +++ b/src/frame-log.cpp > @@ -52,6 +52,15 @@ void FrameLog::log_stat(const char* format, ...) > } > } > > +void FrameLog::log_statv(const char* format, va_list ap) > +{ > +if (log_file) { > +fprintf(log_file, "%" PRIu64 ": ", get_time()); > +vfprintf(log_file, format, ap); > +fputc('\n', log_file); > +} > +} > + > void FrameLog::log_frame(const void* buffer, size_t buffer_size) > { > if (log_file) { > diff --git a/src/frame-log.hpp b/src/frame-log.hpp > index 8503345..a104723 100644 > --- a/src/frame-log.hpp > +++ b/src/frame-log.hpp > @@ -24,6 +24,8 @@ public: > > __attribute__ ((format (printf, 2, 3))) > void log_stat(const char* format, ...); > +__attribute__ ((format (printf, 2, 0))) > +void log_statv(const char* format, va_list ap); > void log_frame(const void* buffer, size_t buffer_size); > > static uint64_t get_time(); > diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp > index 9507a54..f262118 100644 > --- a/src/spice-streaming-agent.cpp > +++ b/src/spice-streaming-agent.cpp > @@ -401,13 +401,15 @@ int main(int argc, char* argv[]) > register_interrupts(); > > try { > +FrameLog frame_log(log_filename, log_binary, log_frames); > + > +agent.SetFrameLog(&frame_log); > + > // register built-in plugins > MjpegPlugin::Register(&agent); > > agent.LoadPlugins(pluginsdir); > > -FrameLog frame_log(log_filename, log_binary, log_frames); > - > for (const std::string& arg: old_args) { > frame_log.log_stat("Args: %s", arg.c_str()); > } > @@ -419,8 +421,10 @@ int main(int argc, char* argv[]) > cursor_updater.detach(); > > do_capture(stream_port, frame_log); > +agent.SetFrameLog(nullptr); > } >
Re: [Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins
ping 2 > > ping > > > > > Allows the plugins to add information to the log. > > > > Signed-off-by: Frediano Ziglio > > --- > > Not entirely happy to export a kind of C function, any suggestion > > welcome > > --- > > include/spice-streaming-agent/plugin.hpp | 5 + > > src/concrete-agent.cpp | 16 ++-- > > src/concrete-agent.hpp | 6 ++ > > src/frame-log.cpp| 9 + > > src/frame-log.hpp| 2 ++ > > src/spice-streaming-agent.cpp| 8 ++-- > > 6 files changed, 42 insertions(+), 4 deletions(-) > > > > diff --git a/include/spice-streaming-agent/plugin.hpp > > b/include/spice-streaming-agent/plugin.hpp > > index 3b265d9..a51f060 100644 > > --- a/include/spice-streaming-agent/plugin.hpp > > +++ b/include/spice-streaming-agent/plugin.hpp > > @@ -116,6 +116,11 @@ public: > > * \todo passing options to entry point instead? > > */ > > virtual const ConfigureOption* Options() const = 0; > > +/*! > > + * Write something in the log. > > + */ > > +__attribute__ ((format (printf, 2, 3))) > > +virtual void LogStat(const char* format, ...) = 0; > > }; > > > > typedef bool PluginInitFunc(spice::streaming_agent::Agent* agent); > > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp > > index f94aead..d279656 100644 > > --- a/src/concrete-agent.cpp > > +++ b/src/concrete-agent.cpp > > @@ -5,13 +5,15 @@ > > */ > > > > #include > > +#include "concrete-agent.hpp" > > +#include "frame-log.hpp" > > + > > #include > > #include > > #include > > #include > > #include > > - > > -#include "concrete-agent.hpp" > > +#include > > > > using namespace spice::streaming_agent; > > > > @@ -145,3 +147,13 @@ FrameCapture *ConcreteAgent::GetBestFrameCapture(const > > std::set > } > > return nullptr; > > } > > + > > +void ConcreteAgent::LogStat(const char* format, ...) > > +{ > > +if (logger) { > > +va_list ap; > > +va_start(ap, format); > > +logger->log_statv(format, ap); > > +va_end(ap); > > +} > > +} > > diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp > > index 99dcf54..aa4d6aa 100644 > > --- a/src/concrete-agent.hpp > > +++ b/src/concrete-agent.hpp > > @@ -14,6 +14,8 @@ > > namespace spice { > > namespace streaming_agent { > > > > +class FrameLog; > > + > > struct ConcreteConfigureOption: ConfigureOption > > { > > ConcreteConfigureOption(const char *name, const char *value) > > @@ -33,11 +35,15 @@ public: > > // pointer must remain valid > > void AddOption(const char *name, const char *value); > > FrameCapture *GetBestFrameCapture(const std::set& > > codecs); > > +void SetFrameLog(FrameLog *logger) { this->logger = logger; } > > +__attribute__ ((format (printf, 2, 3))) > > +void LogStat(const char* format, ...) override; > > private: > > bool PluginVersionIsCompatible(unsigned pluginVersion) const; > > void LoadPlugin(const std::string &plugin_filename); > > std::vector> plugins; > > std::vector options; > > +FrameLog *logger = nullptr; > > }; > > > > }} // namespace spice::streaming_agent > > diff --git a/src/frame-log.cpp b/src/frame-log.cpp > > index 62fffc3..db6b652 100644 > > --- a/src/frame-log.cpp > > +++ b/src/frame-log.cpp > > @@ -52,6 +52,15 @@ void FrameLog::log_stat(const char* format, ...) > > } > > } > > > > +void FrameLog::log_statv(const char* format, va_list ap) > > +{ > > +if (log_file) { > > +fprintf(log_file, "%" PRIu64 ": ", get_time()); > > +vfprintf(log_file, format, ap); > > +fputc('\n', log_file); > > +} > > +} > > + > > void FrameLog::log_frame(const void* buffer, size_t buffer_size) > > { > > if (log_file) { > > diff --git a/src/frame-log.hpp b/src/frame-log.hpp > > index 8503345..a104723 100644 > > --- a/src/frame-log.hpp > > +++ b/src/frame-log.hpp > > @@ -24,6 +24,8 @@ public: > > > > __attribute__ ((format (printf, 2, 3))) > > void log_stat(const char* format, ...); > > +__attribute__ ((format (printf, 2, 0))) > > +void log_statv(const char* format, va_list ap); > > void log_frame(const void* buffer, size_t buffer_size); > > > > static uint64_t get_time(); > > diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp > > index 9507a54..f262118 100644 > > --- a/src/spice-streaming-agent.cpp > > +++ b/src/spice-streaming-agent.cpp > > @@ -401,13 +401,15 @@ int main(int argc, char* argv[]) > > register_interrupts(); > > > > try { > > +FrameLog frame_log(log_filename, log_binary, log_frames); > > + > > +agent.SetFrameLog(&frame_log); > > + > > // register built-in plugins > > MjpegPlugin::Register(&agent); > > > > agent.LoadPlugins(pluginsdir); > > > > -FrameLog frame_log(log_filename, log_binary, log_frames); > > - >
Re: [Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins
> On 25 Apr 2019, at 11:42, Frediano Ziglio wrote: > > ping 2 > >> >> ping >> >>> >>> Allows the plugins to add information to the log. >>> >>> Signed-off-by: Frediano Ziglio >>> --- >>> Not entirely happy to export a kind of C function, any suggestion >>> welcome >>> --- >>> include/spice-streaming-agent/plugin.hpp | 5 + >>> src/concrete-agent.cpp | 16 ++-- >>> src/concrete-agent.hpp | 6 ++ >>> src/frame-log.cpp| 9 + >>> src/frame-log.hpp| 2 ++ >>> src/spice-streaming-agent.cpp| 8 ++-- >>> 6 files changed, 42 insertions(+), 4 deletions(-) >>> >>> diff --git a/include/spice-streaming-agent/plugin.hpp >>> b/include/spice-streaming-agent/plugin.hpp >>> index 3b265d9..a51f060 100644 >>> --- a/include/spice-streaming-agent/plugin.hpp >>> +++ b/include/spice-streaming-agent/plugin.hpp >>> @@ -116,6 +116,11 @@ public: >>> * \todo passing options to entry point instead? >>> */ >>> virtual const ConfigureOption* Options() const = 0; >>> +/*! >>> + * Write something in the log. >>> + */ >>> +__attribute__ ((format (printf, 2, 3))) >>> +virtual void LogStat(const char* format, ...) = 0; >>> }; >>> >>> typedef bool PluginInitFunc(spice::streaming_agent::Agent* agent); >>> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp >>> index f94aead..d279656 100644 >>> --- a/src/concrete-agent.cpp >>> +++ b/src/concrete-agent.cpp >>> @@ -5,13 +5,15 @@ >>> */ >>> >>> #include >>> +#include "concrete-agent.hpp" >>> +#include "frame-log.hpp" >>> + >>> #include >>> #include >>> #include >>> #include >>> #include >>> - >>> -#include "concrete-agent.hpp" >>> +#include >>> >>> using namespace spice::streaming_agent; >>> >>> @@ -145,3 +147,13 @@ FrameCapture *ConcreteAgent::GetBestFrameCapture(const >>> std::set>> } >>> return nullptr; >>> } >>> + >>> +void ConcreteAgent::LogStat(const char* format, ...) >>> +{ >>> +if (logger) { >>> +va_list ap; >>> +va_start(ap, format); >>> +logger->log_statv(format, ap); >>> +va_end(ap); >>> +} >>> +} >>> diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp >>> index 99dcf54..aa4d6aa 100644 >>> --- a/src/concrete-agent.hpp >>> +++ b/src/concrete-agent.hpp >>> @@ -14,6 +14,8 @@ >>> namespace spice { >>> namespace streaming_agent { >>> >>> +class FrameLog; >>> + >>> struct ConcreteConfigureOption: ConfigureOption >>> { >>> ConcreteConfigureOption(const char *name, const char *value) >>> @@ -33,11 +35,15 @@ public: >>> // pointer must remain valid >>> void AddOption(const char *name, const char *value); >>> FrameCapture *GetBestFrameCapture(const std::set& >>> codecs); >>> +void SetFrameLog(FrameLog *logger) { this->logger = logger; } >>> +__attribute__ ((format (printf, 2, 3))) >>> +void LogStat(const char* format, ...) override; >>> private: >>> bool PluginVersionIsCompatible(unsigned pluginVersion) const; >>> void LoadPlugin(const std::string &plugin_filename); >>> std::vector> plugins; >>> std::vector options; >>> +FrameLog *logger = nullptr; >>> }; >>> >>> }} // namespace spice::streaming_agent >>> diff --git a/src/frame-log.cpp b/src/frame-log.cpp >>> index 62fffc3..db6b652 100644 >>> --- a/src/frame-log.cpp >>> +++ b/src/frame-log.cpp >>> @@ -52,6 +52,15 @@ void FrameLog::log_stat(const char* format, ...) >>> } >>> } >>> >>> +void FrameLog::log_statv(const char* format, va_list ap) >>> +{ >>> +if (log_file) { >>> +fprintf(log_file, "%" PRIu64 ": ", get_time()); >>> +vfprintf(log_file, format, ap); >>> +fputc('\n', log_file); >>> +} >>> +} >>> + >>> void FrameLog::log_frame(const void* buffer, size_t buffer_size) >>> { >>> if (log_file) { >>> diff --git a/src/frame-log.hpp b/src/frame-log.hpp >>> index 8503345..a104723 100644 >>> --- a/src/frame-log.hpp >>> +++ b/src/frame-log.hpp >>> @@ -24,6 +24,8 @@ public: >>> >>> __attribute__ ((format (printf, 2, 3))) >>> void log_stat(const char* format, ...); >>> +__attribute__ ((format (printf, 2, 0))) >>> +void log_statv(const char* format, va_list ap); >>> void log_frame(const void* buffer, size_t buffer_size); >>> >>> static uint64_t get_time(); >>> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp >>> index 9507a54..f262118 100644 >>> --- a/src/spice-streaming-agent.cpp >>> +++ b/src/spice-streaming-agent.cpp >>> @@ -401,13 +401,15 @@ int main(int argc, char* argv[]) >>> register_interrupts(); >>> >>> try { >>> +FrameLog frame_log(log_filename, log_binary, log_frames); >>> + >>> +agent.SetFrameLog(&frame_log); >>> + >>> // register built-in plugins >>> MjpegPlugin::Register(&agent); >>> >>> agent.LoadPlugins(pluginsdir); >>> >>> -FrameLog frame_log(log_filename, log_binary, log_frames); >>> - >>>
Re: [Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins
> > > On 25 Apr 2019, at 11:42, Frediano Ziglio wrote: > > > > ping 2 > > > >> > >> ping > >> > >>> > >>> Allows the plugins to add information to the log. > >>> > >>> Signed-off-by: Frediano Ziglio > >>> --- > >>> Not entirely happy to export a kind of C function, any suggestion > >>> welcome > >>> --- > >>> include/spice-streaming-agent/plugin.hpp | 5 + > >>> src/concrete-agent.cpp | 16 ++-- > >>> src/concrete-agent.hpp | 6 ++ > >>> src/frame-log.cpp| 9 + > >>> src/frame-log.hpp| 2 ++ > >>> src/spice-streaming-agent.cpp| 8 ++-- > >>> 6 files changed, 42 insertions(+), 4 deletions(-) > >>> > >>> diff --git a/include/spice-streaming-agent/plugin.hpp > >>> b/include/spice-streaming-agent/plugin.hpp > >>> index 3b265d9..a51f060 100644 > >>> --- a/include/spice-streaming-agent/plugin.hpp > >>> +++ b/include/spice-streaming-agent/plugin.hpp > >>> @@ -116,6 +116,11 @@ public: > >>> * \todo passing options to entry point instead? > >>> */ > >>> virtual const ConfigureOption* Options() const = 0; > >>> +/*! > >>> + * Write something in the log. > >>> + */ > >>> +__attribute__ ((format (printf, 2, 3))) > >>> +virtual void LogStat(const char* format, ...) = 0; > >>> }; > >>> > >>> typedef bool PluginInitFunc(spice::streaming_agent::Agent* agent); > >>> diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp > >>> index f94aead..d279656 100644 > >>> --- a/src/concrete-agent.cpp > >>> +++ b/src/concrete-agent.cpp > >>> @@ -5,13 +5,15 @@ > >>> */ > >>> > >>> #include > >>> +#include "concrete-agent.hpp" > >>> +#include "frame-log.hpp" > >>> + > >>> #include > >>> #include > >>> #include > >>> #include > >>> #include > >>> - > >>> -#include "concrete-agent.hpp" > >>> +#include > >>> > >>> using namespace spice::streaming_agent; > >>> > >>> @@ -145,3 +147,13 @@ FrameCapture > >>> *ConcreteAgent::GetBestFrameCapture(const > >>> std::set >>> } > >>> return nullptr; > >>> } > >>> + > >>> +void ConcreteAgent::LogStat(const char* format, ...) > >>> +{ > >>> +if (logger) { > >>> +va_list ap; > >>> +va_start(ap, format); > >>> +logger->log_statv(format, ap); > >>> +va_end(ap); > >>> +} > >>> +} > >>> diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp > >>> index 99dcf54..aa4d6aa 100644 > >>> --- a/src/concrete-agent.hpp > >>> +++ b/src/concrete-agent.hpp > >>> @@ -14,6 +14,8 @@ > >>> namespace spice { > >>> namespace streaming_agent { > >>> > >>> +class FrameLog; > >>> + > >>> struct ConcreteConfigureOption: ConfigureOption > >>> { > >>> ConcreteConfigureOption(const char *name, const char *value) > >>> @@ -33,11 +35,15 @@ public: > >>> // pointer must remain valid > >>> void AddOption(const char *name, const char *value); > >>> FrameCapture *GetBestFrameCapture(const > >>> std::set& > >>> codecs); > >>> +void SetFrameLog(FrameLog *logger) { this->logger = logger; } > >>> +__attribute__ ((format (printf, 2, 3))) > >>> +void LogStat(const char* format, ...) override; > >>> private: > >>> bool PluginVersionIsCompatible(unsigned pluginVersion) const; > >>> void LoadPlugin(const std::string &plugin_filename); > >>> std::vector> plugins; > >>> std::vector options; > >>> +FrameLog *logger = nullptr; > >>> }; > >>> > >>> }} // namespace spice::streaming_agent > >>> diff --git a/src/frame-log.cpp b/src/frame-log.cpp > >>> index 62fffc3..db6b652 100644 > >>> --- a/src/frame-log.cpp > >>> +++ b/src/frame-log.cpp > >>> @@ -52,6 +52,15 @@ void FrameLog::log_stat(const char* format, ...) > >>> } > >>> } > >>> > >>> +void FrameLog::log_statv(const char* format, va_list ap) > >>> +{ > >>> +if (log_file) { > >>> +fprintf(log_file, "%" PRIu64 ": ", get_time()); > >>> +vfprintf(log_file, format, ap); > >>> +fputc('\n', log_file); > >>> +} > >>> +} > >>> + > >>> void FrameLog::log_frame(const void* buffer, size_t buffer_size) > >>> { > >>> if (log_file) { > >>> diff --git a/src/frame-log.hpp b/src/frame-log.hpp > >>> index 8503345..a104723 100644 > >>> --- a/src/frame-log.hpp > >>> +++ b/src/frame-log.hpp > >>> @@ -24,6 +24,8 @@ public: > >>> > >>> __attribute__ ((format (printf, 2, 3))) > >>> void log_stat(const char* format, ...); > >>> +__attribute__ ((format (printf, 2, 0))) > >>> +void log_statv(const char* format, va_list ap); > >>> void log_frame(const void* buffer, size_t buffer_size); > >>> > >>> static uint64_t get_time(); > >>> diff --git a/src/spice-streaming-agent.cpp > >>> b/src/spice-streaming-agent.cpp > >>> index 9507a54..f262118 100644 > >>> --- a/src/spice-streaming-agent.cpp > >>> +++ b/src/spice-streaming-agent.cpp > >>> @@ -401,13 +401,15 @@ int main(int argc, char* argv[]) > >>> register_interrupts(); > >>> > >>> try { > >>> +FrameLog f
Re: [Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins
> On 26 Apr 2019, at 09:13, Frediano Ziglio wrote: > >>> >>> On 25 Apr 2019, at 11:42, Frediano Ziglio wrote: >>> >>> ping 2 >>> ping > > Allows the plugins to add information to the log. > > Signed-off-by: Frediano Ziglio > --- > Not entirely happy to export a kind of C function, any suggestion > welcome > --- > include/spice-streaming-agent/plugin.hpp | 5 + > src/concrete-agent.cpp | 16 ++-- > src/concrete-agent.hpp | 6 ++ > src/frame-log.cpp| 9 + > src/frame-log.hpp| 2 ++ > src/spice-streaming-agent.cpp| 8 ++-- > 6 files changed, 42 insertions(+), 4 deletions(-) > > diff --git a/include/spice-streaming-agent/plugin.hpp > b/include/spice-streaming-agent/plugin.hpp > index 3b265d9..a51f060 100644 > --- a/include/spice-streaming-agent/plugin.hpp > +++ b/include/spice-streaming-agent/plugin.hpp > @@ -116,6 +116,11 @@ public: > * \todo passing options to entry point instead? > */ >virtual const ConfigureOption* Options() const = 0; > +/*! > + * Write something in the log. > + */ > +__attribute__ ((format (printf, 2, 3))) > +virtual void LogStat(const char* format, ...) = 0; > }; > > typedef bool PluginInitFunc(spice::streaming_agent::Agent* agent); > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp > index f94aead..d279656 100644 > --- a/src/concrete-agent.cpp > +++ b/src/concrete-agent.cpp > @@ -5,13 +5,15 @@ > */ > > #include > +#include "concrete-agent.hpp" > +#include "frame-log.hpp" > + > #include > #include > #include > #include > #include > - > -#include "concrete-agent.hpp" > +#include > > using namespace spice::streaming_agent; > > @@ -145,3 +147,13 @@ FrameCapture > *ConcreteAgent::GetBestFrameCapture(const > std::set} >return nullptr; > } > + > +void ConcreteAgent::LogStat(const char* format, ...) > +{ > +if (logger) { > +va_list ap; > +va_start(ap, format); > +logger->log_statv(format, ap); > +va_end(ap); > +} > +} > diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp > index 99dcf54..aa4d6aa 100644 > --- a/src/concrete-agent.hpp > +++ b/src/concrete-agent.hpp > @@ -14,6 +14,8 @@ > namespace spice { > namespace streaming_agent { > > +class FrameLog; > + > struct ConcreteConfigureOption: ConfigureOption > { >ConcreteConfigureOption(const char *name, const char *value) > @@ -33,11 +35,15 @@ public: >// pointer must remain valid >void AddOption(const char *name, const char *value); >FrameCapture *GetBestFrameCapture(const >std::set& >codecs); > +void SetFrameLog(FrameLog *logger) { this->logger = logger; } > +__attribute__ ((format (printf, 2, 3))) > +void LogStat(const char* format, ...) override; > private: >bool PluginVersionIsCompatible(unsigned pluginVersion) const; >void LoadPlugin(const std::string &plugin_filename); >std::vector> plugins; >std::vector options; > +FrameLog *logger = nullptr; > }; > > }} // namespace spice::streaming_agent > diff --git a/src/frame-log.cpp b/src/frame-log.cpp > index 62fffc3..db6b652 100644 > --- a/src/frame-log.cpp > +++ b/src/frame-log.cpp > @@ -52,6 +52,15 @@ void FrameLog::log_stat(const char* format, ...) >} > } > > +void FrameLog::log_statv(const char* format, va_list ap) > +{ > +if (log_file) { > +fprintf(log_file, "%" PRIu64 ": ", get_time()); > +vfprintf(log_file, format, ap); > +fputc('\n', log_file); > +} > +} > + > void FrameLog::log_frame(const void* buffer, size_t buffer_size) > { >if (log_file) { > diff --git a/src/frame-log.hpp b/src/frame-log.hpp > index 8503345..a104723 100644 > --- a/src/frame-log.hpp > +++ b/src/frame-log.hpp > @@ -24,6 +24,8 @@ public: > >__attribute__ ((format (printf, 2, 3))) >void log_stat(const char* format, ...); > +__attribute__ ((format (printf, 2, 0))) > +void log_statv(const char* format, va_list ap); >void log_frame(const void* buffer, size_t buffer_size); > >static uint64_t get_time(); > diff --git a/src/spice-streaming-agent.cpp > b/src/spice-streaming-agent.cpp > index 9507a54..f262118 100644 > --- a/src/spice-streaming-agent.cpp > +++ b/src/spice-streaming-agent.cpp > @@ -401,13 +401,15 @@ int main(int argc, char* argv[]) >register_interrupts(); > >
Re: [Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins
> > On 26 Apr 2019, at 09:13, Frediano Ziglio wrote: > > > >>> > >>> On 25 Apr 2019, at 11:42, Frediano Ziglio wrote: > >>> > >>> ping 2 > >>> > > ping > > > > > Allows the plugins to add information to the log. > > > > Signed-off-by: Frediano Ziglio > > --- > > Not entirely happy to export a kind of C function, any suggestion > > welcome > > --- > > include/spice-streaming-agent/plugin.hpp | 5 + > > src/concrete-agent.cpp | 16 ++-- > > src/concrete-agent.hpp | 6 ++ > > src/frame-log.cpp| 9 + > > src/frame-log.hpp| 2 ++ > > src/spice-streaming-agent.cpp| 8 ++-- > > 6 files changed, 42 insertions(+), 4 deletions(-) > > > > diff --git a/include/spice-streaming-agent/plugin.hpp > > b/include/spice-streaming-agent/plugin.hpp > > index 3b265d9..a51f060 100644 > > --- a/include/spice-streaming-agent/plugin.hpp > > +++ b/include/spice-streaming-agent/plugin.hpp > > @@ -116,6 +116,11 @@ public: > > * \todo passing options to entry point instead? > > */ > >virtual const ConfigureOption* Options() const = 0; > > +/*! > > + * Write something in the log. > > + */ > > +__attribute__ ((format (printf, 2, 3))) > > +virtual void LogStat(const char* format, ...) = 0; > > }; > > > > typedef bool PluginInitFunc(spice::streaming_agent::Agent* agent); > > diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp > > index f94aead..d279656 100644 > > --- a/src/concrete-agent.cpp > > +++ b/src/concrete-agent.cpp > > @@ -5,13 +5,15 @@ > > */ > > > > #include > > +#include "concrete-agent.hpp" > > +#include "frame-log.hpp" > > + > > #include > > #include > > #include > > #include > > #include > > - > > -#include "concrete-agent.hpp" > > +#include > > > > using namespace spice::streaming_agent; > > > > @@ -145,3 +147,13 @@ FrameCapture > > *ConcreteAgent::GetBestFrameCapture(const > > std::set >} > >return nullptr; > > } > > + > > +void ConcreteAgent::LogStat(const char* format, ...) > > +{ > > +if (logger) { > > +va_list ap; > > +va_start(ap, format); > > +logger->log_statv(format, ap); > > +va_end(ap); > > +} > > +} > > diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp > > index 99dcf54..aa4d6aa 100644 > > --- a/src/concrete-agent.hpp > > +++ b/src/concrete-agent.hpp > > @@ -14,6 +14,8 @@ > > namespace spice { > > namespace streaming_agent { > > > > +class FrameLog; > > + > > struct ConcreteConfigureOption: ConfigureOption > > { > >ConcreteConfigureOption(const char *name, const char *value) > > @@ -33,11 +35,15 @@ public: > >// pointer must remain valid > >void AddOption(const char *name, const char *value); > >FrameCapture *GetBestFrameCapture(const > >std::set& > >codecs); > > +void SetFrameLog(FrameLog *logger) { this->logger = logger; } > > +__attribute__ ((format (printf, 2, 3))) > > +void LogStat(const char* format, ...) override; > > private: > >bool PluginVersionIsCompatible(unsigned pluginVersion) const; > >void LoadPlugin(const std::string &plugin_filename); > >std::vector> plugins; > >std::vector options; > > +FrameLog *logger = nullptr; > > }; > > > > }} // namespace spice::streaming_agent > > diff --git a/src/frame-log.cpp b/src/frame-log.cpp > > index 62fffc3..db6b652 100644 > > --- a/src/frame-log.cpp > > +++ b/src/frame-log.cpp > > @@ -52,6 +52,15 @@ void FrameLog::log_stat(const char* format, ...) > >} > > } > > > > +void FrameLog::log_statv(const char* format, va_list ap) > > +{ > > +if (log_file) { > > +fprintf(log_file, "%" PRIu64 ": ", get_time()); > > +vfprintf(log_file, format, ap); > > +fputc('\n', log_file); > > +} > > +} > > + > > void FrameLog::log_frame(const void* buffer, size_t buffer_size) > > { > >if (log_file) { > > diff --git a/src/frame-log.hpp b/src/frame-log.hpp > > index 8503345..a104723 100644 > > --- a/src/frame-log.hpp > > +++ b/src/frame-log.hpp > > @@ -24,6 +24,8 @@ public: > > > >__attribute__ ((format (printf, 2, 3))) > >void log_stat(const char* format, ...); > > +__attribute__ ((format (printf, 2, 0))) > > +void log_statv(const char* format, va_list ap); > >void log_frame(const void* buffer, size_t buffer_size); > > > >static uint64_t get_time(); > > diff --git a/src