forked from andaok/python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreceive_cam_ht_packet.py
More file actions
126 lines (106 loc) · 3.31 KB
/
receive_cam_ht_packet.py
File metadata and controls
126 lines (106 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env python
#-*- encoding:utf-8 -*-
# -----------------------------------------------
# Purpose:
# Receive camera heatbeat packet,update camera status in redis.
# @author:wye
# @date:20151202
# @achieve basic functions
# -----------------------------------------------
import os
import sys
import time
import redis
import socket
import logging
import binascii
import logging.handlers
from cStringIO import StringIO
# ---------------------- /
# LOG FUNCTION
# ---------------------- /
def GetLogger(logflag,loglevel="debug"):
logger = logging.Logger(logflag)
logfile = "/var/log/%s.log"%logflag
hdlr = logging.handlers.RotatingFileHandler(logfile, maxBytes = 5*1024*1024, backupCount = 5)
formatter = logging.Formatter("%(asctime)s -- [ %(name)s ] -- %(levelname)s -- %(message)s")
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
if loglevel == "debug":
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(logging.INFO)
return logger
# --------------------- /
# MAIN FUNCTION
# --------------------- /
def main(logger):
host = "61.183.254.135"
port = 5007
redataIP = "10.2.10.19"
redataPort = 6379
redataDB = 0
#host = "192.168.0.111"
#port = 5007
#redataIP = "192.168.0.111"
#redataPort = 6379
#redataDB = 0
redispool = redis.ConnectionPool(host=redataIP,port=redataPort,db=redataDB)
redata = redis.Redis(connection_pool=redispool)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind((host,port))
while True:
data,addr=s.recvfrom(192)
#logger.debug("%s"%binascii.b2a_hex(data))
if not data:
logger.error("Don't Contain HeartBeat Data ,Continue......")
continue
OriDataBuf = StringIO(data)
OriDataBuf.read(128)
Cid = OriDataBuf.read(8)
IPAddr = addr[0]
TimeStamp = int(time.time())
#logger.debug("%s-%s"%(Cid,IPAddr))
# -------------------
# OriDataBuf.read(24)
# Yid = OriDataBuf.read(7)
# -------------------
if len(Cid) == 8:
try:
DataMap = {"time":TimeStamp,"WanIPFromCam":IPAddr}
redata.hmset("%s_status"%Cid,DataMap)
except Exception,e:
logger.error("Write Data To Redis Failure,Error Is %s,Main Program Not Quit..."%e)
else:
logger.error("Cid Format Is Invaild,Cid Is %s"%Cid)
s.close()
if __name__ == "__main__":
logger = GetLogger("CamHBChecK")
try:
pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)
except OSError, e:
print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1)
# decouple from parent environment
os.chdir("/")
os.setsid()
os.umask(0)
# do second fork
try:
pid = os.fork()
if pid > 0:
# exit from second parent, print eventual PID before
#print "Daemon PID %d" % pid
sys.exit(0)
except OSError, e:
print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
sys.exit(1)
# start the daemon main loop
try:
main(logger)
except Exception,e:
logger.error("Main Program Quit,Error is %s"%e)
sys.exit()