Browse Source

改系统自带的ntpd进行时间同步

guohui 1 year ago
parent
commit
f6664b5a10
5 changed files with 227 additions and 148 deletions
  1. 56 27
      pro/src/app.c
  2. 4 0
      pro/src/appweb_handle.c
  3. 161 50
      pro/src/sqlite_handle.c
  4. 2 2
      pro/src/sqlite_handle.h
  5. 4 69
      pro/src/sys.c

+ 56 - 27
pro/src/app.c

@@ -1771,36 +1771,14 @@ static void* shm_thread(void *arg)
 	pthread_exit(NULL);
 }
 
+#define USE_NTPD
 static void* ntp_thread(void *arg)
 {
     int r=0,flag=0;
     NTPClient  *pc=NULL;
     time_t time1=0,time2=0,utc_time;
     thread_handle_t *h=(thread_handle_t*)arg;
-    GlobalDeviceManager *dm=(GlobalDeviceManager*)h->arg;;
     NTPManager *pntp=&_globalNTPManager;
-    
-    r = dev_get_ntp_info(dm->db,  pntp);
-    if (r) {
-        pntp->mode = 1;
-        strcpy(pntp->ntpaddress, "119.28.183.184");
-        strcpy(pntp->ntpName, "百度NTP");
-        pntp->port = 123;
-        pntp->product_id = dm->_globalDevInfo.product.id;
-        time_t t = time(NULL);
-        struct tm* ptm = localtime(&t);
-        sprintf(pntp->time, "%04d-%02d-%02d %02d:%02d:%02d", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
-        struct tm* ptm_gm = gmtime(&t);
-        pntp->tzone = 8;
-        pntp->weekday = (ptm->tm_wday == 0) ? 7 : ptm->tm_wday;
-        if (dev_insert_ntp_info(dm->db,  pntp)) {
-            log_e("insert npt info failed");
-        }
-    }
-    else {
-        log_d("get ntp info from database succeeded");
-    }
-    dev_Alarm_Run_message(dm, language_alarm_Init_Success[0], "NTP");
 
     #define NTP_TIMEOUT   5
     #define NTP_INTERVAL_TIME  300
@@ -1841,17 +1819,69 @@ static void* ntp_thread(void *arg)
 
     pthread_exit(NULL);
 }
+static int ntp_init(void)
+{
+    int r=0,flag=0;
+    time_t time1=0,time2=0,utc_time;
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    NTPManager *pntp=&_globalNTPManager;
+    
+    r = dev_get_ntp_info(dm->db,  pntp);
+    if (r) {
+        pntp->mode = 1;
+        strcpy(pntp->ntpaddress, "119.28.183.184");
+        strcpy(pntp->ntpName, "百度NTP");
+        pntp->port = 123;
+        pntp->product_id = dm->_globalDevInfo.product.id;
+        time_t t = time(NULL);
+        struct tm* ptm = localtime(&t);
+        sprintf(pntp->time, "%04d-%02d-%02d %02d:%02d:%02d", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
+        struct tm* ptm_gm = gmtime(&t);
+        pntp->tzone = 8;
+        pntp->weekday = (ptm->tm_wday == 0) ? 7 : ptm->tm_wday;
+        if (dev_insert_ntp_info(dm->db,  pntp)) {
+            log_e("insert npt info failed");
+        }
+    }
+    else {
+        log_d("get ntp info from database succeeded");
+    }
+    dev_Alarm_Run_message(dm, language_alarm_Init_Success[0], "NTP");
+
+#ifndef USE_NTPD
+    thread_start(THREAD_ID_NTP, ntp_thread, dm);
+#endif
+
+    return 0;
+}
+int ntp_config(NTPManager *nm)
+{
+    int r=-1;
+
+#ifdef USE_NTPD
+    char cmd[400];
+    char *conf="/etc/ntp.conf";
+
+    sprintf(cmd, "sed -e /^server.*$/d -e \"$ a server %s minpoll 4 maxpoll 5\" -i %s", nm->ntpaddress, conf);
+    printf("___cmd: %s\n", cmd);
+    r = system(cmd);
+    system("/etc/init.d/S49ntp restart");
+#endif
+
+    return r;
+}
+
 
 
 int snmp_config(SNMPManager *m)
 {
-   char path[200];
+    char path[200];
     char *conf="/snmp/conf/snmpd.conf";
     char user[100],pass[200],cmd[400],trapinfo[200];
     sys_get_path(path, conf);
 
     sprintf(trapinfo, "trap2sink \"%s\" %s \"%s\"", m->nmsIP, "public", "162");
-        //delete
+    //delete
     sprintf(cmd, "sed -e /^trap2sink.*$/d -i %s", path);
     system(cmd);
     sprintf(cmd, "sed -e \"$ a %s\" -i %s", trapinfo, path);
@@ -2193,13 +2223,12 @@ int app_init(void)
 
     thread_start(THREAD_ID_BREAKER_SCANNER, breaker_scanner_thread, _globalDeviceManager);
     thread_start(THREAD_ID_BREAKER, breaker_thread, _globalDeviceManager);
-
-    thread_start(THREAD_ID_NTP, ntp_thread, _globalDeviceManager);
     
 #ifndef USE_NETSWITCH
     thread_start(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager);
 #endif
 
+    ntp_init();
     cascade_init();
     netswitch_init();
     mail_init();

+ 4 - 0
pro/src/appweb_handle.c

@@ -356,6 +356,8 @@ static int file_io(void *conn, int ftype, int io)
 
     return 0;
 }
+/////////////////////////////////////////////////////////////////////////
+
 
 
 static void http_mg_cb(struct mg_connection *c, int ev, void *ev_data)
@@ -4106,6 +4108,8 @@ static void serviceManagement(void *conn)
         {
             set_zone(_globalNTPManager.tzone);
             ntp_sync_flag = 1;
+            extern int ntp_config(NTPManager *nm);
+            ntp_config(&_globalNTPManager);
         }
 
         char temp[100];

+ 161 - 50
pro/src/sqlite_handle.c

@@ -4669,14 +4669,16 @@ const char *tabNamePool[TAB_ID_MAX]={
 
 };
 
-static int sql_requery(sqlite3 *db, int tab_id, time_t from, time_t to, void *data, int *cnt)
+
+static int db_requery(sqlite3 *db, int tab_id, time_t from, time_t to, handle_t l)
 {
     int r=-1;
+    
     char *p,temp[1024];
     char time_s[64],time_e[64];
     sqlite3_stmt *stmt=NULL;
-    GlobalPowerInfo *pwr=NULL;
-    GlobalTreeACManager *pwr3=NULL;
+    GlobalPowerInfo pwr;
+    GlobalTreeACManager pwr3;
 
     get_time_str(time_s, sizeof(time_s), from);
     get_time_str(time_e, sizeof(time_e), to);
@@ -4686,60 +4688,69 @@ static int sql_requery(sqlite3 *db, int tab_id, time_t from, time_t to, void *da
         
         r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
         if (r != SQLITE_OK) {
-            log_e("___mqtt_load, sqlite3_prepare_v2 failed\n");
+            log_e("___db_requery 1, sqlite3_prepare_v2 failed\n");
             return -1;
         }
     
         while (sqlite3_step(stmt) == SQLITE_ROW) {
-            pwr->product_id = sqlite3_column_int(stmt, 1);
-            pwr->product_ch_id =  sqlite3_column_int(stmt, 2);
-            pwr->product_status =  sqlite3_column_int(stmt, 3);
-            pwr->_power_info.voltage = sqlite3_column_double(stmt, 4);
-            pwr->_power_info.current = sqlite3_column_double(stmt, 5);
-            pwr->_power_info.power = sqlite3_column_double(stmt, 6);
-            pwr->_power_info.freq = sqlite3_column_double(stmt, 7);
-            pwr->_power_info.consumption = sqlite3_column_double(stmt, 8);
-            pwr->_power_info.factor = sqlite3_column_double(stmt, 9);
+            pwr.product_id = sqlite3_column_int(stmt, 1);
+            pwr.product_ch_id =  sqlite3_column_int(stmt, 2);
+            pwr.product_status =  sqlite3_column_int(stmt, 3);
+            pwr._power_info.voltage = sqlite3_column_double(stmt, 4);
+            pwr._power_info.current = sqlite3_column_double(stmt, 5);
+            pwr._power_info.power = sqlite3_column_double(stmt, 6);
+            pwr._power_info.freq = sqlite3_column_double(stmt, 7);
+            pwr._power_info.consumption = sqlite3_column_double(stmt, 8);
+            pwr._power_info.factor = sqlite3_column_double(stmt, 9);
+
+            xlist_append(l, 0, &pwr, sizeof(pwr));
         }
         sqlite3_finalize(stmt);
-
     }
     else if(tab_id==TAB_ID_POWER3_INFO) {
         snprintf(temp, sizeof(temp), "SELECT * FROM %s WHERE (product_ph_samp_time BETWEEN '%s' AND '%s') ORDER BY product_index DESC;", tabNamePool[tab_id], time_s, time_e);
 
         r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
         if (r != SQLITE_OK) {
-            log_e("___mqtt_load, sqlite3_prepare_v2 failed\n");
+            log_e("___db_requery 2, sqlite3_prepare_v2 failed\n");
             return -1;
         }
 
         while (sqlite3_step(stmt) == SQLITE_ROW) {
-    /*
-            pwr3->product_id = sqlite3_column_int(stmt, 1);
-            pwr3->product_ph_type =  sqlite3_column_int(stmt, 2);
-            pwr3->product_ch_id =  sqlite3_column_int(stmt, 3);
-            pwr3->_PowerInfo.voltage = sqlite3_column_double(stmt, 4);
-            pwr3->_PowerInfo.current = sqlite3_column_double(stmt, 5);
-            pwr3->_PowerInfo.power = sqlite3_column_double(stmt, 6);
-            pwr3->_PowerInfo.freq = sqlite3_column_double(stmt, 7);
-            pwr3->_PowerInfo.consumption = sqlite3_column_double(stmt, 8);
-            pwr3->_PowerInfo.factor = sqlite3_column_double(stmt, 9);
-    */
+            pwr3.product_id = sqlite3_column_int(stmt, 1);
+            pwr3.product_ph_type =  sqlite3_column_int(stmt, 2);
+            pwr3.product_ch_id =  sqlite3_column_int(stmt, 3);
+            pwr3._PowerInfo.voltage = sqlite3_column_double(stmt, 4);
+            pwr3._PowerInfo.current = sqlite3_column_double(stmt, 5);
+            pwr3._PowerInfo.power = sqlite3_column_double(stmt, 6);
+            pwr3._PowerInfo.freq = sqlite3_column_double(stmt, 7);
+            pwr3._PowerInfo.consumption = sqlite3_column_double(stmt, 8);
+            pwr3._PowerInfo.factor = sqlite3_column_double(stmt, 9);
+
+            xlist_append(l, 0, &pwr3, sizeof(pwr3));
         }
         sqlite3_finalize(stmt);
     }
-    
-    return r;
+    else if(tab_id==TAB_ID_LOG_INFO) {
+        //
+    }
+    else if(tab_id==TAB_ID_ALARM_INFO) {
+        //
+    }
+    else {
+        return -1;
+    }
+
+    return 0;
 }
-int dev_data_xport(sqlite3 *db, int tab_id, int io_type, uint32_t time_s, uint32_t time_e, void *data, int *cnt)
+static int data_io(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to, void *data)
 {
     int i,r=-1;
 
-    if(tab_id<TAB_ID_NTP || tab_id>=TAB_ID_MAX || io_type<0 || io_type>=IO_MAX || !data || !cnt) {
+    if(tab_id<TAB_ID_NTP || tab_id>=TAB_ID_MAX || io_type<0 || io_type>=IO_MAX || (io_type==IO_IMPORT && !data)) {
         return -1;
     }
 
-    *cnt = 1;
     switch(tab_id) {
         case TAB_ID_NTP:
         {
@@ -4891,40 +4902,140 @@ int dev_data_xport(sqlite3 *db, int tab_id, int io_type, uint32_t time_s, uint32
         break;
 
         case TAB_ID_LOG_INFO:
+        case TAB_ID_ALARM_INFO:
+        case TAB_ID_POWER_INFO:
+        case TAB_ID_POWER3_INFO:
         {
             if(io_type==IO_EXPORT) {
-                //r = dev_get_ntp_info(db, (NTPManager*)data);
+                handle_t l=(handle_t)data;
+                db_requery(db, tab_id, from, to, l);
             }
         }
         break;
+    }
 
-        case TAB_ID_ALARM_INFO:
-        {
-            if(io_type==IO_EXPORT) {
-                //r = dev_search_alarm_info(db, (NTPManager*)data);
-            }
+    return 0;
+}
+//////////////////////////////////////////////////////////////////////////
+static int sensor_xport(int io_type, char *path)
+{
+    int i,r;
+    handle_t l;
+    list_node_t *ln;
+    list_cfg_t lc={0,0,-1};
+
+    l = xlist_init(&lc);
+    
+    //
+
+    for(i=0; i<xlist_size(l); i++) {
+        r = xlist_take_node(l, &ln, 0);
+        if(r==0) {
+            node_t *nd=&ln->data;
         }
-        break;
 
-        case TAB_ID_POWER_INFO:
-        {
-            if(io_type==IO_EXPORT) {
-                //r = dev_search_time_power_info(db, 0, ch_id, 00, (GlobalPowerInfo*)data, "start", "end");
-            }
+    }
+
+    sprintf(path, "/tmp/log.txt");
+
+    return 0;
+}
+static int alarm_xport(int io_type, char *path)
+{
+    int i,r;
+    handle_t l;
+    list_node_t *ln;
+    list_cfg_t lc={0,0,-1};
+
+    l = xlist_init(&lc);
+    
+    //
+
+    for(i=0; i<xlist_size(l); i++) {
+        r = xlist_take_node(l, &ln, 0);
+        if(r==0) {
+            node_t *nd=&ln->data;
         }
-        break;
 
-        case TAB_ID_POWER3_INFO:
-        {
-            if(io_type==IO_EXPORT) {
-                //r = dev_search_time_t_ac_power_info(db, 0, ch_id, 00, (GlobalPowerInfo*)data, "start", "end");
-            }
+    }
+
+
+
+    sprintf(path, "/tmp/alarm.ini");
+    return 0;
+}
+static int serv_xport(int io_type, char *path)
+{
+    int i,r;
+    handle_t l;
+    list_node_t *ln;
+    list_cfg_t lc={0,0,-1};
+
+    l = xlist_init(&lc);
+    
+    //
+
+    for(i=0; i<xlist_size(l); i++) {
+        r = xlist_take_node(l, &ln, 0);
+        if(r==0) {
+            node_t *nd=&ln->data;
         }
-        break;
+
     }
 
+
+
+    sprintf(path, "/tmp/serv.ini");
     return 0;
 }
+////////////////////////////////////////////////////////////////////
+static int log_xport(int period, char *path)
+{
+    int i,r;
+    handle_t l;
+    list_node_t *ln;
+    list_cfg_t lc={0,0,-1};
+
+    l = xlist_init(&lc);
+    
+    //
 
+    for(i=0; i<xlist_size(l); i++) {
+        r = xlist_take_node(l, &ln, 0);
+        if(r==0) {
+            node_t *nd=&ln->data;
+        }
+
+    }
+
+
+
+    sprintf(path, "/tmp/log.txt");
+    return 0;
+}
+static int power_xport(int period, char *path)
+{
+    int i,r;
+    handle_t l;
+    list_node_t *ln;
+    list_cfg_t lc={0,0,-1};
+
+    l = xlist_init(&lc);
+    
+    //
+
+    for(i=0; i<xlist_size(l); i++) {
+        r = xlist_take_node(l, &ln, 0);
+        if(r==0) {
+            node_t *nd=&ln->data;
+        }
+
+    }
+
+
+
+    sprintf(path, "/tmp/log.txt");
+    return 0;
+}
 
 

+ 2 - 2
pro/src/sqlite_handle.h

@@ -196,8 +196,8 @@ enum {
     
     TAB_ID_MAX
 };
-
-int dev_data_xport(sqlite3 *db, int tab_id, int io_type, uint32_t time_s, uint32_t time_e, void *data, int *cnt);
+#include "xlist.h"
+int dev_data_xport(sqlite3 *db, int tab_id, int io_type, uint32_t time_s, uint32_t time_e);
 
 
 

+ 4 - 69
pro/src/sys.c

@@ -39,70 +39,8 @@
 #define FILE_DNS            "/etc/dnsmasq.conf"
 
 
-typedef struct {
-	char *pbuf;
-    int  dlen;
-    int  blen;
-}node_t;
 static int set_net(NetworkInfo_t *para, int ipv);
 
-
-static int node_free(node_t *nd)
-{
-    if(!nd) {
-        return -1;
-    }
-
-    free(nd->pbuf);
-    nd->pbuf = NULL;
-    nd->dlen = 0;
-    nd->blen = 0;
-
-    return 0;
-}
-
-static int exe_cmd(char *cmd, node_t *nd)
-{
-    int r=0;
-	FILE *fp=NULL;
-    char *pbuf=NULL;
-    int onelen=1000;
-    int dlen=0,blen=onelen;
-    
-    fp = popen(cmd, "r");
-    if (fp == NULL) {
-        return -1;
-    }
-
-    if(nd) {
-        pbuf = malloc(onelen);
-        while(pbuf) {
-            r = fread(pbuf+dlen, sizeof(char), onelen, fp);
-            if(r<=0) {
-                LOGE("exe_cmd fread failed\n");
-                break;
-            }
-            dlen += r;
-            if(dlen+onelen>blen) {
-                char* p = realloc(pbuf, dlen+onelen);
-                if(!p) {
-                    LOGE("exe_cmd relloac %d failed\n", dlen+onelen);
-                    free(pbuf); pclose(fp);
-                    return -1;
-                }
-                pbuf = p;
-                blen = dlen+onelen;
-            }
-        }
-        
-        nd->pbuf = pbuf;
-        nd->dlen = dlen;
-        nd->blen = blen;
-    }
-    pclose(fp);
-    
-	return 0;
-}
 static void nic_restart(char *nic)
 {
     char tmp[100];
@@ -1212,17 +1150,14 @@ static void send_file(void)
     send_cnt++;
     if(send_cnt%SEND_PERIOD==0) {
 
-        r = dev_data_xport(dm->db, TAB_ID_POWER_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
-        r = dev_data_xport(dm->db, TAB_ID_POWER3_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
-        r = dev_data_xport(dm->db, TAB_ID_POWER_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
-        r = dev_data_xport(dm->db, TAB_ID_POWER_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
+        //r = dev_data_xport(dm->db, TAB_ID_POWER_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
+        //r = dev_data_xport(dm->db, TAB_ID_POWER3_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
+        //r = dev_data_xport(dm->db, TAB_ID_POWER_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
+        //r = dev_data_xport(dm->db, TAB_ID_POWER_INFO, IO_EXPORT, 0, 0, NULL, &cnt);
     }
 }
 
 
-
-
-
 static void* polling_thread(void *arg)
 {
     thread_handle_t *h=(thread_handle_t*)arg;