Browse Source

Initial implementation

master
Denis Tereshkin 2 weeks ago
commit
444af0b257
  1. 76
      src/main.c

76
src/main.c

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
#include "eventlog.h"
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <signal.h>
#include <unistd.h>
#include <time.h>
static uint64_t gs_head = 0;
static void tracer_format_timestamp(uint64_t ns, char* buffer, size_t buffer_size)
{
time_t sec = ns / 1000000000ULL;
uint32_t ms = (ns % 1000000000ULL) / 1000000;
struct tm* tm_info = localtime(&sec);
snprintf(buffer, buffer_size, "%04d-%02d-%02d %02d:%02d:%02d.%03u",
tm_info->tm_year + 1900,
tm_info->tm_mon + 1,
tm_info->tm_mday,
tm_info->tm_hour,
tm_info->tm_min,
tm_info->tm_sec,
ms);
}
static void dump_events_to_file(const char* filepath)
{
FILE* fp = fopen(filepath, "w+");
size_t actual_size = 0;
struct eventlog_entry entries[64];
do
{
char timestamp_buffer[256];
eventlog_get_snapshot(&gs_head, entries, 64, &actual_size);
for (size_t i = 0; i < actual_size; i++)
{
if (entries[i].type_id == EVENTLOG_TYPE_STRING)
{
tracer_format_timestamp(entries[i].timestamp, timestamp_buffer, sizeof(timestamp_buffer));
fprintf(fp, "[%s] %s\n", timestamp_buffer, entries[i].data);
}
}
} while(actual_size != 0);
fclose(fp);
}
static void signal_handler(int sig)
{
dump_events_to_file("/tmp/eventlog.json");
}
int main(int argc, char** argv)
{
int ret = eventlog_init("/eventlog", EVENTLOG_MODE_CREATE);
if(ret < 0)
{
fprintf(stderr, "Can't create evenlog: %d\n", ret);
return -1;
}
bool running = true;
signal(SIGUSR1, signal_handler);
int i = 0;
while (running)
{
eventlog_emit_event(eventlog_get_timestamp(), "Iteration %d", i);
sleep(1);
i++;
}
return 0;
}
Loading…
Cancel
Save