-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.py
More file actions
89 lines (72 loc) · 2.82 KB
/
main.py
File metadata and controls
89 lines (72 loc) · 2.82 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
import logging
import ConfigParser
#from inetproducer import InetProducer
#from kmlconsumer import KmlConsumer
#from aprsmonitor import APRSMonitor
import logger
#,parameters
my_logger = logging.getLogger('MyLogger')
#my_logger.setLevel(logging.DEBUG)
info = my_logger.info
##TODO: read up on factory functions
class ConfigSection(object):
def __init__(self,items):
for k,v in items:
self.__dict__[k]=v
class Main:
def __init__(self,iniFile,autoStart=True):
my_logger.debug('****Creating an instance of Main****')
self.iniFile=iniFile
self.cfg=ConfigParser.ConfigParser()
self.cfg.read(self.iniFile)
my_logger.setLevel(10) #int(self.cfg.get('main','logLevel')))
configMonitors={}
configProducers={}
configConsumers={}
for pluginName in self.cfg.sections():
#type,name=pluginName.split('|')
if pluginName=='main': continue
type=self.cfg.get(pluginName,'plugintype')
if type=='monitor':
configMonitors[pluginName]=ConfigSection(self.cfg.items(pluginName))
elif type=='producer':
configProducers[pluginName]=ConfigSection(self.cfg.items(pluginName))
elif type=='consumer':
configConsumers[pluginName]=ConfigSection(self.cfg.items(pluginName))
self.monitors=[]
##add monitors
for name,config in configMonitors.items():
my_logger.debug('Add monitor - %s' % name)
try:
m=__import__(config.plugin)
self.monitors.append(m.Main(config,name))
except:
my_logger.exception('Monitor plugin load error - %s' % name)
for monitor in self.monitors:
## for each monitor add producers
for name,config in configProducers.items():
print name
my_logger.debug('Add producer %s to monitor - %s' % (name,monitor.name))
try:
p=__import__(config.plugin)
monitor.addProducer(p.Main(config,name))
except:
my_logger.exception('Producer plugin load error - %s' % name)
##for each monitor add consumers
for name,config in configConsumers.items():
try:
c=__import__(config.plugin)
monitor.addConsumer(c.Main(config,name))
except:
my_logger.exception('Consumer plugin load error - %s' % name)
configConsumers.pop(name)
#raise
if autoStart:
self.start()
def start(self):
##TODO: add support for multiple monitors
self.monitors[0].mainLoop()
if __name__=='__main__':
ini='aprsmonitor.ini'
main=Main(ini)
#main.start()