hb_service

来源:互联网 发布:MySQL完美封装函数 编辑:程序博客网 时间:2024/04/27 17:25

config.ini

[network]SERVER_PORT = 4040[db]DB_HOST = 10.20.1.129USER = saPWD = skcl@2013DATABASE = CDMTCP[gpsdata]DATA_FROM_DB = TrueIS_USE_LANES = True ROAD_GPS_FILE = roadgps.txtROAD_ARC_FILE = arcinfo.txt[parameter]IS_USE_VALID_PERIOD = FalseTIME_UPPER_LIMIT = 18TIME_LOWER_LIMIT = 6COFFEE = 0.0001DO_UPDATE = True



dbManager.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.comtry:    import pyodbcexcept:    print('no module pyodbc, should init first!')import threadingimport time# self moduleimport myLogimport globalConfigDB_HOST = '10.20.1.200' # '210.73.152.201'USER = 'sa'PWD = 'sa'DATABASE = 'CDMTCP'DB_CONNECT_LOCK = threading.Lock()MAX_DB_CONNECT = 1000DB_CONNECT_NOT_USE_LIST = list()DB_CONNECT_USED_LIST = list()def init_db_connect_list(conn_num = MAX_DB_CONNECT):    for i in range(conn_num):        try:            db_conn = pyodbc.connect('DRIVER={SQL Server}', host = DB_HOST, user = USER, password = PWD, database = DATABASE)            # lock            DB_CONNECT_LOCK.acquire()            DB_CONNECT_NOT_USE_LIST.append(db_conn)            # release lock            DB_CONNECT_LOCK.release()        except: # not print db execption yet            myLog.mylogger.error('init db got an error!')            print('init db got an error!')            break    print('init db conn done! connections :', len(DB_CONNECT_NOT_USE_LIST))    myLog.mylogger.debug('init db conn done!')    returndef get_one_db_connect():    db_conn = None    try:        # lock        DB_CONNECT_LOCK.acquire()        db_conn = DB_CONNECT_NOT_USE_LIST.pop()        DB_CONNECT_USED_LIST.append(db_conn)        # release lock        DB_CONNECT_LOCK.release()            except ValueError:        print('not enough db_conn!')        myLog.mylogger.error('not enough db_conn!')    except Exception as e:        print(e)        myLog.mylogger.error(e)    return db_conndef close_one_db_connect(conn):    if conn:        # if the conn is usable        try:            conn.commit()        except : # not print db except  yet            print('connect can not used')            # lock            DB_CONNECT_LOCK.acquire()            DB_CONNECT_USED_LIST.remove(conn)            # release lock            DB_CONNECT_LOCK.release()            return                try:            # lock            DB_CONNECT_LOCK.acquire()            DB_CONNECT_USED_LIST.remove(conn)            DB_CONNECT_NOT_USE_LIST.append(conn)            # release lock            DB_CONNECT_LOCK.release()        except Exception as e:            print(e)            myLog.mylogger.error(e)    returndef get_db_connect():    db_conn = None    try:        db_conn = pyodbc.connect('DRIVER={SQL Server}', host = DB_HOST, user = USER, password = PWD, database = DATABASE)    except: # not print db execption yet        myLog.mylogger.debug('init db got an error!')        print('init db got an error!')    return db_conndef close_db_connect(db_conn):    if db_conn:        db_conn.close()DB_REPAIR_TIME = 3600 # secdef db_connect_server():    # check the useable db connect number in the db connect list every one hour    while True:        time.sleep(DB_REPAIR_TIME)        # lock        DB_CONNECT_LOCK.acquire()        total_conn = len(DB_CONNECT_NOT_USE_LIST) + len(DB_CONNECT_USED_LIST)        # release lock        DB_CONNECT_LOCK.release()                print('total db connect :', total_conn)        if total_conn < (MAX_DB_CONNECT >> 1):            init_db_connect_list(MAX_DB_CONNECT - total_conn)        returndef init_db():    # init db args    global SERVER_PORT, DB_HOST, USER, PWD    SERVER_PORT = globalConfig.SERVER_PORT    DB_HOST     = globalConfig.DB_HOST    USER        = globalConfig.USER    PWD         = globalConfig.PWD            # do two things    # one to init db connect list(db connect pool)    t1 = threading.Thread(target=init_db_connect_list)    t1.start()        # two to start db connect repair service    t2 = threading.Thread(target=db_connect_server)    t2.start()        return

