Stats database fixes to avoid naming conflicts in the database

and to do proper dumping of non-binned stats.

base/stats/mysql.cc:
    have configure return whether or not the stat is a printable
    stat.  This avoids naming problems in the database.
    don't store non printable stats.
    dump non-binned stats into the special bin 0
base/stats/mysql.hh:
    have configure return whether or not the stat is a printable
    stat.  This avoids naming problems in the database.

--HG--
extra : convert_revision : e33b115d605226a838eee2e6489e03b8d77ffc02
This commit is contained in:
Nathan Binkert
2004-07-22 23:59:12 -04:00
parent c9e6a15196
commit 1987dd82d1
2 changed files with 51 additions and 21 deletions

View File

@@ -486,7 +486,7 @@ MySql::configure()
}
void
bool
MySql::configure(const StatData &data, string type)
{
stat.init();
@@ -500,19 +500,25 @@ MySql::configure(const StatData &data, string type)
stat.total = data.flags & total;
stat.pdf = data.flags & pdf;
stat.cdf = data.flags & cdf;
return stat.print;
}
void
MySql::configure(const ScalarData &data)
{
configure(data, "SCALAR");
if (!configure(data, "SCALAR"))
return;
insert(data.id, stat.setup());
}
void
MySql::configure(const VectorData &data)
{
configure(data, "VECTOR");
if (!configure(data, "VECTOR"))
return;
uint16_t statid = stat.setup();
if (!data.subnames.empty()) {
@@ -535,7 +541,9 @@ MySql::configure(const VectorData &data)
void
MySql::configure(const DistData &data)
{
configure(data, "DIST");
if (!configure(data, "DIST"))
return;
if (!data.data.fancy) {
stat.size = data.data.size;
stat.min = data.data.min;
@@ -548,7 +556,8 @@ MySql::configure(const DistData &data)
void
MySql::configure(const VectorDistData &data)
{
configure(data, "VECTORDIST");
if (!configure(data, "VECTORDIST"))
return;
if (!data.data[0].fancy) {
stat.size = data.data[0].size;
@@ -578,7 +587,9 @@ MySql::configure(const VectorDistData &data)
void
MySql::configure(const Vector2dData &data)
{
configure(data, "VECTOR2D");
if (!configure(data, "VECTOR2D"))
return;
uint16_t statid = stat.setup();
if (!data.subnames.empty()) {
@@ -619,14 +630,21 @@ MySql::configure(const FormulaData &data)
}
void
MySql::output(const string &bin)
MySql::output(MainBin *bin)
{
// set up new bin in database if there is a bin name
newdata.bin = bin.empty() ? 0 : SetupBin(bin);
if (bin) {
bin->activate();
newdata.bin = SetupBin(bin->name());
} else {
newdata.bin = 0;
}
Database::stat_list_t::const_iterator i, end = Database::stats().end();
for (i = Database::stats().begin(); i != end; ++i)
(*i)->visit(*this);
for (i = Database::stats().begin(); i != end; ++i) {
StatData *stat = *i;
if (bin && stat->binned() || !bin && !stat->binned())
stat->visit(*this);
}
}
bool
@@ -647,15 +665,11 @@ MySql::output()
// store sample #
newdata.tick = curTick;
if (bins().empty()) {
output(string(""));
} else {
output(NULL);
if (!bins().empty()) {
bin_list_t::iterator i, end = bins().end();
for (i = bins().begin(); i != end; ++i) {
MainBin *bin = *i;
bin->activate();
output(bin->name());
}
for (i = bins().begin(); i != end; ++i)
output(*i);
}
newdata.flush();
@@ -664,6 +678,9 @@ MySql::output()
void
MySql::output(const ScalarData &data)
{
if (!(data.flags & print))
return;
newdata.stat = find(data.id);
newdata.x = 0;
newdata.y = 0;
@@ -675,6 +692,9 @@ MySql::output(const ScalarData &data)
void
MySql::output(const VectorData &data)
{
if (!(data.flags & print))
return;
newdata.stat = find(data.id);
newdata.y = 0;
@@ -740,6 +760,9 @@ MySql::output(const DistDataData &data)
void
MySql::output(const DistData &data)
{
if (!(data.flags & print))
return;
newdata.stat = find(data.id);
newdata.y = 0;
output(data.data);
@@ -748,6 +771,9 @@ MySql::output(const DistData &data)
void
MySql::output(const VectorDistData &data)
{
if (!(data.flags & print))
return;
newdata.stat = find(data.id);
int size = data.data.size();
@@ -760,6 +786,9 @@ MySql::output(const VectorDistData &data)
void
MySql::output(const Vector2dData &data)
{
if (!(data.flags & print))
return;
newdata.stat = find(data.id);
int index = 0;

View File

@@ -37,6 +37,7 @@
namespace MySQL { class Connection; }
namespace Stats {
class MainBin;
class DistDataData;
class MySqlRun;
bool MySqlConnected();
@@ -130,7 +131,7 @@ class MySql : public Output
protected:
// Output helper
void output(const std::string &bin);
void output(MainBin *bin);
void output(const DistDataData &data);
void output(const ScalarData &data);
void output(const VectorData &data);
@@ -140,7 +141,7 @@ class MySql : public Output
void output(const FormulaData &data);
void configure();
void configure(const StatData &data, std::string type);
bool configure(const StatData &data, std::string type);
void configure(const ScalarData &data);
void configure(const VectorData &data);
void configure(const DistData &data);