aboutsummaryrefslogtreecommitdiffstats
path: root/logger.c
diff options
context:
space:
mode:
authorPA4WDH2023-05-24 12:57:25 +0200
committerPA4WDH2023-05-24 12:57:25 +0200
commit16fb812a46d0e8cde432b58f7dbf6fce147eb89f (patch)
tree9e019f98e515cb21e6c38ff487a82fe375675991 /logger.c
parentDetect program name from argv[0] (diff)
downloadcputemp2maxfreq-16fb812a46d0e8cde432b58f7dbf6fce147eb89f.tar.gz
cputemp2maxfreq-16fb812a46d0e8cde432b58f7dbf6fce147eb89f.tar.bz2
cputemp2maxfreq-16fb812a46d0e8cde432b58f7dbf6fce147eb89f.zip
Add CSV logging
Diffstat (limited to 'logger.c')
-rw-r--r--logger.c66
1 files changed, 63 insertions, 3 deletions
diff --git a/logger.c b/logger.c
index 83e92e1..143b62e 100644
--- a/logger.c
+++ b/logger.c
@@ -3,13 +3,16 @@
#include <syslog.h>
#include <sys/time.h>
#include <time.h>
-#include "cputemp2maxfreq.h"
#include <string.h>
+#include <unistd.h>
+#include "cputemp2maxfreq.h"
+#include "debug.h"
extern struct s_config config;
+extern struct s_cpudata cpudata;
-// These functions are not called directly. They are set by argparse in the
-// config.logger function pointer.
+// The logger_* functions are not called directly. They are set by argparse in
+// the config.logger function pointer.
// No logging at all
void logger_none(char *format,...) { }
@@ -69,3 +72,60 @@ void logger_kmsg(char *format,...)
config.logger(buffer);
}
}
+
+// CSV logging fields:
+// 1: Timestamp
+// 2: CPU Minimum frequency
+// 3: CPU Maximum frequency
+// 4: CPU Current frequency
+// 5: CPU Temperature
+// 6: Target temperature
+// 7: Scaling maximum frequency before increase/decrease
+void csvlog_init()
+{
+ int exists;
+
+ DEBUG1_LOG("Started\n");
+ exists=access(config.csvlog,F_OK);
+ DEBUG1_LOG("File %s exists: %d\n",config.csvlog,exists);
+
+ if ((exists!=0) || (config.csvoverwrite==1))
+ {
+ DEBUG1_LOG("Creating/overwriting CSV file\n");
+ config.csvfile=fopen(config.csvlog,"w");
+ fputs("\"timestamp\","
+ "\"CPU Minumum frequency\","
+ "\"CPU Maximum frequency\","
+ "\"CPU Current frequency\","
+ "\"CPU Temperature\","
+ "\"Target temperature\","
+ "\"Scaling maximum frequency\"\n",config.csvfile);
+ } else {
+ DEBUG1_LOG("Appending to CSV file\n");
+ config.csvfile=fopen(config.csvlog,"a");
+ }
+}
+
+// Write a single line of CSV data
+void csvlog_write()
+{
+ struct timeval unixtime;
+ struct tm *time;
+ char timestring[255];
+
+ DEBUG1_LOG("Writing data series to CSV file\n");
+
+ gettimeofday(&unixtime,NULL);
+ time=localtime(&unixtime.tv_sec);
+ strftime(timestring,255,"%F %T",time);
+
+ fprintf(config.csvfile,"\"%s\",\"%ld\",\"%ld\",\"%ld\",\"%ld\",\"%ld\",\"%ld\"\n",timestring,cpudata.min_freq,cpudata.max_freq,cpudata.cur_freq,cpudata.cur_temp/1000,config.max_temp/1000,cpudata.scale_max);
+}
+
+// Close the CSV file
+void csvlog_close()
+{
+ DEBUG1_LOG("Closing CSV file\n");
+ fclose(config.csvfile);
+ config.csvfile=NULL;
+}