Basics of job analytics storage.
authorCarl Hetherington <cth@carlh.net>
Tue, 14 Aug 2018 14:39:33 +0000 (15:39 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 14 Aug 2018 14:39:33 +0000 (15:39 +0100)
src/lib/analytics.cc
src/lib/analytics.h

index 624c61feda0b039aae012e8b16d4b8e9ab82e90e..cbb8843025e6b62a22cdf41515ac04e5124ae1a0 100644 (file)
@@ -22,6 +22,7 @@
 #include "exceptions.h"
 #include "job.h"
 #include <dcp/raw_convert.h>
+#include <dcp/util.h>
 #include <libcxml/cxml.h>
 #include <libxml++/libxml++.h>
 #include <boost/filesystem.hpp>
@@ -60,6 +61,16 @@ Event::set (string k, string v)
        _data[k] = v;
 }
 
+string
+Event::get (string k) const
+{
+       map<string, string>::const_iterator i = _data.find (k);
+       if (i == _data.end()) {
+               return "";
+       }
+       return i->second;
+}
+
 void
 Event::as_xml (xmlpp::Element* parent) const
 {
@@ -82,6 +93,7 @@ Event::dump () const
 }
 
 Analytics::Analytics ()
+       : _id (dcp::make_uuid())
 {
 
 }
@@ -90,17 +102,20 @@ int
 Analytics::successful_dcp_encodes () const
 {
        boost::mutex::scoped_lock lm (_mutex);
+       int n = 0;
        BOOST_FOREACH (Event e, _events) {
-               std::cout << e.dump() << "\n";
+               if (e.get("type") == "job_state" && e.get("json_name") == "transcode" && e.get("status") == "finished_ok") {
+                       ++n;
+               }
        }
-       return 0;
+       return n;
 }
 
 void
 Analytics::job_state_changed (shared_ptr<Job> job)
 {
        Event ev;
-       ev.set ("type", "job-state");
+       ev.set ("type", "job_state");
        ev.set ("json_name", job->json_name());
        ev.set ("sub_name", job->sub_name());
        ev.set ("error-summary", job->error_summary());
@@ -152,6 +167,7 @@ Analytics::write () const
 
        root->add_child("Version")->add_child_text(raw_convert<string>(_current_version));
        boost::mutex::scoped_lock lm (_mutex);
+       root->add_child("Id")->add_child_text(_id);
        BOOST_FOREACH (Event e, _events) {
                e.as_xml (root->add_child("Event"));
        }
@@ -172,6 +188,7 @@ try
        cxml::Document f ("Analytics");
        f.read_file (path("analytics.xml"));
        boost::mutex::scoped_lock lm (_mutex);
+       _id = f.string_child("Id");
        BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("Event")) {
                _events.push_back (Event(i));
        }
index fcb349e542a323b6a728b48b1467b31d2f5f0179..36519ea80e05030e9240f96f48231381280efeca 100644 (file)
@@ -35,6 +35,7 @@ public:
        Event (cxml::ConstNodePtr node);
 
        void set (std::string k, std::string v);
+       std::string get (std::string k) const;
 
        void as_xml (xmlpp::Element* parent) const;
        std::string dump () const;
@@ -61,8 +62,9 @@ public:
 private:
        int successful_dcp_encodes () const;
 
-       /** Mutex to protect _events */
+       /** Mutex to protect _id and _events */
        mutable boost::mutex _mutex;
+       std::string _id;
        std::list<Event> _events;
        static Analytics* _instance;
        static int const _current_version;