parent
f3d9e03b95
commit
b0cd031b07
@ -0,0 +1,9 @@
|
|||||||
|
from flask import Flask, render_template
|
||||||
|
from flask_socketio import SocketIO
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.config['SECRET_KEY'] = '[0v8-247]-4qdm-h8r5!'
|
||||||
|
socketio = SocketIO(app)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
socketio.run(app)
|
@ -0,0 +1,17 @@
|
|||||||
|
import sys
|
||||||
|
PARAMS = {'context':''}
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
|
||||||
|
N = len(sys.argv)
|
||||||
|
for i in range(1,N):
|
||||||
|
value = None
|
||||||
|
if sys.argv[i].startswith('--'):
|
||||||
|
key = sys.argv[i].replace('-','')
|
||||||
|
|
||||||
|
if i + 1 < N:
|
||||||
|
value = sys.argv[i + 1] = sys.argv[i+1].strip()
|
||||||
|
if key and value:
|
||||||
|
PARAMS[key] = value
|
||||||
|
|
||||||
|
i += 2
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
|
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
from utils.workers import *
|
||||||
|
from utils.params import PARAMS
|
||||||
|
f = open(PARAMS['path'])
|
||||||
|
config = json.loads(f.read())
|
||||||
|
f.close()
|
||||||
|
from multiprocessing import Lock
|
||||||
|
lock = Lock()
|
||||||
|
p = Top(config,lock)
|
||||||
|
p.daemon = True
|
||||||
|
p.start()
|
||||||
|
p.join()
|
Loading…
Reference in new issue