From 1d6c72422a02ba5aec2a7dfa12905ea339940aed Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Mon, 3 Oct 2011 07:25:57 +0000 Subject: [PATCH] added -d option to enable debug log (written to $HOME/.psensor/log) log sensor values in debug mode --- NEWS | 4 ++++ src/lib/log.c | 57 ++++++++++++++++++++++++++++++++++++++------------------- src/lib/log.h | 3 +++ src/main.c | 22 +++++++++++++++++++++- 4 files changed, 66 insertions(+), 20 deletions(-) diff --git a/NEWS b/NEWS index 0436cba..25a14d2 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +* v0.6.2.12 +** psensor: added -d option to enable debug log (written to $HOME/.psensor/log). +** psensor: log sensor values in debug mode. + * v0.6.2.11 ** psensor-server/web interface: use jqplot default css. ** psensor-server/web interface: added excanvas for ie < 9 support. diff --git a/src/lib/log.c b/src/lib/log.c index fd7cf7a..73079f3 100644 --- a/src/lib/log.c +++ b/src/lib/log.c @@ -21,12 +21,14 @@ #include #define _(str) gettext(str) +#include #include +#include #include "log.h" static FILE *file; -static int log_level = LOG_DEBUG; +int log_level = LOG_INFO; void log_open(const char *path, int lvl) { @@ -40,39 +42,56 @@ void log_open(const char *path, int lvl) void log_puts(int lvl, const char *msg) { + log_printf(lvl, msg); +} + +void log_close() +{ + if (!file) + return ; + + fclose(file); + + file = NULL; +} + +#define LOG_BUFFER 4096 +void log_printf(int lvl, const char *fmt, ...) +{ + struct timeval tv; + static char buffer[1 + LOG_BUFFER]; + va_list ap; + char *lvl_str; + if (!file || lvl > log_level) return ; + va_start(ap, fmt); + vsnprintf(buffer, LOG_BUFFER, fmt, ap); + buffer[LOG_BUFFER] = '\0'; + va_end(ap); + + if (gettimeofday(&tv, NULL) != 0) + timerclear(&tv); + switch (lvl) { case LOG_WARN: - fputs("[WARN] ", file); + lvl_str = "[WARN]"; break; case LOG_ERR: - fputs("[ERR] ", file); + lvl_str = "[ERR]"; break; case LOG_DEBUG: - fputs("[DEBUG] ", file); + lvl_str = "[DEBUG]"; break; case LOG_INFO: - fputs("[INFO] ", file); + lvl_str = "[INFO]"; break; default: - fputs("[??] ", file); + lvl_str = "[??]"; } - fputs(msg, file); - fputc('\n', file); - + fprintf(file, "[%ld] %s %s\n", tv.tv_sec, lvl_str, buffer); fflush(file); } -void log_close() -{ - if (!file) - return ; - - fclose(file); - - file = NULL; -} - diff --git a/src/lib/log.h b/src/lib/log.h index 20c6229..a8a0245 100644 --- a/src/lib/log.h +++ b/src/lib/log.h @@ -29,8 +29,11 @@ enum log_level { void log_open(const char *path, int lvl); +void log_printf(int lvl, const char *fmt, ...); void log_puts(int lvl, const char *msg); void log_close(); +extern int log_level; + #endif diff --git a/src/main.c b/src/main.c index d8e7234..6e0ded5 100644 --- a/src/main.c +++ b/src/main.c @@ -131,6 +131,18 @@ update_psensor_values_size(struct psensor **sensors, struct config *cfg) } } +static void log_measures(struct psensor **sensors) +{ + if (log_level == LOG_DEBUG) + while (*sensors) { + log_printf(LOG_DEBUG, "%s %.2f", + (*sensors)->name, + psensor_get_current_value(*sensors)); + + sensors++; + } +} + void update_psensor_measures(struct ui_psensor *ui) { struct psensor **sensors = ui->sensors; @@ -154,6 +166,9 @@ void update_psensor_measures(struct ui_psensor *ui) #ifdef HAVE_LIBATIADL amd_psensor_list_update(sensors); #endif + + log_measures(sensors); + g_mutex_unlock(ui->sensors_mutex); sleep(cfg->sensor_update_interval); @@ -309,6 +324,7 @@ static struct option long_options[] = { {"version", no_argument, 0, 'v'}, {"help", no_argument, 0, 'h'}, {"url", required_argument, 0, 'u'}, + {"debug", no_argument, 0, 'd'}, {0, 0, 0, 0} }; @@ -330,7 +346,7 @@ int main(int argc, char **argv) textdomain(PACKAGE); #endif - while ((optc = getopt_long(argc, argv, "vhu:", long_options, + while ((optc = getopt_long(argc, argv, "vhdu:", long_options, NULL)) != -1) { switch (optc) { case 'u': @@ -343,6 +359,10 @@ int main(int argc, char **argv) case 'v': print_version(); exit(EXIT_SUCCESS); + case 'd': + printf(_("Enables debug mode.\n")); + log_level = LOG_DEBUG; + break; default: cmdok = 0; break; -- 2.7.4