-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmonitor.py
executable file
·152 lines (141 loc) · 6.54 KB
/
monitor.py
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import sys
import os.path
#from string import strip,join
#import re
import logging
import logging.handlers
import datetime
import pyinotify
import time
import lynx2cfmmc
import rebatexlwt
from lynx2cfmmc import DealCMFChinaData
from rebatexlwt import TimRebate
from daemon import runner
from argparse import ArgumentParser
from multiprocessing import Process,Lock,Manager,Queue
class TimLogger():
loggerFlag = False
def __init__(self,name = u'settlement',rootdir = u'.'):
self.rootName = name
self.rootdir = rootdir
def getLogger(self,name=u'',level = logging.INFO):
if (TimLogger.loggerFlag):
if (name):
logger = logging.getLogger((self.rootName + u'.%s') % name)
logger.setLevel(level)
else:
logger = logging.getLogger(self.rootName)
logger.setLevel(level)
return logger
else:
LOG_FILE = self.rootName + u'.log'
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter(u'%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s' )
handler = logging.handlers.RotatingFileHandler(os.path.join( os.path.realpath(self.rootdir),LOG_FILE), maxBytes = 1024*1024, backupCount = 5)
handler.setFormatter(formatter)
handler.setLevel(level)
if (name):
logger = logging.getLogger((self.rootName + u'.%s') % name)
else:
logger = logging.getLogger(self.rootName)
logger.addHandler(handler)
logger.addHandler(console)
TimLogger.loggerFlag = True
return logger
class MyAPP():
def __init__(self,g_rootdir, g_level):
self.stdin_path = u'/dev/null'
self.stdout_path = u'/dev/tty'
self.stderr_path = u'/dev/tty'
self.pidfile_path = u'/var/run/monitor.pid'
self.pidfile_timeout = 5
self.g_rootdir=g_rootdir
self.g_level=g_level
def run(self):
class MyEventHandler(pyinotify.ProcessEvent):
def __init__(self,rootdir,logger,logger1,logger2):
pyinotify.ProcessEvent.__init__(self)
self.findFile1 = False
self.findFile2 = False
self.log = logger
self.logger1 = logger1
self.logger2 = logger2
self.g_rootdir=rootdir
def process_IN_ACCESS(self, event):
self.log.info(u"ACCESS event:%s" % event.pathname)
def process_IN_ATTRIB(self, event):
self.log.info(u"ATTRIB event:%s" % event.pathname)
def process_IN_CLOSE_NOWRITE(self, event):
self.log.info(u"CLOSE_NOWRITE event:%s" % event.pathname)
def process_IN_CLOSE_WRITE(self, event):
self.log.info(u"CLOSE_WRITE event:%s" % event.pathname)
#print(u"CLOSE_WRITE event:%s" % event.pathname)
if (self.findFile1):
try:
(d,f) = os.path.split(event.pathname)
if (f.startswith(u"AccSum_") and f.endswith(u".xlsx")):
reload(lynx2cfmmc)
from lynx2cfmmc import DealCMFChinaData
xls = DealCMFChinaData(self.g_rootdir, mylogger = self.logger1)
if (xls.initFlag):
xls(f[7:15],xlsfname = event.pathname )
os.remove(event.pathname)
self.findFile1 = False
except Exception,e:
self.log.info(u"There is error:%s" % e)
#print(u"There is error:%s" % e)
if (self.findFile2):
try :
(d,f) = os.path.split(event.pathname)
if (f.startswith(u"rebate") and f.endswith(u"q.txt")):
reload(rebatexlwt)
from rebatexlwt import TimRebate
xls = TimRebate(self.g_rootdir, mylogger = self.logger2)
if (xls.initFlag):
xls(f[6:10],int(f[10]))
os.remove(event.pathname)
self.findFile2 = False
except Exception,e:
self.log.info(u"There is error:%s" % e)
#print(u"There is error:%s" % e)
def process_IN_CREATE(self, event):
self.log.info(u"CREATE event:%s" % event.pathname)
#print(u"CREATE event:%s" % event.pathname)
(d,f) = os.path.split(event.pathname)
if (len(f) == 20):
if (f.startswith(u"AccSum_") and f.endswith(u".xlsx")):
self.findFile1 = True
if (len(f) == 16):
if (f.startswith(u"rebate") and f.endswith(u"q.txt")):
self.findFile2 = True
def process_IN_DELETE(self, event):
self.log.info(u"DELETE event:%s" % event.pathname)
def process_IN_MODIFY(self, event):
self.log.info(u"MODIFY event:%s" % event.pathname)
def process_IN_OPEN(self, event):
self.log.info(u"OPEN event:%s" % event.pathname)
TLF = TimLogger(rootdir = self.g_rootdir)
logger = TLF.getLogger()
logger1 = TLF.getLogger(name=u'cmfchina',level=self.g_level)
fullpath1 = os.path.join(self.g_rootdir,u'cmfchina')
logger2 = TLF.getLogger(name=u'rebate',level=self.g_level)
fullpath2 = os.path.join(self.g_rootdir,u'rebate')
# watch manager
wm = pyinotify.WatchManager()
mask = pyinotify.IN_CREATE | pyinotify.IN_CLOSE_WRITE
#mask = pyinotify.ALL_EVENTS
wm.add_watch(fullpath1, mask, rec=True)
wm.add_watch(fullpath2, mask, rec=True)
# event handler
eh = MyEventHandler(self.g_rootdir,logger,logger1,logger2)
# notifier
notifier = pyinotify.Notifier(wm, eh)
notifier.loop()
if __name__ == '__main__':
g_rootdir = r"/home/gfqhhk/doc/settlement"
g_level = logging.INFO
app = MyAPP(g_rootdir, g_level)
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()