diff --git a/cronjob/chart/Makefile b/cronjob/chart/Makefile index 17514c6..9756bd9 100644 --- a/cronjob/chart/Makefile +++ b/cronjob/chart/Makefile @@ -24,8 +24,8 @@ all: $(BIN_NAME) # Binary Linken $(BIN_NAME): $(OBJS) - @ echo Linke: $(LD) $(DEBUG) $(NOLOG) -L$$(pg_config --libdir)/pgsql -lpq $(LDFLAS) $(BIN_NAME) $(OBJS) - @ $(LD) $(DEBUG) $(NOLOG) -L$$(pg_config --libdir)/pgsql -lpq $(LDFLAS) $(BIN_NAME) $(OBJS) + @ echo Linke: $(LD) $(DEBUG) $(NOLOG) -L$$(pg_config --libdir)/pgsql -lm -lpq $(LDFLAS) $(BIN_NAME) $(OBJS) + @ $(LD) $(DEBUG) $(NOLOG) -L$$(pg_config --libdir)/pgsql -lm -lpq $(LDFLAS) $(BIN_NAME) $(OBJS) @ echo Binary $(BIN_NAME) ist fertig! # Abhängigkeiten diff --git a/cronjob/chart/image_file/image_common.c b/cronjob/chart/image_file/image_common.c index 65f5d45..e42d770 100644 --- a/cronjob/chart/image_file/image_common.c +++ b/cronjob/chart/image_file/image_common.c @@ -1 +1,2 @@ #include "image_common.h" + diff --git a/cronjob/chart/image_file/image_data.c b/cronjob/chart/image_file/image_data.c index bd0b23f..e55bef5 100644 --- a/cronjob/chart/image_file/image_data.c +++ b/cronjob/chart/image_file/image_data.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "image_data.h" #include "image_common.h" @@ -9,11 +10,11 @@ #include "../definitions.h" #define BUFFSIZE 512 -#define BUFFSIZE_EXTRA 2048 +static pix_list_ptr add_pix_value(pix_list_ptr , int , int ); static char *get_conn_string(); static PGconn *pg_check_connect(char *); static PGresult *pg_check_exec(PGconn *, char *); @@ -25,17 +26,85 @@ static char *get_type_table_by_id(PGconn *, int ); pix_list_ptr get_pix_list(int c_width){ - double seconds_per_pix = (img_cfg.show_interval * 0.1)/(c_width * 0.1); - char *conn_string = get_conn_string(); - PGconn *conn = pg_check_connect(conn_string); + double seconds_per_pix = ((double)c_width)/((double)img_cfg.show_interval); + char *conn_string = get_conn_string(); + PGconn *conn = pg_check_connect(conn_string); + char *table = get_type_table_by_id(conn, img_cfg.sens_id); + char *query = malloc(sizeof(char)*BUFFSIZE); + PGresult *res = NULL; + int time_field; + int val_field; + long time_temp; + int pix_coord; + int i; + long base_time; + pix_list_ptr list_ptr = NULL; + pix_list_ptr temp_ptr = NULL; + + DEBUGOUT1("\nHole Daten...\n"); + DEBUGOUT2(" Ein Pixel entspricht %f sekunden\n", seconds_per_pix); + + snprintf(query, BUFFSIZE, "SELECT round(date_part('epoch', current_timestamp)) AS now, round(date_part('epoch', timestamp)) AS times, %s AS val FROM %s WHERE timestamp > (current_timestamp - INTERVAL '%d seconds') ORDER BY times DESC", img_cfg.table_field, table, img_cfg.show_interval ); + + res = pg_check_exec(conn, query); + + time_field = PQfnumber(res, "times"); + val_field = PQfnumber(res, "val"); + + base_time = atol(PQgetvalue(res, 0, PQfnumber(res, "now"))) - img_cfg.show_interval; + + for (i = 0; i < PQntuples(res); i++){ + time_temp = atol(PQgetvalue(res, i, time_field)) - base_time; + pix_coord = floor( ((double)time_temp) * seconds_per_pix) ; + temp_ptr = add_pix_value(temp_ptr, pix_coord, atoi( PQgetvalue(res, i, val_field) ) ); + + if(list_ptr == NULL){ + list_ptr = temp_ptr; + } + + } + + + + + + PQclear(res); PQfinish(conn); + free(query); + free(table); free(conn_string); return NULL; } +static pix_list_ptr add_pix_value(pix_list_ptr ptr, int coord, int value){ + + if(ptr == NULL){ + ptr = malloc(sizeof(pix_list_t)); + ptr->next = NULL; + ptr->x_pix_coord = 0; + ptr->value_count = 0; + ptr->value_sum = 0; + } + + if(coord == ptr->x_pix_coord){ + ptr->value_sum += value; + ptr->value_count++; + } else { + ptr->next = malloc(sizeof(pix_list_t)); + ptr = ptr->next; + ptr->value_sum = value; + ptr->value_count = 1; + ptr->next = NULL; + } + + return ptr; + +} + + /* baut den String fuer die Postgres-Verbindung zusammen */ static char *get_conn_string(){ char *conn_string = malloc(sizeof(char)*BUFFSIZE); diff --git a/cronjob/chart/image_file/image_draw.c b/cronjob/chart/image_file/image_draw.c index fc396b4..b6bbbca 100644 --- a/cronjob/chart/image_file/image_draw.c +++ b/cronjob/chart/image_file/image_draw.c @@ -3,7 +3,7 @@ #include "image_data.h" int draw_to_file(FILE *fd){ - get_image_cfg(200); + get_pix_list(210); } static void create_image(){ diff --git a/cronjob/chart/image_file/image_file.c b/cronjob/chart/image_file/image_file.c index 9750591..e8f5c80 100644 --- a/cronjob/chart/image_file/image_file.c +++ b/cronjob/chart/image_file/image_file.c @@ -62,6 +62,7 @@ void process_image_cfg(char *image_cfg_file){ return; } if(check_file_interval()){ + regenerate_image(); } sleep(3); @@ -96,6 +97,7 @@ static int check_file_interval(){ } else { exit_error(ERROR_STAT); } + DEBUGOUT1("Datei ist aktuell genug!\n"); return 0; }