Exemple #1
0
def test_pop(c):
	qs=q.queqe_server()
	for i in range(c):
		d=qs.rpop("dev")
		d0="device %s"%i
		if not d==d0:
			raise Exception("expect %s but %s")
Exemple #2
0
def newTransLog(request): #考勤记录实时监控
    from devview import del_len
    from redis.server import queqe_server
    result={}
    lastid=int(request.REQUEST.get("lastid","-1"));
    if lastid==-1:
        return render_to_response("logcheck.html",{},RequestContext(request, {}))
    q=queqe_server()
    l=q.llen(REALTIME_EVENT)
    if lastid>l and lastid>=MAX_TRANS_IN_QUEQE/2:
        ll=lastid		
        while lastid>l:
           if lastid>=MAX_TRANS_IN_QUEQE/2:
               lastid-=MAX_TRANS_IN_QUEQE/2
           else:
               break
        print "Queqe Len: ", l, ", lastid: %s->%s"%(ll, lastid)
    if l>lastid:
        event_list=q.lrange(REALTIME_EVENT, 0, -lastid)
        lastid+=len(event_list)
        event_list=event_list[:MAX_REALTIME_COUNT]  #id=%s\tPIN=%s\tEName=%s\tTTime=%s\tState=%s\tVerify=%s\tDevice=%s
    else:
        event_list=[]

    result['msg']='OK'
    result['data']=[dict([item.split("=") for item in line.split("\t")]) for line in event_list]
    result['lastId']=lastid
    result['ret']=len(event_list)
    return getJSResponse(smart_str(simplejson.dumps(result)))
Exemple #3
0
def test_pop(c):
    qs = q.queqe_server()
    for i in range(c):
        d = qs.rpop("dev")
        d0 = "device %s" % i
        if not d == d0:
            raise Exception("expect %s but %s")
Exemple #4
0
def clear_progress_cache(devs, session_key = ""):
    q_server=queqe_server()
    q_server.set("DEV_COMM_SYNC_%s"%session_key, "%d,0"%(len(devs)*2))
    if devs:
        q_server.set("DEV_COMM_PROGRESS_%s"%session_key, "%s,0"%devs[0].alias.encode("gb18030"))
    else:
        q_server.set("DEV_COMM_PROGRESS_%s"%session_key, ",0")
    q_server.connection.disconnect()
def clear_progress_cache(devs, session_key=""):
    q_server = queqe_server()
    q_server.set("DEV_COMM_SYNC_%s" % session_key, "%d,0" % (len(devs) * 2))
    if devs:
        q_server.set("DEV_COMM_PROGRESS_%s" % session_key,
                     "%s,0" % devs[0].alias.encode("gb18030"))
    else:
        q_server.set("DEV_COMM_PROGRESS_%s" % session_key, ",0")
    q_server.connection.disconnect()
Exemple #6
0
def run_writedata(index=0):
    connection = connections['default']
    q=queqe_server()
    cursor=connection.cursor()
    print "-----------------------Start Writedata %s"%index
    parseLogDataInQueqe(connection, cursor, q)
    try:
        cursor.close()
        connection.close()
    except: pass
    q.connection.disconnect()
    print "-----------------------End Writedata %s"%index
Exemple #7
0
def check_queqe_server(request=None):
    del_old_cmd()
    q_server = queqe_server()
    old_size = q_server.dbsize()
    sql_return = q_server.keys("sql_execute_*")
    if sql_return: q_server.delete(*sql_return)
    #q_server.flushall()
    q_server.bgsave()
    for i in iclock.objects.all():
        check_cmd_queqe_by_device(i, q_server)
    info = "OK, keys in db: %s -> %s" % (old_size, q_server.dbsize())
    if request:
        return HttpResponse(info)
    return info
Exemple #8
0
def check_queqe_server(request=None):
    del_old_cmd()
    q_server=queqe_server()
    old_size=q_server.dbsize()
    sql_return=q_server.keys("sql_execute_*")
    if sql_return: q_server.delete(*sql_return)
    #q_server.flushall()
    q_server.bgsave()
    for i in iclock.objects.all():
        check_cmd_queqe_by_device(i, q_server)
    info="OK, keys in db: %s -> %s"%(old_size,q_server.dbsize())
    if request:
        return HttpResponse(info)
    return info
