jsonlogger: add test file and improve open/close behaviour
This commit is contained in:
parent
251aca7738
commit
5bcd3a6933
|
@ -15,14 +15,36 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
static int m_fifo_fd = -1;
|
static int m_fifo_fd = -1;
|
||||||
|
static char m_fifo_path[1024];
|
||||||
|
|
||||||
static bool start_message(void)
|
static bool start_message(void)
|
||||||
{
|
{
|
||||||
|
if(m_fifo_fd < 0) {
|
||||||
|
// FIFO was not opened yet. Try to open it now.
|
||||||
|
m_fifo_fd = open(m_fifo_path, O_WRONLY | O_NONBLOCK);
|
||||||
|
if(m_fifo_fd < 0) {
|
||||||
|
if(errno != ENXIO) {
|
||||||
|
perror("open");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ssize_t ret = write(m_fifo_fd, "{", 1);
|
ssize_t ret = write(m_fifo_fd, "{", 1);
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
// FIFO is not writable or other error
|
// FIFO is not writable or other error
|
||||||
if(errno != EAGAIN) {
|
switch(errno) {
|
||||||
|
case EAGAIN: // FIFO not ready for writing -> drop message
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EPIPE: // FIFO was closed on the other side
|
||||||
|
close(m_fifo_fd);
|
||||||
|
m_fifo_fd = -1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: // other errors are logged to stderr
|
||||||
perror("write");
|
perror("write");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -58,12 +80,9 @@ bool jsonlogger_init(const char *fifoname)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIFO was created or did already exist -> open it
|
strncpy(m_fifo_path, fifoname, sizeof(m_fifo_path));
|
||||||
m_fifo_fd = open(fifoname, O_WRONLY | O_NONBLOCK);
|
|
||||||
if(m_fifo_fd < 0) {
|
m_fifo_fd = -1; // open on demand
|
||||||
perror("open");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -108,7 +127,7 @@ bool jsonlogger_log_rx_stats(const rx_stats_t *rx_stats)
|
||||||
LOG_OR_RETURN("\"preambles_found\": %zd, ", rx_stats->preambles_found);
|
LOG_OR_RETURN("\"preambles_found\": %zd, ", rx_stats->preambles_found);
|
||||||
LOG_OR_RETURN("\"successful_decodes\": %zd, ", rx_stats->successful_decodes);
|
LOG_OR_RETURN("\"successful_decodes\": %zd, ", rx_stats->successful_decodes);
|
||||||
LOG_OR_RETURN("\"failed_decodes\": %zd, ", rx_stats->failed_decodes);
|
LOG_OR_RETURN("\"failed_decodes\": %zd, ", rx_stats->failed_decodes);
|
||||||
LOG_OR_RETURN("\"header_errors\": %zd, ", rx_stats->header_errors);
|
LOG_OR_RETURN("\"header_errors\": %zd", rx_stats->header_errors);
|
||||||
|
|
||||||
return end_message();
|
return end_message();
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ add_executable(
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
test_correlator
|
test_correlator
|
||||||
m
|
m
|
||||||
liquid
|
/usr/local/lib64/libliquid.a
|
||||||
)
|
)
|
||||||
|
|
||||||
#------------------------------------
|
#------------------------------------
|
||||||
|
@ -46,7 +46,7 @@ add_executable(
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
test_layer1_loopback
|
test_layer1_loopback
|
||||||
m
|
m
|
||||||
liquid
|
/usr/local/lib64/libliquid.a
|
||||||
fftw3
|
fftw3
|
||||||
fftw3f
|
fftw3f
|
||||||
fec
|
fec
|
||||||
|
@ -66,7 +66,7 @@ target_link_libraries(
|
||||||
test_freq_est
|
test_freq_est
|
||||||
fftw3f
|
fftw3f
|
||||||
m
|
m
|
||||||
liquid
|
/usr/local/lib64/libliquid.a
|
||||||
)
|
)
|
||||||
|
|
||||||
#------------------------------------
|
#------------------------------------
|
||||||
|
@ -98,5 +98,22 @@ target_link_libraries(
|
||||||
fec
|
fec
|
||||||
fftw3f
|
fftw3f
|
||||||
m
|
m
|
||||||
liquid
|
/usr/local/lib64/libliquid.a
|
||||||
|
)
|
||||||
|
|
||||||
|
#------------------------------------
|
||||||
|
|
||||||
|
add_executable(
|
||||||
|
test_jsonlogger
|
||||||
|
../src/jsonlogger.c
|
||||||
|
../src/jsonlogger.h
|
||||||
|
../src/debug_structs.h
|
||||||
|
test_jsonlogger.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
test_freq_est
|
||||||
|
fftw3f
|
||||||
|
m
|
||||||
|
/usr/local/lib64/libliquid.a
|
||||||
)
|
)
|
||||||
|
|
72
impl/test/test_jsonlogger.c
Normal file
72
impl/test/test_jsonlogger.c
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "../src/jsonlogger.h"
|
||||||
|
#include "../src/debug_structs.h"
|
||||||
|
|
||||||
|
static rx_stats_t m_rx_stats;
|
||||||
|
|
||||||
|
static bool m_running;
|
||||||
|
|
||||||
|
static void signal_handler(int signal, siginfo_t *info, void *ctx)
|
||||||
|
{
|
||||||
|
(void)signal;
|
||||||
|
(void)info;
|
||||||
|
(void)ctx;
|
||||||
|
|
||||||
|
fprintf(stderr, "\nGracefully shutting down on signal %d.\n", signal);
|
||||||
|
|
||||||
|
m_running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
if(!jsonlogger_init("jsonlog_test.fifo")) {
|
||||||
|
fprintf(stderr, "Could not initialize JSON logger.\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ** Set up signal handling
|
||||||
|
|
||||||
|
struct sigaction term_action = {0};
|
||||||
|
term_action.sa_sigaction = signal_handler;
|
||||||
|
|
||||||
|
if(sigaction(SIGTERM, &term_action, NULL) < 0) {
|
||||||
|
perror("sigaction");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sigaction(SIGINT, &term_action, NULL) < 0) {
|
||||||
|
perror("sigaction");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignore SIGPIPE
|
||||||
|
term_action.sa_sigaction = SIG_IGN;
|
||||||
|
|
||||||
|
if(sigaction(SIGPIPE, &term_action, NULL) < 0) {
|
||||||
|
perror("sigaction");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_running = true;
|
||||||
|
while(m_running) {
|
||||||
|
m_rx_stats.preambles_found++;
|
||||||
|
m_rx_stats.successful_decodes += 2;
|
||||||
|
m_rx_stats.failed_decodes += 3;
|
||||||
|
m_rx_stats.header_errors += 4;
|
||||||
|
|
||||||
|
jsonlogger_log_rx_stats(&m_rx_stats);
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ** Cleanup **
|
||||||
|
|
||||||
|
jsonlogger_shutdown();
|
||||||
|
|
||||||
|
fprintf(stderr, "Done.\n");
|
||||||
|
}
|
Loading…
Reference in a new issue