summaryrefslogtreecommitdiff
path: root/src/logger.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/logger.c')
-rw-r--r--src/logger.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/logger.c b/src/logger.c
index 9f9d78d..2aa565b 100644
--- a/src/logger.c
+++ b/src/logger.c
@@ -5,6 +5,7 @@
#include <unistd.h>
#include <sys/stat.h>
#include <signal.h>
+#include <pthread.h>
#include "utils.h"
#ifndef LOGGERS_DELAY
@@ -28,7 +29,7 @@ void sighandler(int signo){
}
}
-void publish(int queue_id, void* publisher);
+void *publish(void *publisher);
typedef struct queue {
int size;
@@ -87,6 +88,7 @@ int main (int argc, char *argv [])
//----- Start logging
+ pthread_t zmq_thread;
printf("Logger started [client=%s,interval=%ds]\n",__client,__loginterval);
FILE *regptr,*logptr;
@@ -102,6 +104,7 @@ int main (int argc, char *argv [])
for(int i=0;i<MAX_QUEUES;i++){
queues[queue_id].issending=0;
}
+ pthread_create(&zmq_thread, NULL, publish, publisher);
while(!__stop){
interval=INTERVAL(__loginterval);
@@ -137,20 +140,33 @@ int main (int argc, char *argv [])
//printf("Tick\n"); fflush(stdout);
}
queues[queue_id].issending=1;
- publish(queue_id,publisher);
}
fclose(regptr);
-
+ pthread_join(zmq_thread, NULL);
zmq_close (publisher);
zmq_ctx_destroy (context);
return 0;
}
-void publish(int queue_id, void* publisher){
- printf("Publishing...");
- zmq_send(publisher,queues[queue_id].msg,queues[queue_id].size,0);
- queues[queue_id].issending=0;
- printf("done\n");
+void *publish(void *publisher){
+ int queue_id=0;
+ while(!__stop){
+ if(queues[queue_id].issending){
+ printf("Publishing...");
+ zmq_send(publisher,queues[queue_id].msg,queues[queue_id].size,0);
+ queues[queue_id].issending=0;
+ printf("done\n");
+ } else {
+#if LOGGERS_DELAY > 0
+ usleep(LOGGERS_DELAY*1000);
+#endif
+ continue;
+ }
+ queue_id++;
+ if(queue_id>=MAX_QUEUES)
+ queue_id=0;
+ }
+ pthread_exit(EXIT_SUCCESS);
} \ No newline at end of file