#include "comboaddress.hh" #include "sclasses.hh" #include #include #include "navmon.pb.h" #include "fmt/format.h" #include "fmt/printf.h" #include #include #include #include #include #include #include #include "storage.hh" #include using namespace std; std::mutex g_clientmut; set g_clients; std::mutex g_dedupmut; set> g_dedup; std::string g_storage; std::multimap, string> g_history; void sendSession(int s, ComboAddress client) { cerr<<"New downstream client "< start; start.first=time(0)-1800; start.second=0; int count =0; for(auto iter = g_history.lower_bound(start); iter != g_history.end(); ++iter) { SWriten(s, iter->second); ++count; } cerr<<"Wrote "< getSources() { DIR *dir = opendir(g_storage.c_str()); if(!dir) unixDie("Listing metrics from statistics storage "+g_storage); struct dirent *result=0; vector ret; for(;;) { errno=0; if(!(result = readdir(dir))) { closedir(dir); if(errno) unixDie("Reading directory entry "+g_storage); else break; } if(result->d_name[0] != '.') { uint64_t src; if(sscanf(result->d_name, "%08lx", &src)==1) ret.push_back(src); } } sort(ret.begin(), ret.end()); return ret; } int main(int argc, char** argv) { signal(SIGPIPE, SIG_IGN); if(argc != 3) { cout<<"Syntax: navnexus storage listen-address"< "<