dbUpdater.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.com# 专门处理 update 数据库表的工作线程/进程import queueimport dbManagerimport time# 用于缓存其他处理线程sql语句的队列q = queue.Queue()def update_db_server():    if_sql = "if not exists( select * from tbl_heartbeatinfo_new where camera_id = ?)"    insert_sql = "insert into tbl_heartbeatinfo_new (id, camera_id, gpx, gpy, gpstime, roadname, mph, createtime) values ( newid(),?,?,?,?,?,?,?)"    else_sql = "else update tbl_heartbeatinfo_new set gpx = ?, gpy = ?, gpstime = ?, roadname = ?, mph = ?, createtime = ? where (camera_id = ?)"    sql = if_sql+insert_sql+else_sql    conn = dbManager.get_db_connect()    cur = conn.cursor()    arg_list = list()    print('update_db_server running')    time_wait = 1    get_num =100    while True:        #print('in while update db')        for i in range(get_num):            try:                gpx, gpy, gpstime, roadname, mph, createtime, camera_id = q.get(False)                q.task_done()                                sql_param = (camera_id, camera_id, gpx, gpy, gpstime, roadname, mph, createtime, gpx, gpy, gpstime, roadname, mph, createtime, camera_id)                arg_list.append(sql_param)                            except queue.Empty:                print('empty')#                get_num = max(5, len(arg_list))                break                if get_num == len(arg_list):            get_num += 10                #print(gpx, gpy, gpstime, roadname, mph, createtime, camera_id)        #print(arg_list)        if len(arg_list) != 0:            #print(arg_list)            try:                start = time.time()                cur.executemany(sql, arg_list)                conn.commit()                end = time.time()                print('execute success, time :', end - start)            except:                print('update db excute error!\n')            arg_list.clear()        print('time_wait', time_wait, 'get_num', get_num)        time.sleep(time_wait)        dbManager.close_db_connect(conn)    return

globalConfig.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.comimport configparserimport dbManagernetwork_ops = ['SERVER_PORT']db_ops = ['DB_HOST', 'USER', 'PWD', 'DATABASE']gpsdata_ops = ['ROAD_GPS_FILE']parameter_ops = ['TIME_UPPER_LIMIT', 'TIME_LOWER_LIMIT', 'COFFEE']sections = {'network':network_ops, 'db':db_ops, 'gpsdata':gpsdata_ops, 'parameter':parameter_ops}# Global Values (default value)# networkSERVER_PORT = 44444# db#DB_HOST = '10.20.1.200' # '210.73.152.201'#USER = 'sa'#PWD = 'sa'#DATABASE = 'CDMTCP'# gpsdataROAD_GPS_FILE = 'roadgps.txt'ROAD_ARC_FILE = 'arcinfo.txt'#import processDataimport readRoadGPSimport processDBdef readConfig():    global SERVER_PORT, ROAD_GPS_FILE, ROAD_ARC_FILE        cf = configparser.ConfigParser()    cf.read('config.ini')    cf.sections()        SERVER_PORT      = cf.getint('network', 'SERVER_PORT')    dbManager.DB_HOST          = cf.get('db', 'DB_HOST')    dbManager.USER             = cf.get('db', 'USER')    dbManager.PWD              = cf.get('db', 'PWD')    dbManager.DATABASE         = cf.get('db', 'DATABASE')    ROAD_GPS_FILE    = cf.get('gpsdata', 'ROAD_GPS_FILE')    ROAD_ARC_FILE    = cf.get('gpsdata', 'ROAD_ARC_FILE')        processData.TIME_UPPER_LIMIT    = cf.getint('parameter', 'TIME_UPPER_LIMIT')    processData.TIME_LOWER_LIMIT    = cf.getint('parameter', 'TIME_LOWER_LIMIT')    processData.COFFEE              = cf.getfloat('parameter', 'COFFEE')    processData.IS_USE_LANES        = cf.getboolean('gpsdata', 'IS_USE_LANES')    processData.IS_USE_VALID_PERIOD = cf.getboolean('parameter', 'IS_USE_VALID_PERIOD')    processDB.DO_UPDATE           = cf.getboolean('parameter', 'DO_UPDATE')    readRoadGPS.DATA_FROM_DB        = cf.getboolean('gpsdata', 'DATA_FROM_DB')        print('SERVER_PORT:', SERVER_PORT)    print('DB:', dbManager.DB_HOST, dbManager.USER, dbManager.PWD, dbManager.DATABASE)    print('ROAD_GPS_FILE:', ROAD_GPS_FILE)    print('ROAD_ARC_FILE:', ROAD_ARC_FILE)    print('Read Config Done')if __name__=='__main__':    readConfig()

