Created
October 12, 2010 20:42
-
-
Save jsimmons/622874 to your computer and use it in GitHub Desktop.
lumberjack bench
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <errno.h> | |
#include <unistd.h> | |
#include <glib.h> | |
#include <jansson.h> | |
#include <zmq.h> | |
#include <lumberjack.h> | |
#include "timer.h" | |
static gpointer lj_receiver(gpointer data) | |
{ | |
void *sock = zmq_socket(data, ZMQ_SUB); | |
g_assert(sock != NULL); | |
int rc = zmq_setsockopt(sock, ZMQ_SUBSCRIBE, "", 0); | |
g_assert(rc == 0); | |
rc = zmq_connect(sock, "inproc://logs"); | |
g_assert(rc == 0); | |
while(true) | |
{ | |
zmq_msg_t message; | |
int rc = zmq_msg_init(&message); | |
g_assert(rc == 0); | |
rc = zmq_recv(sock, &message, 0); | |
g_assert(rc == 0); | |
// Zero length message is a log shutdown indicator. | |
if(zmq_msg_size(&message) == 0) | |
break; | |
json_t *log_msg_json = json_loads(zmq_msg_data(&message), 0, NULL); | |
g_assert(log_msg_json != NULL); | |
json_decref(log_msg_json); | |
zmq_msg_close(&message); | |
} | |
rc = zmq_close(sock); | |
g_assert(rc == 0); | |
return NULL; | |
} | |
static void setup_lj() | |
{ | |
void *ctx = zmq_init(1); | |
lj_init(ctx); | |
lj_bind("inproc://logs"); | |
// Receiver. | |
//GThread *thread = g_thread_create(lj_receiver, ctx, true, NULL); | |
//sleep(1); | |
} | |
static FILE *LOG_FILE; | |
static const char *json_format = "{\"level\":%d,\"errno\":\"%s\",\"file\":\"%s\",\"line\":%d,\"msg\":\"%s\"}\n"; | |
static void log_to_file(int level, const char *errno_str, const char *file, int line, const char *format, ...) | |
{ | |
va_list args; | |
va_start(args, format); | |
char *message = g_strdup_vprintf(format, args); | |
va_end(args); | |
char *data = g_strdup_printf(json_format, level, (errno_str == NULL) ? "null" : errno_str, (file == NULL) ? "null" : file, line, message); | |
fprintf(LOG_FILE, "%s", data); | |
g_free(message); | |
g_free(data); | |
} | |
#define file_log_fatal(format, ...) \ | |
log_to_file(LJ_LOG_FATAL, clean_errno(), __FILE__, __LINE__, format, ##__VA_ARGS__) | |
static void setup_file() | |
{ | |
LOG_FILE = fopen("dummy.log", "a+"); | |
} | |
static const int PASSES = 10000; | |
int main(int argc, char **argv) | |
{ | |
g_thread_init(NULL); | |
setup_file(); | |
setup_lj(); | |
Timer *timer = sgl_timer_new(); | |
// Test file. | |
for(int i = 0; i < PASSES; i++) | |
{ | |
sgl_timer_reset(timer); | |
for(int j = 0; j < 20; j++) | |
{ | |
file_log_fatal("oh my gawd an emergency! %d", i); | |
} | |
unsigned long file_pass = sgl_timer_elapsed_microseconds(timer) / 20; | |
printf("%lu ", file_pass); | |
sgl_timer_reset(timer); | |
for(int j = 0; j < 20; j++) | |
{ | |
lj_log_fatal("oh my gawd an emergency! %d", i); | |
} | |
unsigned long zmq_pass = sgl_timer_elapsed_microseconds(timer) / 20; | |
printf("%lu\n", zmq_pass); | |
sleep(0); | |
} | |
sgl_timer_free(timer); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment