LDFLAGS=@LDFLAGS@
LIBS=@LIBS@ @protobuf_LIBS@ @libsystemd_LIBS@
-OBJS=main.o client.o server.o stream.o udpstream.o serverpool.o mutexlock.o input.o input_stats.o httpinput.o udpinput.o parse.o config.o acceptor.o stats.o accesslog.o thread.o util.o log.o metacube2.o sa_compare.o state.pb.o
+OBJS=main.o client.o server.o stream.o udpstream.o serverpool.o mutexlock.o input.o input_stats.o httpinput.o udpinput.o parse.o config.o acceptor.o stats.o accesslog.o thread.o util.o log.o metacube2.o sa_compare.o timespec.o state.pb.o
all: cubemap
#include "client.h"
#include "log.h"
#include "mutexlock.h"
+#include "timespec.h"
using namespace std;
if (logfp != NULL) {
// Do the actual writes.
- timespec now;
- if (clock_gettime(CLOCK_MONOTONIC_COARSE, &now) == -1) {
+ timespec now_monotonic;
+ timespec now_realtime;
+ if (clock_gettime(CLOCK_MONOTONIC_COARSE, &now_monotonic) == -1) {
log_perror("clock_gettime(CLOCK_MONOTONIC_COARSE)");
+ } else if (clock_gettime(CLOCK_REALTIME, &now_realtime) == -1) {
+ log_perror("clock_gettime(CLOCK_REALTIME)");
} else {
+ timespec realtime_offset = clock_diff(now_monotonic, now_realtime);
for (size_t i = 0; i < writes.size(); ++i) {
+ timespec connect_time_realtime = clock_add(writes[i].connect_time, realtime_offset);
+ timespec time_since_connect = clock_diff(writes[i].connect_time, now_monotonic);
fprintf(logfp, "%llu %s %s %d %llu %llu %llu \"%s\" \"%s\"\n",
- (long long unsigned)(writes[i].connect_time.tv_sec),
+ (long long unsigned)(connect_time_realtime.tv_sec),
writes[i].remote_addr.c_str(),
writes[i].url.c_str(),
- int(now.tv_sec - writes[i].connect_time.tv_sec), // Rather coarse.
+ int(time_since_connect.tv_sec),
(long long unsigned)(writes[i].bytes_sent),
(long long unsigned)(writes[i].bytes_lost),
(long long unsigned)(writes[i].num_loss_events),
#include "serverpool.h"
#include "state.pb.h"
#include "stream.h"
+#include "timespec.h"
#include "util.h"
#include "version.h"
extern ServerPool *servers;
-namespace {
-
-// Compute b-a.
-timespec clock_diff(const timespec &a, const timespec &b)
-{
- timespec ret;
- ret.tv_sec = b.tv_sec - a.tv_sec;
- ret.tv_nsec = b.tv_nsec - a.tv_nsec;
- if (ret.tv_nsec < 0) {
- ret.tv_sec--;
- ret.tv_nsec += 1000000000;
- }
- assert(ret.tv_nsec >= 0);
- return ret;
-}
-
-} // namespace
-
HTTPInput::HTTPInput(const string &url)
: state(NOT_CONNECTED),
url(url),
--- /dev/null
+#include <assert.h>
+#include <sys/time.h>
+
+#include "timespec.h"
+
+timespec clock_diff(const timespec &a, const timespec &b)
+{
+ timespec ret;
+ ret.tv_sec = b.tv_sec - a.tv_sec;
+ ret.tv_nsec = b.tv_nsec - a.tv_nsec;
+ if (ret.tv_nsec < 0) {
+ ret.tv_sec--;
+ ret.tv_nsec += 1000000000;
+ }
+ assert(ret.tv_nsec >= 0);
+ return ret;
+}
+
+timespec clock_add(const timespec &a, const timespec &b)
+{
+ timespec ret;
+ ret.tv_sec = a.tv_sec + b.tv_sec;
+ ret.tv_nsec = b.tv_nsec + b.tv_nsec;
+
+ ret.tv_sec += ret.tv_nsec / 1000000000;
+ ret.tv_nsec %= 1000000000;
+ return ret;
+}
--- /dev/null
+#ifndef _TIMESPEC_H
+#define _TIMESPEC_H 1
+
+struct timespec;
+
+// Compute b-a.
+timespec clock_diff(const timespec &a, const timespec &b);
+
+// Compute a+b.
+timespec clock_add(const timespec &a, const timespec &b);
+
+#endif // !defined(_TIMESPEC_H)