]> www.average.org Git - pulsecounter.git/blobdiff - linux/dbstore.c
keep database config in a separate file
[pulsecounter.git] / linux / dbstore.c
index edd443102fdcb1e4826c72b922a7b142e8cbe3e2..b39235b1b2eb66c241840e2e9b4d223862555447 100644 (file)
@@ -1,21 +1,90 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <time.h>
+#include <ctype.h>
+#include <string.h>
+
+#include <mysql/mysql.h>
 
 #include "dbstore.h"
 
+static char *host = NULL;
+static char *user = NULL;
+static char *pass = NULL;
+static char *dbnm = "watermeter";
+
+int dbconfig(char *conffile)
+{
+       FILE *fp = fopen(conffile, "r");
+       int rc = 0;
+       char buf[128];
+
+       if (!fp)
+               return 1;
+       while (fgets(buf, sizeof(buf), fp)) {
+               char *k, *v, *e;
+
+               e = buf + strlen(buf) - 1;
+               if (*e == '\n')
+                       *e = '\0';
+               else {
+                       /* line too long */
+                       rc = 1;
+                       break;
+               }
+               for (k = buf; k < e && isspace(k); k++) /*nothing*/ ;
+               if (*k == '#') break;
+               for (v = k; v < e && !isspace(v)
+                           && *v != ':' && *v != '='; v++) /*nothing*/ ;
+               if (v < e && (*v == ':' || *v == '=')) v++;
+               for (; v < e && (isspace(v) || *v == ':' || *v == '=')
+                                                       ; v++) /*nothing*/ ;
+               if (v >= e) {
+                       /* no value */
+                       rc = 1;
+                       break;
+               }
+               if      (!strcmp(k, "host"))     host = strdup(v);
+               else if (!strcmp(k, "user"))     user = strdup(v);
+               else if (!strcmp(k, "password")) pass = strdup(v);
+               else if (!strcmp(k, "database")) dbnm = strdup(v);
+               else {
+                       /* unknown key */
+                       rc = 1;
+                       break;
+               }
+       }
+       return rc;
+}
+
 int dbstore(uint8_t which, uint32_t val)
 {
        time_t t;
        int i;
+       MYSQL mysql;
+       int rc = 0;
        struct tm tm;
        char buf[64];
-       char tstr[64];
+       char tstr[32];
        char *table = (which == 1) ? "coldcnt" : "hotcnt";
+       char statement[64];
 
        t = time(NULL);
        (void)gmtime_r(&t, &tm);
        (void)strftime(tstr, sizeof(tstr), "%Y-%m-%d %H:%M:%S", &tm);
-       printf("insert into %s values (\"%s\",%u);\n", table, tstr, val);
-       return 0;
+       mysql_init(&mysql);
+       if(!mysql_real_connect(&mysql, host, user, pass, dbnm, 0, NULL, 0)) {
+               fprintf(stderr, "mysql connect error: %s\n",
+                       mysql_error(&mysql));
+               return 1;
+       }
+       snprintf(statement, sizeof(statement),
+                "insert into %s values (\"%s\",%u);\n",
+                table, tstr, val);
+       rc = mysql_query(&mysql, statement);
+       if (rc)
+               fprintf(stderr, "mysql insert \"%s\" error: %s\n",
+                       statement, mysql_error(&mysql));
+       mysql_close(&mysql);
+       return rc;
 }