Skip to content

Commit

Permalink
also make string tags possible, keep more statistics
Browse files Browse the repository at this point in the history
  • Loading branch information
ahupowerdns committed Jul 3, 2020
1 parent 2d66645 commit 852aadd
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 15 deletions.
59 changes: 46 additions & 13 deletions influxpush.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@ InfluxPusher::InfluxPusher(std::string_view dbname) : d_dbname(dbname)

void InfluxPusher::queueValue(const std::string& line)
{
d_buffer.insert(line);
// if(d_buffer.insert(line).second)
// cout<<line;
if(!d_buffer.insert(line).second)
d_numdedupmsmts++;
checkSend();
}

Expand All @@ -41,25 +40,41 @@ void InfluxPusher::addValueObserver(int src, string_view name, const initializer
buffer+= " ";
bool lefirst=true;
for(const auto& v : values) {
d_numvalues++;
if(!lefirst) {
buffer +=",";
}
lefirst=false;
buffer += string(v.first) + "="+to_string(v.second);
}
buffer += " " + to_string((uint64_t)(t* 1000000000))+"\n";

d_nummsmts++;
d_msmtmap[(string)name]++;
queueValue(buffer);
}


void InfluxPusher::addValue(const SatID& id, string_view name, const initializer_list<pair<const char*, var_t>>& values, double t, std::optional<int> src, std::optional<string> tag)
{

vector<pair<string,var_t>> tags{{"sv", id.sv}, {"gnssid", id.gnss}, {"sigid", id.sigid}};

if(src) {
tags.push_back({*tag, *src});
}
addValue(tags, name, values, t);
}

void InfluxPusher::addValue(const vector<pair<string,var_t>>& tags, string_view name, const initializer_list<pair<const char*, var_t>>& values, double t)
{
if(d_mute)
return;

if(t > 2200000000 || t < 0) {
cerr<<"Unable to store item "<<name<<" for sv "<<id.gnss<<","<<id.sv<<": time out of range "<<t<<endl;
cerr<<"Unable to store item "<<name<<" for ";
// for(const auto& t: tags)
// cerr<<t.first<<"="<<t.second<<" ";
cerr<<": time out of range "<<t<<endl;
return;
}
for(const auto& p : values) {
Expand All @@ -68,13 +83,26 @@ void InfluxPusher::addValue(const SatID& id, string_view name, const initializer
return;
}

string buffer = string(name) +",gnssid="+to_string(id.gnss)+",sv=" +to_string(id.sv)+",sigid="+to_string(id.sigid);
if(src)
buffer += ","+*tag+"="+to_string(*src);
string buffer = string(name);
for(const auto& t : tags) {
buffer += ","+t.first + "=";
std::visit([&buffer](auto&& arg) {
using T = std::decay_t<decltype(arg)>;
if constexpr (std::is_same_v<T, string>) {
// string tags really don't need a "
buffer += arg;
}
else {
// resist the urge to do integer tags, it sucks
buffer += to_string(arg);
}
}, t.second);
}

buffer+= " ";
bool lefirst=true;
for(const auto& v : values) {
d_numvalues++;
if(!lefirst) {
buffer +=",";
}
Expand All @@ -83,14 +111,19 @@ void InfluxPusher::addValue(const SatID& id, string_view name, const initializer

std::visit([&buffer](auto&& arg) {
using T = std::decay_t<decltype(arg)>;
buffer += to_string(arg);
if constexpr (!std::is_same_v<T, double>)
buffer+="i";
if constexpr (std::is_same_v<T, string>)
buffer += "\""+arg+"\"";
else {
buffer += to_string(arg);
if constexpr (!std::is_same_v<T, double>)
buffer+="i";
}
}, v.second);
}
buffer += " " + to_string((uint64_t)(t*1000000000))+"\n";
d_nummsmts++;
d_msmtmap[(string)name]++;
queueValue(buffer);

}


Expand Down
10 changes: 8 additions & 2 deletions influxpush.hh
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@

struct InfluxPusher
{
typedef std::variant<double, int32_t, uint32_t, int64_t> var_t;
typedef std::variant<double, int32_t, uint32_t, int64_t, string> var_t;
explicit InfluxPusher(std::string_view dbname);
void addValueObserver(int src, std::string_view name, const std::initializer_list<std::pair<const char*, double>>& values, double t, std::optional<SatID> satid=std::optional<SatID>());
void addValue(const SatID& id, std::string_view name, const std::initializer_list<std::pair<const char*, var_t>>& values, double t, std::optional<int> src = std::optional<int>(), std::optional<string> tag = std::optional<string>("src"));



void addValue(const vector<pair<string, var_t>>& tags, string_view name, const initializer_list<pair<const char*, var_t>>& values, double t);
void checkSend();
void doSend(const std::set<std::string>& buffer);
~InfluxPusher();
Expand All @@ -22,4 +24,8 @@ struct InfluxPusher
time_t d_lastsent{0};
string d_dbname;
bool d_mute{false};
int64_t d_nummsmts{0};
int64_t d_numvalues{0};
int64_t d_numdedupmsmts{0};
map<std::string, int64_t> d_msmtmap;
};

0 comments on commit 852aadd

Please sign in to comment.