commit 444af0b257749bef8404f34691d2d0b388c6794c Author: Denis Tereshkin Date: Wed Nov 19 21:45:33 2025 +0700 Initial implementation diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..10b866c --- /dev/null +++ b/src/main.c @@ -0,0 +1,76 @@ +#include "eventlog.h" + +#include +#include +#include +#include +#include +#include + +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; +}