-#include <errno.h>
#include <fcntl.h>
-#include <poll.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
{
while (!should_stop()) {
int fd;
+ char *filename;
FILE *fp;
- time_t now;
+ timespec now;
vector<ClientStats> client_stats;
+ if (clock_gettime(CLOCK_MONOTONIC_COARSE, &now) == -1) {
+ log_perror("clock_gettime(CLOCK_MONOTONIC_COARSE)");
+ goto sleep;
+ }
+
// Open a new, temporary file.
- char *filename = strdup((stats_file + ".new.XXXXXX").c_str());
+ filename = strdup((stats_file + ".new.XXXXXX").c_str());
fd = mkostemp(filename, O_WRONLY);
if (fd == -1) {
log_perror(filename);
goto sleep;
}
- now = time(NULL);
client_stats = servers->get_client_stats();
for (size_t i = 0; i < client_stats.size(); ++i) {
- fprintf(fp, "%s %d %d %s %d %llu %llu %llu\n",
+ fprintf(fp, "%s %d %d %s %d %llu %llu %llu \"%s\" \"%s\"\n",
client_stats[i].remote_addr.c_str(),
client_stats[i].sock,
- client_stats[i].fwmark,
- client_stats[i].stream_id.c_str(),
- int(now - client_stats[i].connect_time),
+ 0, // Used to be fwmark.
+ client_stats[i].url.c_str(),
+ int(now.tv_sec - client_stats[i].connect_time.tv_sec), // Rather coarse.
(long long unsigned)(client_stats[i].bytes_sent),
(long long unsigned)(client_stats[i].bytes_lost),
- (long long unsigned)(client_stats[i].num_loss_events));
+ (long long unsigned)(client_stats[i].num_loss_events),
+ client_stats[i].referer.c_str(),
+ client_stats[i].user_agent.c_str());
}
if (fclose(fp) == EOF) {
log_perror("fclose");