heartBeatServer.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.comimport socketimport threadingimport tracebackimport sys#import multiprocessing# self moduleimport processDataimport dbManagerimport myLogimport globalConfigimport processDB# Global VariablesINADDR_ANY = '0.0.0.0' # OR INADDR_ANY = ''HOST = INADDR_ANY # socket.gethostbyname(socket.gethostname()) #socket.INADDR_ANY#SERVER_PORT = 44444client_list = list()list_lock = threading.Lock()#client_list = multiprocessing.Manager().list()#list_lock = multiprocessing.Lock()def insert_list(id):    list_lock.acquire()    client_list.append(id)    list_lock.release()    returndef remove_list(id):    list_lock.acquire()    client_list.remove(id)    list_lock.release()    returndef total_in_list():    list_lock.acquire()    total = len(client_list)    list_lock.release()    return totaldef do_init():    dbconn = None    cur = None        dbconn = dbManager.get_db_connect()    if dbconn:        cur = dbconn.cursor()        insert_list(threading.get_ident())        return dbconn, curdef do_finish(dbconn, cur, sock):        if dbconn:        cur.close()        dbManager.close_db_connect(dbconn)        remove_list(threading.get_ident())        # close socket    sock.close()        returndef handleConnect(sock, addr):        dbconn, cur = do_init()    print('total connect:', total_in_list())    myLog.mylogger.error('total connect:%s', total_in_list())        while True:        try:            b_data = sock.recv(1024)            if b_data == b'':                print('reomte closed!')                sock.close()                break                        #print(len(b_data), b_data)            myLog.mylogger.debug('recv %s %s %s',addr[0], addr[1], str(b_data))                        # process data            r_data, infos  = processData.process_data(b_data)                        sock.send(r_data)                        # proecss db            processDB.process_db(infos, dbconn, cur)                    except:            # should not get error while print exception            print(traceback.format_exc())            myLog.mylogger.error(traceback.format_exc())            break        do_finish(dbconn, cur, sock)    print('left connect:', total_in_list())    myLog.mylogger.error('left connect:%s', total_in_list())    returndef Server():    PORT = globalConfig.SERVER_PORT    try:        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        print(HOST, PORT)        sock.bind((HOST, PORT))        sock.listen(5)        print('main server ready to accept...')        while True:            conn, addr = sock.accept()            print('connected by ', addr)            try:                t = threading.Thread(target=handleConnect, args=(conn, addr))                t.start()                #p = multiprocessing.Process(target=handleConnect, args=(conn, addr))                #p.start()            except RuntimeError as e:                print(e)                myLog.mylogger.error(e)    except:        print(traceback.format_exc())        myLog.mylogger.error(traceback.format_exc())        # if server error exit        sys.exit()if __name__=='__main__':    import os    print(__file__, 'test')    os.system('pause')    

MainEntry.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.comimport threading# import self moduleimport heartBeatServerimport remoteControlServer#import dbManagerimport readRoadGPSimport globalConfigimport dbUpdaterif __name__=='__main__':        # init global values from config file    globalConfig.readConfig()        # init database    #dbManager.init_db()        # init road data    #readRoadGPS.initRoadGPS(globalConfig.ROAD_GPS_FILE)    readRoadGPS.initRoadInfo()        t = threading.Thread(target=heartBeatServer.Server)    t.start()        t = threading.Thread(target=remoteControlServer.Server)    t.start()        t = threading.Thread(target=dbUpdater.update_db_server)    t.start()    

