10 #include <mysql/mysql.h>
14 static char *host = NULL;
15 static char *user = NULL;
16 static char *pass = NULL;
17 static char *dbnm = "watermeter";
19 int dbconfig(char *conffile)
21 FILE *fp = fopen(conffile, "r");
27 while (fgets(buf, sizeof(buf), fp)) {
30 e = buf + strlen(buf) - 1;
38 for (k = buf; k < e && isspace(k); k++) /*nothing*/ ;
40 for (v = k; v < e && !isspace(v)
41 && *v != ':' && *v != '='; v++) /*nothing*/ ;
42 if (v < e && (*v == ':' || *v == '=')) v++;
43 for (; v < e && (isspace(v) || *v == ':' || *v == '=')
50 if (!strcmp(k, "host")) host = strdup(v);
51 else if (!strcmp(k, "user")) user = strdup(v);
52 else if (!strcmp(k, "password")) pass = strdup(v);
53 else if (!strcmp(k, "database")) dbnm = strdup(v);
63 int dbstore(uint8_t which, uint32_t val)
72 char *table = (which == 1) ? "cold" : "hot";
75 uint32_t prev_val = 0;
78 (void)gmtime_r(&t, &tm);
79 (void)strftime(tstr, sizeof(tstr), "%Y-%m-%d %H:%M:%S", &tm);
81 if(!mysql_real_connect(&mysql, host, user, pass, dbnm, 0, NULL, 0)) {
82 g_warning("mysql connect error: %s\n", mysql_error(&mysql));
85 mysql_autocommit(&mysql, FALSE);
87 snprintf(statement, sizeof(statement),
88 "select value from %scnt order by timestamp desc limit 1;\n",
90 if ((rc = mysql_query(&mysql, statement)))
91 g_warning("mysql \"%s\" error: %s\n",
92 statement, mysql_error(&mysql));
93 else if ((result = mysql_store_result(&mysql))){
94 MYSQL_ROW row = mysql_fetch_row(result);
95 if (row && *row) prev_val = atoi(*row);
96 mysql_free_result(result);
98 if (val <= prev_val) {
99 snprintf(statement, sizeof(statement),
100 "insert into %sadj values (\"%s\",%u);\n",
101 table, tstr, prev_val);
102 g_info("%s %u <= %u, %s", table, val, prev_val, statement);
103 if ((rc = mysql_query(&mysql, statement)))
104 g_warning("mysql \"%s\" error: %s\n",
105 statement, mysql_error(&mysql));
107 snprintf(statement, sizeof(statement),
108 "insert into %scnt values (\"%s\",%u);\n",
110 if ((rc = mysql_query(&mysql, statement)))
111 g_warning("mysql \"%s\" error: %s\n",
112 statement, mysql_error(&mysql));
115 if ((rc = mysql_commit(&mysql)))
116 g_warning("mysql commit error: %s\n",
117 mysql_error(&mysql));