9 #include "serverpool.h"
14 extern ServerPool *servers;
16 StatsThread::StatsThread(const std::string &stats_file, int stats_interval)
17 : stats_file(stats_file),
18 stats_interval(stats_interval)
22 void StatsThread::do_work()
24 while (!should_stop) {
28 vector<ClientStats> client_stats;
30 // Open a new, temporary file.
31 char *filename = strdup((stats_file + ".new.XXXXXX").c_str());
32 fd = mkostemp(filename, O_WRONLY);
49 client_stats = servers->get_client_stats();
50 for (size_t i = 0; i < client_stats.size(); ++i) {
51 fprintf(fp, "%s %s %d %llu\n",
52 client_stats[i].remote_addr.c_str(),
53 client_stats[i].stream_id.c_str(),
54 int(now - client_stats[i].connect_time),
55 (long long unsigned)(client_stats[i].bytes_sent));
57 if (fclose(fp) == EOF) {
64 if (rename(filename, stats_file.c_str()) == -1) {
70 int left_to_sleep = stats_interval;
72 left_to_sleep = sleep(left_to_sleep);
73 } while (left_to_sleep > 0 && !should_stop);