processData.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.comimport tracebackimport datetime# self moduleimport myLogimport readRoadGPSimport dbUpdaterTIME_UPPER_LIMIT = 18TIME_LOWER_LIMIT = 6HEART_BEAT_PACKAGE_ITEM = ['HEAD', 'MAC', 'GPS STATUS', 'GPS DATE', 'GPS TIME',                            'X', 'Y', 'GPS SPEED', 'GPS DIRCT', 'WORK MODE',                            'SERVER IP', 'DEVICE IP', 'HB INTERVAL', 'UPLOAD NUM','TRACK NUM',                            'CAR DEFAULT RANGE', 'COMPRESSION FACTOR', 'END'                            ]HEART_BEAT_PACKAGE_ITEM_LEN_old =[2 , 12, 1, 8, 6,                          10, 11, 5, 2, 1,                          15, 15, 2, 1, 1,                          4, 2, 2                         ] HEART_BEAT_PACKAGE_ITEM_LEN = {'HEAD':2, 'MAC':12, 'GPS STATUS':1, 'GPS DATE':8, 'GPS TIME':6,                            'X':10, 'Y':11, 'GPS SPEED':5, 'GPS DIRCT':2, 'WORK MODE':1,                            'SERVER IP':15, 'DEVICE IP':15, 'HB INTERVAL':2, 'UPLOAD NUM':1,'TRACK NUM':1,                            'CAR DEFAULT RANGE':4, 'COMPRESSION FACTOR':2, 'END':2 }                         RETURN_PACKAGE_ITEM = ['HEAD', 'CMD', 'WORK MODE', 'SERVER IP', 'DEVICE IP',                        'HB INTERVAL', 'UPLOAD NUM', 'TRACK NUM', 'CAR DEFAULT RANGE', 'COMPRESSION FACTOR',                        'IS IN LANES', 'IS IN VALID PERIOD', 'END'                       ]RETURN_PACKAGE_ITEM_LEN = [2, 1, 1, 15, 15,                            2, 1, 1, 4, 2,                            1, 1, 2                           ]   DEFALUT_PACKAGE_CONTENT = {'HEAD':b'\xaa\x55', 'CMD':b'0', 'WORK MODE':b'0', 'SERVER IP':b'000.000.000.000', 'DEVICE IP':b'000.000.000.000',                           'HB INTERVAL':b'05', 'UPLOAD NUM':b'4', 'TRACK NUM':b'4', 'CAR DEFAULT RANGE':b'0815', 'COMPRESSION FACTOR':b'70',                            'IS IN LANES':b'0', 'IS IN VALID PERIOD':b'0', 'END':b'\xee\x55'                           }COFFEE = 0.0001IS_USE_LANES = FalseIS_USE_VALID_PERIOD = FalseDO_UPDATE = FalseROAD_TIME_TYPE_Daytime = '8a9481d03f79b7d6013f7a0948310002'ROAD_TIME_TYPE_Tidal= '8a9481d03f79b7d6013f7a0948310003'###################################################################################3def get_next_item(b_data, i, t):    return b_data[t:t+i]def changeToFormate(data):    '12-34-56-78-90-ab'    data = data[0:2] + '-' + data[2:4] + '-' + data[4:6] + '-' + data[6:8] + '-' + data[8:10] + '-' + data[10:12]    return datadef get_road_id_from_location(location):    road_id = ''    try:        # the location format is ddmm.mmmm dddmm.mmmm        x = float(location[0])        y = float(location[1])    except:        myLog.mylogger.error('camera location value error! x:%s y:%s'%(location[0][:-1], location[1][:-1]))        x, y = 0, 0        # the unit of COFFEE is degree, the minute of mCOFFEE = 60*COFFEE    mCOFFEE = 60*COFFEE        for p in readRoadGPS.ROAD_GPS_POINT_LIST:        try:            rX = float(p[0])            rY = float(p[1])        except:            myLog.mylogger.error('road gps value error! rX:%s rY:%s'%(p[0], p[1]))            rX , rY = 0, 0        try:            rID = p[2]        except:            myLog.mylogger.error('road gps have no name')            rID = ''        if rX - mCOFFEE < x and x < rX + mCOFFEE and rY - mCOFFEE < y and y < rY + mCOFFEE:            road_id = rID            return road_id        return road_iddef get_road_arcinfo_by_id(road_id):    if road_id == '':        return None        arc_info = None    for i in readRoadGPS.ROAD_ARC_INFO_LIST:        if road_id == i[0]:            arc_info = i    return arc_infodef decode_data(b_data):    #s = ''    infos = {}    t = 2 # skip head and end        for i in HEART_BEAT_PACKAGE_ITEM[1:-1]:        item_len = HEART_BEAT_PACKAGE_ITEM_LEN[i]        b_item = get_next_item(b_data, item_len, t)        try:            if i == 'X' or i == 'Y':                b_item = b_item[:-1]                        # convert to str            item = str(b_item, 'gbk')                        if i == 'MAC':                item = changeToFormate(item)                                    #s += item + '\t'            infos[i] = item        except:            #print(traceback.format_exc())            myLog.mylogger.error(traceback.format_exc())        t+=item_len        # get the road ID info if is in lanes    try:        location = (infos['X'], infos['Y'])    except:        location = (0.0, 0.0)    road_id = get_road_id_from_location(location)    infos['ROAD_ID'] = road_id            # get road arcinfo by road ID    arcinfo = get_road_arcinfo_by_id(road_id)    if arcinfo:        infos['ROAD STATUS'] = arcinfo[1]        infos['ROAD'] = arcinfo[2]        infos['ROAD TIME_TYPE'] = arcinfo[3]        infos['ROAD TIME'] = arcinfo[4]        infos['ROAD sTIME'] = arcinfo[5]        infos['ROAD eTIME'] = arcinfo[6]        #myLog.mylogger.debug(s)    myLog.mylogger.debug(infos)        return infos###################################################################################3def is_in_lanes(location):    if IS_USE_LANES == False:        # if not use lanes, always return true        return True        try:        # the location from camera should be transform from ddmm.mmmm to dd.dddddddd..        #xd = float(location[0][:2])        #xm = float(location[0][2:])        #yd = float(location[1][:3])        #ym = float(location[1][3:])                #x = xd + xm/60        #y = yd + ym/60                # the location format is ddmm.mmmm dddmm.mmmm        x = float(location[0])        y = float(location[1])    except:        myLog.mylogger.error('camera location value error! x:%s y:%s'%(location[0][:-1], location[1][:-1]))        x, y = 0, 0        # the unit of COFFEE is degree, the minute of mCOFFEE = 60*COFFEE    mCOFFEE = 60*COFFEE        for p in readRoadGPS.ROAD_GPS_POINT_LIST:        try:            rX = float(p[0])            rY = float(p[1])        except:            myLog.mylogger.error('road gps value error! rX:%s rY:%s'%(p[0], p[1]))            rX , rY = 0, 0        if rX - mCOFFEE < x and x < rX + mCOFFEE and rY - mCOFFEE < y and y < rY + mCOFFEE:            print('camera in lanes')            myLog.mylogger.debug('camera in lanes')            return True        print('camera not in lanes')    myLog.mylogger.debug('camera not in lanes')    return Falsedef is_valid_period():    if IS_USE_VALID_PERIOD == False:        # if not use valid preiod, always reutrn true        return True        # valid period is 6:00 to 18:00    tn = datetime.datetime.now().time()    tu = datetime.time(TIME_UPPER_LIMIT)    tl = datetime.time(TIME_LOWER_LIMIT)        if tn <= tu and tn >= tl:        print('camera in valid_period')        myLog.mylogger.debug('camera in valid_period')        return True         print('camera not in valid_period')    myLog.mylogger.debug('camera not in valid_period')    return Falsedef is_in_lanes_new(infos):    if IS_USE_LANES == False:        # if not use lanes, always return true        return True        road_id = infos['ROAD_ID']    if road_id != '':        road_status = infos['ROAD STATUS']        if road_status == 0:            return True        return Falsedef get_time_last(time_str):    time_arr = time_str.split('至')    low = time_arr[0].split(':')    up = time_arr[1].split(':')    try:        l_time = datetime.time(int(low[0]),int(low[1]))        u_time = datetime.time(int(up[0]),int(up[1]))        return l_time,u_time    except:        l_time = datetime.time(0)        u_time = datetime.time(0)        return l_time,u_timedef is_valid_period_new(infos):    if IS_USE_VALID_PERIOD == False:        # if not use valid preiod, always reutrn true        return True        road_id = infos['ROAD_ID']    if road_id != '':        road_status = infos['ROAD STATUS']        if road_status == 0:            road_time_type = infos['ROAD TIME_TYPE']            if road_time_type == ROAD_TIME_TYPE_Tidal:                tn = datetime.datetime.now().time()                print(road_time_type)                limit_stime = infos['ROAD sTIME']                limit_etime = infos['ROAD eTIME']                lsl,lsu = get_time_last(limit_stime)                lel,leu = get_time_last(limit_etime)                if ( lsl < tn and tn < lsu) or (lel < tn and leu):                    return True            if road_time_type == ROAD_TIME_TYPE_Daytime:                tn = datetime.datetime.now().time()                print(road_time_type)                road_time = infos['ROAD TIME']                rtl, rtu = get_time_last(road_time)                if rtl < tn and tn < rtu:                    return True                    return Falsedef encode_return_data(infos, changed_args=dict()):    r_data = bytearray()    modify_items = {}        # judge wether in the lanes    #location = (infos['X'], infos['Y'])    #if is_in_lanes(location):    #    modify_items['IS IN LANES']=b'1'        if is_in_lanes_new(infos):        modify_items['IS IN LANES']=b'1'        # judeg wether in valid period    #if is_valid_period():    #    modify_items['IS IN VALID PERIOD']=b'1'    if is_valid_period_new(infos):        modify_items['IS IN VALID PERIOD']=b'1'        # CMD    if len(changed_args) != 0:         modify_items['CMD'] = b'1'        # Server IP    if 'SERVER IP' in changed_args:        modify_items['SERVER IP'] = changed_args['SERVER IP'] # should have 15 chars    else:        modify_items['SERVER IP'] = bytes(infos.get('SERVER IP','000.000.000.000'), 'gbk')        # HB INTERVAL    if 'HB INTERVAL' in changed_args:        modify_items['HB INTERVAL'] = changed_args['HB INTERVAL']    else:        modify_items['HB INTERVAL'] = bytes(infos['HB INTERVAL'], 'gbk')        # UPLOAD NUM    if 'UPLOAD NUM' in changed_args:        modify_items['UPLOAD NUM'] = changed_args['UPLOAD NUM']    else:        modify_items['UPLOAD NUM'] = bytes(infos['UPLOAD NUM'], 'gbk')        # TRACK NUM    if 'TRACK NUM' in changed_args:        modify_items['TRACK NUM'] = changed_args['TRACK NUM']    else:        modify_items['TRACK NUM'] = bytes(infos['TRACK NUM'], 'gbk')        # CAR DEFAULT RANGE    if 'CAR DEFAULT RANGE' in changed_args:        modify_items['CAR DEFAULT RANGE'] = changed_args['CAR DEFAULT RANGE']    else:        modify_items['CAR DEFAULT RANGE'] = bytes(infos['CAR DEFAULT RANGE'], 'gbk')        # COMPRESSION FACTOR    if 'COMPRESSION FACTOR' in changed_args:        modify_items['COMPRESSION FACTOR'] = changed_args['COMPRESSION FACTOR']    else:        modify_items['COMPRESSION FACTOR'] = bytes(infos['COMPRESSION FACTOR'], 'gbk')        for i in RETURN_PACKAGE_ITEM:        if i not in modify_items:            r_data += DEFALUT_PACKAGE_CONTENT[i]        else:            r_data += modify_items[i]        #print(r_data)    myLog.mylogger.debug(r_data)    return r_data###################################################################################3def store_to_db(infos, conn, cur):        if conn and cur:        try:            gpstime = datetime.datetime.strptime(infos['GPS DATE']+infos['GPS TIME'], '%Y%m%d%H%M%S')        except:            gpstime = datetime.datetime.now()                try:            mph = float(infos.get('GPS SPEED', '0'))        except:            mph = 0                try:            hb_interval = float(infos.get('HB INTERVAL', '5'))        except:            hb_interval = 5                try:            upload_num = int(infos.get('UPLOAD NUM', '3'))        except:            upload_num = 3                try:            track_num  = int(infos.get('TRACK NUM', '3'))        except:            track_num = 3                try:            compression_factor  = float(infos.get('COMPRESSION FACTOR', '5'))        except:            compression_factor = 3                camera_id    = infos.get('MAC', 'ID error')        x            = infos.get('X', 'X error')        y            = infos.get('Y', 'Y error')        road         = infos.get('ROAD', '')        direction    = infos.get('GPS DIRCT', 'ss')        car_distance = infos.get('CAR DEFAULT RANGE', '')        createtime   = datetime.datetime.now()                print(gpstime, camera_id, x, y, road, mph)        myLog.mylogger.debug('%s %s %s %s %s %s', gpstime, camera_id, x, y, road, mph)                try:            cur.execute("INSERT INTO tbl_heartbeatinfo( ID, camera_id, gpx, gpy, gpstime, roadname, mph, createtime, direction, hb_interval, upload_num, track_num, car_distance, compression_factor) VALUES (newid(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",                 (camera_id, x, y, gpstime, road, mph, createtime, direction, hb_interval, upload_num, track_num, car_distance, compression_factor))                    except:            myLog.mylogger.error('db excute error! %s\n', infos)            print('db excute error!\n')            return                    try:            conn.commit()            myLog.mylogger.debug('store to db success!')        except:            myLog.mylogger.error('commit error! %s\n', infos)            print('commit erorr!')                returndef update_to_heartbeatinfo_new(infos, conn, cur):    if conn and cur:        try:            gpstime = datetime.datetime.strptime(infos['GPS DATE']+infos['GPS TIME'], '%Y%m%d%H%M%S')        except:            gpstime = datetime.datetime.now()                try:            mph = float(infos.get('GPS SPEED', '0'))        except:            mph = 0        '''        try:            hb_interval = float(infos.get('HB INTERVAL', '0'))        except:            hb_interval = 5                try:            upload_num = int(infos.get('UPLOAD NUM', '0'))        except:            upload_num = 3                try:            track_num  = int(infos.get('TRACK NUM', '0'))        except:            track_num = 3                try:            compression_factor  = float(infos.get('COMPRESSION FACTOR', '0'))        except:            compression_factor = 3        '''                camera_id    = infos.get('MAC', '')        gpx          = infos.get('X', '')        gpy          = infos.get('Y', '')        roadname     = infos.get('ROAD', '')        #direction    = infos.get('GPS DIRCT', '')        #car_distance = infos.get('CAR DEFAULT RANGE', '')        createtime   = datetime.datetime.now()                #print(gpstime, camera_id, gpx, gpy, road, mph)        #myLog.mylogger.debug('%s %s %s %s %s %s', gpstime, camera_id, x, y, road, mph)                try:            sql = "update tbl_heartbeatinfo_new set gpx = ?, gpy = ?, gpstime = ?, roadname = ?, mph = ?, createtime = ? where (camera_id = ?)"            cur.execute(sql, gpx, gpy, gpstime, roadname, mph, createtime, camera_id)                    except:            myLog.mylogger.error('db excute error! %s\n', infos)            print('db excute error!\n')            return        try:            conn.commit()            myLog.mylogger.debug('store to db success!')        except:            myLog.mylogger.error('commit error! %s\n', infos)            print('commit erorr!')    returndef put_to_dbUpdater_quuee(infos):    #sql = "update tbl_heartbeatinfo_new set gpx = ?, gpy = ?, gpstime = ?, roadname = ?, mph = ?, createtime = ? where (camera_id = ?)"        try:        gpstime = datetime.datetime.strptime(infos['GPS DATE']+infos['GPS TIME'], '%Y%m%d%H%M%S')    except:        gpstime = datetime.datetime.now()            try:        mph = float(infos.get('GPS SPEED', '0'))    except:        mph = 0        camera_id    = infos.get('MAC', '')    gpx          = infos.get('X', '')    gpy          = infos.get('Y', '')    roadname     = infos.get('ROAD', '')    createtime   = datetime.datetime.now()        dbUpdater.q.put((gpx, gpy, gpstime, roadname, mph, createtime, camera_id))    return# @ primarydef process_data(b_data):        # decode     infos = decode_data(b_data)            # store to db    #store_to_db(infos, dbconn, cur)        # update data to heartbeatinfo_new    #if DO_UPDATE:        #update_to_heartbeatinfo_new(infos, dbconn, cur)    #    put_to_dbUpdater_quuee(infos)        # encode     r_data = encode_return_data(infos)        return r_data, infos# 

