From d83f2df60fd39aaa79d15f8b60901196117b700f Mon Sep 17 00:00:00 2001 From: "DLABAL,Eduard" Date: Sun, 18 May 2025 19:02:17 +0200 Subject: [PATCH] Implement logger functionality and signal handling: add Logger structure with mutex, logging functions, and handle SIGINT in utils. --- include/file_handler.h | 2 +- include/logger.h | 21 +++++++++++ include/main.h | 24 +++++++++++-- include/utils.h | 1 + src/logger.c | 80 ++++++++++++++++++++++++++++++++++++++++++ src/main.c | 10 ++---- src/utils.c | 7 ++++ 7 files changed, 134 insertions(+), 11 deletions(-) diff --git a/include/file_handler.h b/include/file_handler.h index 07fcf46..2086007 100644 --- a/include/file_handler.h +++ b/include/file_handler.h @@ -8,8 +8,8 @@ #include "main.h" #include "users.h" +#include "utils.h" #include -#include int loadListFromCSV(char* _filename, list_t * _list); diff --git a/include/logger.h b/include/logger.h index e69de29..924add6 100644 --- a/include/logger.h +++ b/include/logger.h @@ -0,0 +1,21 @@ +#ifndef __LOGGER_H__ +#define __LOGGER_H__ + +#include "main.h" +#include "rfid_handler.h" +#include "utils.h" + +typedef struct +{ + pthread_mutex_t lock; + FILE *f_log; +} Logger; + +Logger *initLogger(const char *_filename); +int logErrorEvent(Logger *_logger, const char *_message); +int logWarningEvent(Logger *_logger, const char *_message); +int logHardwareEvent(Logger *_logger, const char *_event_origin, const char *_message); +int logInfoEvent(Logger *_logger, const char *_message); +int endLogger(Logger *_logger); + +#endif \ No newline at end of file diff --git a/include/main.h b/include/main.h index 97ee4b8..77f8ecc 100644 --- a/include/main.h +++ b/include/main.h @@ -1,3 +1,23 @@ +/** + * @file main.h + * @brief Main header file for the application. + * + * This header includes all necessary standard and project-specific headers, + * defines basic macros and types, and declares the main entry point of the program. + * + * Included headers: + * - Standard C libraries (stdio, stdlib, stdint, time, unistd, pthread, ncurses, fcntl, errno, termios, string, signal) + * - Project-specific modules (utils, logger, users, tui, rfid_handler, file_handler) + * + * Macros: + * - TRUE, FALSE: Boolean values for logic operations. + * - BYTE: Unsigned 8-bit integer type alias. + * - MIN_X_TERMINAL_SIZE, MIN_Y_TERMINAL_SIZE: Minimum terminal dimensions for UI. + * + * Function Declarations: + * - int main(int argc, char const **argv): Program entry point. + */ + #include #include #include @@ -14,7 +34,6 @@ #include #include -#include "utils.h" #ifndef __MAIN_H__ #define __MAIN_H__ @@ -34,9 +53,8 @@ #define MIN_X_TERMINAL_SIZE 50 #define MIN_Y_TERMINAL_SIZE 20 -void handle_sigint(int sig); +#define JOURNAL_FILENAME "lighttam_journal" int main(int argc, char const **argv); - #endif \ No newline at end of file diff --git a/include/utils.h b/include/utils.h index 7e9bc34..6a8d2b7 100644 --- a/include/utils.h +++ b/include/utils.h @@ -7,4 +7,5 @@ void printTimeInString(time_t _input, char * _output); void printDateAndTimeInString(time_t _input, char * _output); +void handle_sigint(int sig); #endif \ No newline at end of file diff --git a/src/logger.c b/src/logger.c index e69de29..1d81369 100644 --- a/src/logger.c +++ b/src/logger.c @@ -0,0 +1,80 @@ +#include "logger.h" + +Logger *initLogger(const char *_filename) +{ + Logger *logger_struct = malloc(sizeof(Logger)); + if (logger_struct == NULL) + { + return NULL; + } + + logger_struct->f_log = fopen(_filename, "w"); + if (logger_struct->f_log == NULL) + { + free(logger_struct); + return NULL; + } + pthread_mutex_init(&logger_struct->lock, NULL); +} + +int logErrorEvent(Logger *_logger, const char *_message) +{ + if (_logger == NULL) + { + return 0; + } + + char current_time_str[32]; + printDateAndTimeInString(time(NULL), current_time_str); + + fprintf(_logger->f_log, "%s [ERROR] %s", current_time_str, _message); + return 1; +} + +int logWarningEvent(Logger *_logger, const char *_message) +{ + if (_logger == NULL) + { + return 0; + } + + char current_time_str[32]; + printDateAndTimeInString(time(NULL), current_time_str); + + fprintf(_logger->f_log, "%s [WARNING] %s", current_time_str, _message); + return 1; +} + +int logHardwareEvent(Logger *_logger, const char *_event_origin, const char *_message) +{ + if (_logger == NULL) + { + return 0; + } + + char current_time_str[32]; + printDateAndTimeInString(time(NULL), current_time_str); + + fprintf(_logger->f_log, "%s [%s] %s", current_time_str, _event_origin, _message); + return 1; +} +int logInfoEvent(Logger *_logger, const char *_message) +{ + if (_logger == NULL) + { + return 0; + } + + char current_time_str[32]; + printDateAndTimeInString(time(NULL), current_time_str); + + fprintf(_logger->f_log, "%s [INFO] %s", current_time_str, _message); + return 1; +} +int endLogger(Logger *_logger) +{ + fclose(_logger->f_log); + free(_logger); + _logger = NULL; + return 0; +} \ No newline at end of file diff --git a/src/main.c b/src/main.c index 932502b..373816f 100644 --- a/src/main.c +++ b/src/main.c @@ -1,16 +1,12 @@ #include "main.h" + +#include "utils.h" +#include "logger.h" #include "users.h" #include "tui.h" #include "rfid_handler.h" #include "file_handler.h" -void handle_sigint(int sig) -{ - endwin(); - clear(); - exit(0); -} - int main(int argc, char const **argv) { signal(SIGINT, handle_sigint); diff --git a/src/utils.c b/src/utils.c index e1a5f1d..34a9ab1 100644 --- a/src/utils.c +++ b/src/utils.c @@ -26,3 +26,10 @@ void printDateAndTimeInString(time_t _input, char *_output) return; } + +void handle_sigint(int sig) +{ + endwin(); + clear(); + exit(0); +}