Exemple #9
0
def trigger_cmd_device(cmd_obj):
    '''
    设备写入命令到队列
    '''
    old_cmd = 0
    try:
        q_server = queqe_server()
        cln = cmd_obj.SN.new_command_list_name()
        if cmd_obj.CmdImmediately:
            q_server.rpush(cln, pickle.dumps(
                cmd_obj))  #---紧急就添加到头            python 对象序列化/反序列化
        else:
            q_server.lpush(cln, pickle.dumps(cmd_obj))  #---添加到尾
        #命令总数
        cntkey = cmd_obj.SN.command_count_key()
        cnt = q_server.get(cntkey)
        if cnt is None:
            cnt = '0'
        if cnt.find('\x00'):
            cnt = cnt.strip('\x00')
        q_server.set(cntkey, "%d" % (int(cnt) + 1))  #---设备命令计数

        old_cmd = q_server.llen(cln)  #--- name 元素个数
        q_server.connection.disconnect()
    except:
        print_exc()
    if not (cmd_obj.SN.comm_type == COMMU_MODE_PUSH_HTTP):  #门禁设备不须通知
        return
    pass
    if old_cmd:  #若新命令队列不空,说明设备上次的命令还没有执行,不需要再次通知设备
        return
    try:
        ip = cmd_obj.SN.ipaddress  #---UDP 广播发送“R-CMD”通知该设备读取服务器下发的命令
        sNotify = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        if ip: sNotify.sendto("R-CMD", (ip, 4374))
    except:
        print_exc()
Exemple #10
0
 def run(self):
     '''
     运行池中的任务
     '''
     from django.db import IntegrityError, DatabaseError
     conn=self.connection
     cursor=conn.cursor()
     q=queqe_server()
     print "Start Pool Connection %s"%self.index
     while not self.stop:
         ret=self.q.get()
         if ret:
             sql=ret[1]
             if sql=="_EXIT":
                 break
             if sql=="CLOSE":
                 self.cursor_ids.remove(ret[0])
                 continue
             print sql
             self.i+=1
             data=None
             try:
                 sret=cursor.execute(sql, ret[2])
             except IntegrityError, e:
                 data=(0, u"%s"%e)
                 sret=-1
             except DatabaseError, e:
                 traceback.print_exc()
                 conn.close()
                 cursor=conn.cursor()
                 try:
                     sret=cursor.execute(u"%s"%ret[1], ret[2])
                 except Exception, e:
                     traceback.print_exc()
                     data=(1, u"%s"%e)
                     sret=-1
Exemple #11
0
def trigger_cmd_device(cmd_obj):
    '''
    设备写入命令到队列
    '''
    old_cmd=0
    try:
        q_server=queqe_server()
        cln=cmd_obj.SN.new_command_list_name()
        if cmd_obj.CmdImmediately:
            q_server.rpush(cln, pickle.dumps(cmd_obj))  #---紧急就添加到头            python 对象序列化/反序列化
        else:    
            q_server.lpush(cln, pickle.dumps(cmd_obj))  #---添加到尾
        #命令总数
        cntkey=cmd_obj.SN.command_count_key()
        cnt=q_server.get(cntkey)
        if cnt is None:
            cnt='0'
        if cnt.find('\x00'):
            cnt=cnt.strip('\x00')
        q_server.set(cntkey, "%d"%(int(cnt)+1)) #---设备命令计数

        old_cmd=q_server.llen(cln)  #--- name 元素个数
        q_server.connection.disconnect()
    except:
        print_exc()
    if not (cmd_obj.SN.comm_type==COMMU_MODE_PUSH_HTTP): #门禁设备不须通知
        return
    pass
    if old_cmd: #若新命令队列不空,说明设备上次的命令还没有执行,不需要再次通知设备
        return  
    try:
        ip=cmd_obj.SN.ipaddress #---UDP 广播发送“R-CMD”通知该设备读取服务器下发的命令
        sNotify = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        if ip: sNotify.sendto("R-CMD", (ip, 4374))
    except:
        print_exc()
