8 #include "serverpool.h"
13 extern ServerPool *servers;
15 StatsThread::StatsThread(const std::string &stats_file, int stats_interval)
16 : stats_file(stats_file),
17 stats_interval(stats_interval)
21 void StatsThread::do_work()
23 while (!should_stop) {
27 vector<ClientStats> client_stats;
29 // Open a new, temporary file.
30 char *filename = strdup((stats_file + ".new.XXXXXX").c_str());
31 fd = mkostemp(filename, O_WRONLY);
48 client_stats = servers->get_client_stats();
49 for (size_t i = 0; i < client_stats.size(); ++i) {
50 fprintf(fp, "%s %s %d %llu\n",
51 client_stats[i].remote_addr.c_str(),
52 client_stats[i].stream_id.c_str(),
53 int(now - client_stats[i].connect_time),
54 (long long unsigned)(client_stats[i].bytes_sent));
56 if (fclose(fp) == EOF) {
63 if (rename(filename, stats_file.c_str()) == -1) {
69 int left_to_sleep = stats_interval;
71 left_to_sleep = sleep(left_to_sleep);
72 } while (left_to_sleep > 0 && !should_stop);