123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #include "plt.h"
- static double ts_last_meter_record = 0.0;
- static double ts_last_meter_clean = 0.0;
- static sqlite3* s_ev_db;
- static pthread_mutex_t s_ev_db_mut;
- /* ms */
- static double ev_get_timeofday()
- {
- struct timeval tv;
- struct timezone tz;
-
- gettimeofday(&tv,&tz);
- return (double)tv.tv_sec * 1000 + (double)tv.tv_usec/1000;
- }
- static int ev_init_db()
- {
- int ret = 0;
- int rc = 0;
- char buf[128];
-
- sprintf(buf,"../data/event.db");
-
- if( access(buf, 0) < 0){
- log_dbg("%s, access ev db fail, path:%s", __func__, buf);
- ret = -1;
- }else{
- rc = sqlite3_open(buf,&s_ev_db);
- if(rc == SQLITE_OK) {
- pthread_mutex_init(&s_ev_db_mut, NULL);
- }else{
- ret = -2;
- }
- }
- log_dbg("%s, ret:%d", __func__, ret);
- return ret;
- }
- void ev_lock_db()
- {
- pthread_mutex_lock(&s_ev_db_mut);
- }
- void ev_unlock_db()
- {
- pthread_mutex_unlock(&s_ev_db_mut);
- }
- static void ev_record_meter()
- {
- char *errmsg = NULL;
- sqlite3* db = s_ev_db;
- struct timeseg_t* ts = NULL;
- char sql[1024];
- int idx, rc;
- double com_ae = 0.0;
- double pos_ae = 0.0;
- double neg_ae = 0.0;
- double com_ap = 0.0;
- int state = 0;
- meter_get_ctn_meter_state(&state);
- if(state == SMST_READY){
- meter_get_ctn_com_ae(&com_ae);
- meter_get_ctn_pos_ae(&pos_ae);
- meter_get_ctn_neg_ae(&neg_ae);
- meter_get_ctn_ap(&com_ap);
- sprintf(sql, "insert into m%d (ts,com_ae,pos_ae,neg_ae,com_ap) values(%.0f,%.1f,%.1f,%.1f,%d)",
- 1, ev_get_timeofday()/1000.0,
- com_ae,pos_ae,neg_ae,com_ap);
- ev_lock_db();
- rc = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
- ev_unlock_db();
- if( rc != SQLITE_OK ){
- log_dbg("%s, idx:%d, sqlite3_exec fail:%d, when %s", __func__, rc, sql );
- }
- }
- meter_get_aux_meter_state(&state);
- if(state == SMST_READY){
- com_ae = 0.0;
- pos_ae = 0.0;
- neg_ae = 0.0;
- com_ap = 0.0;
- meter_get_aux_com_ae(&com_ae);
- meter_get_aux_pos_ae(&pos_ae);
- meter_get_aux_neg_ae(&neg_ae);
- meter_get_aux_ap(&com_ap);
- sprintf(sql, "insert into m%d (ts,com_ae,pos_ae,neg_ae,com_ap) values(%.0f,%.1f,%.1f,%.1f,%d)",
- 2, ev_get_timeofday()/1000.0,
- com_ae,pos_ae,neg_ae,com_ap);
- ev_lock_db();
- rc = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
- ev_unlock_db();
- if( rc != SQLITE_OK ){
- log_dbg("%s, idx:%d, sqlite3_exec fail:%d, when %s", __func__, rc, sql );
- }
- }
- }
- static void ev_clean_meter()
- {
- char *errmsg = NULL;
- sqlite3* db = s_ev_db;
- struct timeseg_t* ts = NULL;
- char sql[1024];
- int idx, rc;
- for(idx = 1; idx <= 2; idx++){
- sprintf(sql, "delete from m%d where ts<%.0f",
- idx, ev_get_timeofday()/1000.0-3600*24*31);
- ev_lock_db();
- rc = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
- ev_unlock_db();
- if( rc != SQLITE_OK ){
- log_dbg("%s, idx:%d, sqlite3_exec fail:%d, when %s", __func__, rc, sql );
- }
- }
- }
- void ev_exe()
- {
- double ts = ev_get_timeofday();
- if( ts - ts_last_meter_record > 60000 ){ // 60s
- ts_last_meter_record = ts;
- ev_record_meter();
- }
- if( ts - ts_last_meter_clean > 3600*24 ){ // every day
- ts_last_meter_clean = ts;
- ev_clean_meter();
- }
- }
- int ev_init()
- {
- int ret = 0;
- if( ev_init_db() != 0 ){
- ret = -1;
- }
- return ret;
- }
|