#include "analytics.h"
#include "exceptions.h"
+#include "job.h"
#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
+#include <boost/foreach.hpp>
+#include <iostream>
#include "i18n.h"
using std::string;
+using std::map;
using dcp::raw_convert;
using boost::algorithm::trim;
+using boost::shared_ptr;
Analytics* Analytics::_instance;
int const Analytics::_current_version = 1;
+Event::Event ()
+{
+ gettimeofday (&_time, 0);
+}
+
Event::Event (cxml::ConstNodePtr node)
{
_time.tv_sec = node->number_child<int64_t>("Time");
}
void
-Event::as_xml (cxml::NodePtr parent)
+Event::as_xml (xmlpp::Element* parent) const
{
/* It would be nice if this had timezone */
- parent->add_child("Time")->add_child_text(raw_convert<int64_t>(_time.tv_sec));
+ parent->add_child("Time")->add_child_text(raw_convert<string>(_time.tv_sec));
for (map<string, string>::const_iterator i = _data.begin(); i != _data.end(); ++i) {
parent->add_child(i->first)->add_child_text(i->second);
}
}
+string
+Event::dump () const
+{
+ string d;
+ d += raw_convert<string>(_time.tv_sec) + "\n";
+ for (map<string, string>::const_iterator i = _data.begin(); i != _data.end(); ++i) {
+ d += i->first + ": " + i->second + "\n";
+ }
+ return d;
+}
+
Analytics::Analytics ()
{
{
boost::mutex::scoped_lock lm (_mutex);
BOOST_FOREACH (Event e, _events) {
- cout << e.dump() << "\n";
+ std::cout << e.dump() << "\n";
}
+ return 0;
}
void
#include "state.h"
#include "signaller.h"
+#include <libcxml/cxml.h>
+#include <libxml++/libxml++.h>
#include <boost/signals2.hpp>
+#include <string>
+#include <map>
+
+class Job;
class Event
{
void set (std::string k, std::string v);
- void as_xml (cxml::NodePtr parent) const;
+ void as_xml (xmlpp::Element* parent) const;
std::string dump () const;
private:
struct timeval _time;
- std::map<std::string k, std::string v) _data;
+ std::map<std::string, std::string> _data;
};
class Analytics : public State, public Signaller
static Analytics* instance ();
private:
+ int successful_dcp_encodes () const;
+
/** Mutex to protect _events */
- boost::mutex _mutex;
+ mutable boost::mutex _mutex;
std::list<Event> _events;
static Analytics* _instance;
static int const _current_version;
/*
- Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "exceptions.h"
#include "film.h"
#include "log.h"
+#include "analytics.h"
#include "compose.hpp"
#include <dcp/exceptions.h>
#include <sub/exceptions.h>
emit (boost::bind (boost::ref (Finished)));
}
- Analytics::instance()->job_state_changed (this);
+ Analytics::instance()->job_state_changed (shared_from_this());
}
/** @return DCPTime (in seconds) that this sub-job has been running */