processDB.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.comDO_UPDATE = Falseimport datetimeimport myLogimport dbUpdaterdef store_to_db(infos, conn, cur):        if conn and cur:        try:            gpstime = datetime.datetime.strptime(infos['GPS DATE']+infos['GPS TIME'], '%Y%m%d%H%M%S')        except:            gpstime = datetime.datetime.now()                try:            mph = float(infos.get('GPS SPEED', '0'))        except:            mph = 0                try:            hb_interval = float(infos.get('HB INTERVAL', '5'))        except:            hb_interval = 5                try:            upload_num = int(infos.get('UPLOAD NUM', '3'))        except:            upload_num = 3                try:            track_num  = int(infos.get('TRACK NUM', '3'))        except:            track_num = 3                try:            compression_factor  = float(infos.get('COMPRESSION FACTOR', '5'))        except:            compression_factor = 3                camera_id    = infos.get('MAC', 'ID error')        x            = infos.get('X', 'X error')        y            = infos.get('Y', 'Y error')        road         = infos.get('ROAD', '')        direction    = infos.get('GPS DIRCT', 'ss')        car_distance = infos.get('CAR DEFAULT RANGE', '')        createtime   = datetime.datetime.now()                print(gpstime, camera_id, x, y, road, mph)        myLog.mylogger.debug('%s %s %s %s %s %s', gpstime, camera_id, x, y, road, mph)                try:            cur.execute("INSERT INTO tbl_heartbeatinfo( ID, camera_id, gpx, gpy, gpstime, roadname, mph, createtime, direction, hb_interval, upload_num, track_num, car_distance, compression_factor) VALUES (newid(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",                 (camera_id, x, y, gpstime, road, mph, createtime, direction, hb_interval, upload_num, track_num, car_distance, compression_factor))                    except:            myLog.mylogger.error('db excute error! %s\n', infos)            print('db excute error!\n')            return                    try:            conn.commit()            myLog.mylogger.debug('store to db success!')        except:            myLog.mylogger.error('commit error! %s\n', infos)            print('commit erorr!')                returndef update_to_heartbeatinfo_new(infos, conn, cur):    if conn and cur:        try:            gpstime = datetime.datetime.strptime(infos['GPS DATE']+infos['GPS TIME'], '%Y%m%d%H%M%S')        except:            gpstime = datetime.datetime.now()                try:            mph = float(infos.get('GPS SPEED', '0'))        except:            mph = 0        '''        try:            hb_interval = float(infos.get('HB INTERVAL', '0'))        except:            hb_interval = 5                try:            upload_num = int(infos.get('UPLOAD NUM', '0'))        except:            upload_num = 3                try:            track_num  = int(infos.get('TRACK NUM', '0'))        except:            track_num = 3                try:            compression_factor  = float(infos.get('COMPRESSION FACTOR', '0'))        except:            compression_factor = 3        '''                camera_id    = infos.get('MAC', '')        gpx          = infos.get('X', '')        gpy          = infos.get('Y', '')        roadname     = infos.get('ROAD', '')        #direction    = infos.get('GPS DIRCT', '')        #car_distance = infos.get('CAR DEFAULT RANGE', '')        createtime   = datetime.datetime.now()                #print(gpstime, camera_id, gpx, gpy, road, mph)        #myLog.mylogger.debug('%s %s %s %s %s %s', gpstime, camera_id, x, y, road, mph)                try:            sql = "update tbl_heartbeatinfo_new set gpx = ?, gpy = ?, gpstime = ?, roadname = ?, mph = ?, createtime = ? where (camera_id = ?)"            cur.execute(sql, gpx, gpy, gpstime, roadname, mph, createtime, camera_id)                    except:            myLog.mylogger.error('db excute error! %s\n', infos)            print('db excute error!\n')            return        try:            conn.commit()            myLog.mylogger.debug('store to db success!')        except:            myLog.mylogger.error('commit error! %s\n', infos)            print('commit erorr!')    returndef put_to_dbUpdater_quuee(infos):    #sql = "update tbl_heartbeatinfo_new set gpx = ?, gpy = ?, gpstime = ?, roadname = ?, mph = ?, createtime = ? where (camera_id = ?)"        try:        gpstime = datetime.datetime.strptime(infos['GPS DATE']+infos['GPS TIME'], '%Y%m%d%H%M%S')    except:        gpstime = datetime.datetime.now()            try:        mph = float(infos.get('GPS SPEED', '0'))    except:        mph = 0        camera_id    = infos.get('MAC', '')    gpx          = infos.get('X', '')    gpy          = infos.get('Y', '')    roadname     = infos.get('ROAD', '')    createtime   = datetime.datetime.now()        dbUpdater.q.put((gpx, gpy, gpstime, roadname, mph, createtime, camera_id))    return# @ primarydef process_db(infos, dbconn, cur):        # store to db    store_to_db(infos, dbconn, cur)        # update data to heartbeatinfo_new    if DO_UPDATE:        #update_to_heartbeatinfo_new(infos, dbconn, cur)        put_to_dbUpdater_quuee(infos)        return

