[Spice-devel] [PATCH spice-streaming-agent] Add support log logging statistics from plugins

2019-03-20 Thread Frediano Ziglio
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

2019-03-29 Thread Frediano Ziglio
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

2019-04-25 Thread Frediano Ziglio
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

2019-04-25 Thread Christophe de Dinechin


> 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

2019-04-26 Thread Frediano Ziglio
> 
> > 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

2019-04-26 Thread Christophe de Dinechin


> 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

2019-04-26 Thread Frediano Ziglio
> > 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