|
@@ -0,0 +1,96 @@
|
|
|
+import multiprocessing
|
|
|
+from utils import transport
|
|
|
+import time
|
|
|
+import monitor
|
|
|
+import sys
|
|
|
+"""
|
|
|
+ This class is intended to collect data given a configuration
|
|
|
+
|
|
|
+"""
|
|
|
+class Top(multiprocessing.Process):
|
|
|
+ def __init__(self,_config,lock):
|
|
|
+ multiprocessing.Process.__init__(self)
|
|
|
+ self.lock = lock
|
|
|
+ self.reader_class = _config['store']['class']['read']
|
|
|
+ self.write_class = _config['store']['class']['write']
|
|
|
+ self.rw_args = _config['store']['args']
|
|
|
+ self.factory = transport.DataSourceFactory()
|
|
|
+
|
|
|
+ self.name = 'Zulu-Top'
|
|
|
+ self.quit = False
|
|
|
+ print sys.argv
|
|
|
+ sys.argv[0] = self.name
|
|
|
+ print sys.argv
|
|
|
+ # multiprocessing.current_process().name = 'Zulu-Top'
|
|
|
+ self.exit = multiprocessing.Event()
|
|
|
+
|
|
|
+
|
|
|
+ className = ''.join(['monitor.',_config['monitor']['processes']['class'],'()'])
|
|
|
+ self.handler = eval(className)
|
|
|
+ self.config = _config['monitor']['processes']['config']
|
|
|
+ def stop(self):
|
|
|
+ self.quit = True
|
|
|
+ def run(self):
|
|
|
+ while self.quit == False:
|
|
|
+ for label in self.config :
|
|
|
+ self.lock.acquire()
|
|
|
+ gwriter = self.factory.instance(type=self.write_class,args=self.rw_args)
|
|
|
+ for app in self.config[label] :
|
|
|
+ self.handler.init(app)
|
|
|
+ r = self.handler.composite()
|
|
|
+ gwriter.write(label=label,row=r)
|
|
|
+ time.sleep(5)
|
|
|
+ self.lock.release()
|
|
|
+ ELLAPSED_TIME = 60*30
|
|
|
+ time.sleep(ELLAPSED_TIME)
|
|
|
+ print "Exiting ",self.name
|
|
|
+
|
|
|
+class Learner(multiprocessing.Process) :
|
|
|
+
|
|
|
+ """
|
|
|
+ This function expects paltform config (store,learner)
|
|
|
+ It will leverage store and learner in order to operate
|
|
|
+ """
|
|
|
+ def __init__(self,config,lock):
|
|
|
+ multiprocessing.Process.__init__(self)
|
|
|
+ self.name='Zulu-Learner'
|
|
|
+ self.lock = lock
|
|
|
+ self.reader_class = config['store']['class']['read']
|
|
|
+ self.write_class = config['store']['class']['write']
|
|
|
+ self.rw_args = config['store']['args']
|
|
|
+ self.features = config['learner']['anomalies']['features']
|
|
|
+ self.yo = config['learner']['anomalies']['label']
|
|
|
+ self.apps = config['learner']['anomalies']['apps']
|
|
|
+ self.factory = transport.DataSourceFactory()
|
|
|
+ """
|
|
|
+ This function will initiate learning every (x-hour)
|
|
|
+ If there is nothing to learn the app will simply go to sleep
|
|
|
+ """
|
|
|
+ def run(self):
|
|
|
+ reader = self.factory.instance(type=self.reader_class,args=self.rw_args)
|
|
|
+ data = reader.read()
|
|
|
+ #
|
|
|
+ # This is the motherload of innefficiency ...
|
|
|
+ #
|
|
|
+ while True:
|
|
|
+ r = {}
|
|
|
+ for key in data :
|
|
|
+ logs = data[key]
|
|
|
+ r[key] = {}
|
|
|
+ for app in self.apps:
|
|
|
+ handler = AnomalyDetection()
|
|
|
+ r[key][app] = lhandler.learn(data,'label',app,self.features,self.yo)
|
|
|
+ #
|
|
|
+ # At this point we've already learnt every thing we need to learn
|
|
|
+ #
|
|
|
+ self.lock.aquire()
|
|
|
+ writer = sef.factory.instance(type.self.write_class,args=self.rw_args)
|
|
|
+ writer.write('learn',r)
|
|
|
+ self.lock.release()
|
|
|
+
|
|
|
+ TIME_ELLAPSED = 60*120 #-- Every 2 hours
|
|
|
+ time.sleep(TIME_ELLAPSED)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|