readRoadGPS.py

# -*- coding:gbk -*-# auther : pdm# email : ppppdm@gmail.comimport dbManagerimport globalConfigDATA_FROM_DB = FalseROAD_GPS_POINT_LIST = list()ROAD_ARC_INFO_LIST = list()def set_list(data_str):    l = list()    coor_arr = data_str.split('\n')    for i in coor_arr:        point = i.split(',')        l.append(point)    return ldef initRoadGPS(filename):    global ROAD_GPS_POINT_LIST    try:        f = open(filename, 'rt')                data = f.read()        # set ROAD_GPS_POINT_LIST with data        ROAD_GPS_POINT_LIST = set_list(data)                f.close()        print('Read road gps from file done')    except Exception as e:        print(e)def initRoadArc(filename):    global ROAD_ARC_INFO_LIST    try:        f = open(filename, 'rt')                data = f.read()        # set ROAD_GPS_POINT_LIST with data        ROAD_ARC_INFO_LIST = set_list(data)                f.close()        print('Read road arc info from file done')    except Exception as e:        print(e)def read_data_from_file():    initRoadGPS(globalConfig.ROAD_GPS_FILE)    initRoadArc(globalConfig.ROAD_ARC_FILE)def initRoadGPS_db(cur):    global ROAD_GPS_POINT_LIST    # read arcpoints    try:        cur.execute("select LATITUDE, LONGITUDE, ARC_ID from t_arcpoints")        ROAD_GPS_POINT_LIST = cur.fetchall()        return True    except:        return Falsedef initRoadArc_db(cur):    global ROAD_ARC_INFO_LIST    # read arcinfo    try:        cur.execute("select ID,status,Road_Name,backup1,backup2,Limit_stime,Limit_etime from t_arcinfo")        ROAD_ARC_INFO_LIST = cur.fetchall()        return True    except:        return Falsedef read_data_from_db():    ret = False    conn = dbManager.get_db_connect()    if conn:        cur = conn.cursor()        # read arcpoints & # read arcinfo        if initRoadGPS_db(cur) and initRoadArc_db(cur):            print('Read gps info from db done!')            ret = True        else:            ret = False        dbManager.close_db_connect(conn)    return retdef initRoadInfo():    print('DATA_FROM_DB', DATA_FROM_DB)    if DATA_FROM_DB:        if read_data_from_db() != True:            read_data_from_file()    else:        read_data_from_file()if __name__=='__main__':        #initRoadGPS('roadgps_hefei.txt')    print(ROAD_GPS_POINT_LIST)


原创粉丝点击