odyssey/sources/err_logger.c

50 lines
1.1 KiB
C

#include "err_logger.h"
od_error_logger_t *
od_err_logger_create(size_t intervals_count)
{
od_error_logger_t *err_logger = malloc(sizeof(od_error_logger_t));
if (err_logger == NULL) {
return NULL;
}
err_logger->intercals_cnt = intervals_count;
err_logger->current_interval_num = 0;
err_logger->interval_counters =
malloc(sizeof(od_counter_t) * intervals_count);
for (size_t i = 0; i < intervals_count; ++i) {
err_logger->interval_counters[i] = od_counter_create_default();
if (err_logger->interval_counters[i] == NULL)
return NULL;
}
pthread_mutex_init(&err_logger->lock, NULL);
return err_logger;
}
od_retcode_t
od_err_logger_free(od_error_logger_t *err_logger)
{
for (size_t i = 0; i < err_logger->intercals_cnt; ++i) {
int rc = od_counter_free(err_logger->interval_counters[i]);
if (rc != OK_RESPONSE)
return rc;
}
pthread_mutex_destroy(&err_logger->lock);
free(err_logger);
return OK_RESPONSE;
}
od_retcode_t
od_error_logger_store_err(od_error_logger_t *l, size_t err_t)
{
od_counter_inc(l->interval_counters[l->current_interval_num], err_t);
return OK_RESPONSE;
}