Exemple #12
0
 def __init__(self):
     self.q = queqe_server()
Exemple #13
0
def sync_total_progress(dev, tol, cur, session_key=""):
    q_server=queqe_server()
    q_server.set("DEV_COMM_SYNC_%s"%session_key, "%d,%d"%(tol, cur))
    q_server.set("DEV_COMM_PROGRESS_%s"%session_key, "%s,0"%dev.encode("gb18030"))
    q_server.connection.disconnect()
def sync_total_progress(dev, tol, cur, session_key=""):
    q_server = queqe_server()
    q_server.set("DEV_COMM_SYNC_%s" % session_key, "%d,%d" % (tol, cur))
    q_server.set("DEV_COMM_PROGRESS_%s" % session_key,
                 "%s,0" % dev.encode("gb18030"))
    q_server.connection.disconnect()
Exemple #15
0
def runsql(count=10):
    from mysite.utils import test_and_open_tcp_port
    q=queqe_server()    #---redis 键值服务器队列
    
    test_and_open_tcp_port(settings.SQL_POOL_PORT) #打开TCP端口,让别的程序知道自己已经启动

    if settings.DATABASE_ENGINE=="sqlite3": #避免sqlite3的文件互锁
        count=1
    wt=[]
    for i in range(count):
        t=PoolConn(i)
        wt.append(t)
        t.start()
        time.sleep(0.2)
        
    report_time=time.time()+60 #1分钟, 报告一次查询数量
    end_time=time.time()+60*60*2 #2*60分钟,退出进程,系统会重新启动该进程————解决python占用内存越来越大的问题    
    while True: #监控线程,如果其结束,重新创建
        try:
            ret=q.rpop("sql_execute")
            if ret is None:                     #队列中没有sql语句
                now_time=time.time()
                if now_time>report_time:
                    print "total %s queries" % sum([wt[i].i for i in range(count)])
                    report_time=now_time+60 #1分钟
                    if now_time>end_time: #退出进程
                        print "Exit process"
                        break
                time.sleep(0.02)
                continue
        except redis.exceptions.ConnectionError: #读队列错,可能是队列服务器没有开
            #start_q_server()
            continue
        except:
            time.sleep(0.2)
            continue

        try:
            ret=pickle.loads(ret)
            cid, sql, param=ret
        except Exception, e:
            traceback.print_exc()
            data=(3, u"%s"%e)
            sret=-1
            continue

        #发送给处理过相同cid的线程处理
        pt=None
        for i in range(count):
            t=wt[i]
            if not t.isAlive(): 
                wt[i]=None
                del t
                t=PoolConn(i)
                wt[i]=t
                t.start()
            if t.append_sql_by_id(ret): 
                pt=t
                break;
        #新的cid的话随机发送给某个线程
        if pt is None:
            i=int(cid)/8%count
            pt=wt[i]
            if not pt.isAlive():
                wt[i]=None
                del pt
                pt=PoolConn(i)
                wt[i]=pt
                pt.start()
            pt.append_sql(ret)
def end_sync_userinfo(session_key=""):
    q_server = queqe_server()
    q_server.delete("DEV_COMM_SYNC_%s" % session_key)
    q_server.delete("DEV_COMM_PROGRESS_%s" % session_key)
    q_server.connection.disconnect()
Exemple #17
0
def test_push(c):
    qs = q.queqe_server()
    for i in range(c):
        qs.lpush("dev", "device %s" % i)
Exemple #18
0
 def __init__(self):
     self.q=queqe_server()
Exemple #19
0
def end_sync_userinfo(session_key=""):
    q_server=queqe_server()
    q_server.delete("DEV_COMM_SYNC_%s"%session_key)
    q_server.delete("DEV_COMM_PROGRESS_%s"%session_key)
    q_server.connection.disconnect()
Exemple #20
0
def test_push(c):
	qs=q.queqe_server()
	for i in range(c):
		qs.lpush("dev", "device %s"%i)