26 #include "ns3/nstime.h"
28 #include "data-collector.h"
29 #include "data-calculator.h"
30 #include "sqlite-data-output.h"
38 SqliteDataOutput::SqliteDataOutput()
40 m_filePrefix =
"data";
43 SqliteDataOutput::~SqliteDataOutput()
57 SqliteDataOutput::Exec (std::string exe) {
65 res = sqlite3_get_table (m_db,
67 &result, &nrows, &ncols,
70 if (res != SQLITE_OK) {
93 sqlite3_free_table (result);
103 std::string m_dbFile = m_filePrefix +
".db";
105 if (sqlite3_open (m_dbFile.c_str (), &m_db)) {
106 NS_LOG_ERROR (
"Could not open sqlite3 database \"" << m_dbFile <<
"\"");
107 NS_LOG_ERROR (
"sqlite3 error \"" << sqlite3_errmsg (m_db) <<
"\"");
108 sqlite3_close (m_db);
113 std::string run = dc.GetRunLabel ();
115 Exec (
"create table if not exists Experiments (run, experiment, strategy, input, description text)");
116 Exec (
"insert into Experiments (run,experiment,strategy,input,description) values ('" +
118 dc.GetExperimentLabel () +
"', '" +
119 dc.GetStrategyLabel () +
"', '" +
120 dc.GetInputLabel () +
"', '" +
121 dc.GetDescription () +
"')");
123 Exec (
"create table if not exists Metadata ( run text, key text, value)");
125 for (MetadataList::iterator i = dc.MetadataBegin ();
126 i != dc.MetadataEnd (); i++) {
127 std::pair<std::string, std::string> blob = (*i);
128 Exec (
"insert into Metadata (run,key,value) values ('" +
130 blob.first +
"', '" +
135 SqliteOutputCallback callback (
this, run);
136 for (DataCalculatorList::iterator i = dc.DataCalculatorBegin ();
137 i != dc.DataCalculatorEnd (); i++) {
138 (*i)->Output (callback);
142 sqlite3_close (m_db);
147 SqliteDataOutput::SqliteOutputCallback::SqliteOutputCallback
153 m_owner->Exec (
"create table if not exists Singletons ( run text, name text, variable text, value )");
159 SqliteDataOutput::SqliteOutputCallback::OutputStatistic (std::string key,
160 std::string variable,
163 OutputSingleton (key,variable+
"-count", (
double)statSum->
getCount ());
164 if (!isNaN (statSum->
getSum ()))
165 OutputSingleton (key,variable+
"-total", statSum->
getSum ());
166 if (!isNaN (statSum->
getMax ()))
167 OutputSingleton (key,variable+
"-max", statSum->
getMax ());
168 if (!isNaN (statSum->
getMin ()))
169 OutputSingleton (key,variable+
"-min", statSum->
getMin ());
171 OutputSingleton (key,variable+
"-sqrsum", statSum->
getSqrSum ());
173 OutputSingleton (key,variable+
"-stddev", statSum->
getStddev ());
178 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
179 std::string variable,
183 std::stringstream sstr;
184 sstr <<
"insert into Singletons (run,name,variable,value) values ('" <<
185 m_runLabel <<
"', '" <<
189 m_owner->Exec (sstr.str ());
194 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
195 std::string variable,
198 std::stringstream sstr;
199 sstr <<
"insert into Singletons (run,name,variable,value) values ('" <<
200 m_runLabel <<
"', '" <<
204 m_owner->Exec (sstr.str ());
208 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
209 std::string variable,
212 std::stringstream sstr;
213 sstr <<
"insert into Singletons (run,name,variable,value) values ('" <<
214 m_runLabel <<
"', '" <<
218 m_owner->Exec (sstr.str ());
222 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
223 std::string variable,
226 std::stringstream sstr;
227 sstr <<
"insert into Singletons (run,name,variable,value) values ('" <<
228 m_runLabel <<
"', '" <<
230 variable <<
"', '" <<
232 m_owner->Exec (sstr.str ());
236 SqliteDataOutput::SqliteOutputCallback::OutputSingleton (std::string key,
237 std::string variable,
240 std::stringstream sstr;
241 sstr <<
"insert into Singletons (run,name,variable,value) values ('" <<
242 m_runLabel <<
"', '" <<
246 m_owner->Exec (sstr.str ());
smart pointer class similar to boost::intrusive_ptr
virtual double getMin() const =0
virtual double getSqrSum() const =0
#define NS_LOG_COMPONENT_DEFINE(name)
#define NS_LOG_FUNCTION_NOARGS()
virtual double getStddev() const =0
virtual double getMax() const =0
int64_t GetTimeStep(void) const
virtual double getSum() const =0
#define NS_LOG_ERROR(msg)
virtual long getCount() const =0