|
|
@ -38,7 +38,13 @@ class Manager() :
|
|
|
|
self.DELAY = int(self.plan['metadata']['delay'])
|
|
|
|
self.DELAY = int(self.plan['metadata']['delay'])
|
|
|
|
self.host = args['host']
|
|
|
|
self.host = args['host']
|
|
|
|
self.update() #-- Initializing status information
|
|
|
|
self.update() #-- Initializing status information
|
|
|
|
|
|
|
|
_args={"host":"dev.the-phi.com","qid":self.id,"uid":self.key}
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# Connecting to the messaging service
|
|
|
|
|
|
|
|
self.qlistener = self.factory.instance(type="QueueListener",args=_args)
|
|
|
|
|
|
|
|
self.qlistener.callback = self.callback
|
|
|
|
|
|
|
|
self.qlistener.init(self.id)
|
|
|
|
|
|
|
|
self.qlistener.read()
|
|
|
|
def update(self) :
|
|
|
|
def update(self) :
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
This method inspect the plans for the current account and makes sure it can/should proceed
|
|
|
|
This method inspect the plans for the current account and makes sure it can/should proceed
|
|
|
@ -64,7 +70,9 @@ class Manager() :
|
|
|
|
self.LIMIT = -1
|
|
|
|
self.LIMIT = -1
|
|
|
|
|
|
|
|
|
|
|
|
#self.filter(meta)
|
|
|
|
#self.filter(meta)
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# We are removing all that is not necessary i.e making sure the features matches the plan user has paid for
|
|
|
|
|
|
|
|
#
|
|
|
|
self.agents = self.filter('agents',meta,self.agents)
|
|
|
|
self.agents = self.filter('agents',meta,self.agents)
|
|
|
|
self.actors = self.filter('actors',meta,self.actors)
|
|
|
|
self.actors = self.filter('actors',meta,self.actors)
|
|
|
|
self.setup(meta)
|
|
|
|
self.setup(meta)
|
|
|
@ -89,60 +97,14 @@ class Manager() :
|
|
|
|
def filter(self,id,meta,objects):
|
|
|
|
def filter(self,id,meta,objects):
|
|
|
|
values = meta[id].replace(' ','').split(',')
|
|
|
|
values = meta[id].replace(' ','').split(',')
|
|
|
|
return [item for item in objects if item.getName() in values]
|
|
|
|
return [item for item in objects if item.getName() in values]
|
|
|
|
def __filter(self,meta) :
|
|
|
|
|
|
|
|
scope = []
|
|
|
|
|
|
|
|
lactors= []
|
|
|
|
|
|
|
|
for item in meta :
|
|
|
|
|
|
|
|
scope = scope + item['scope'].split(',')
|
|
|
|
|
|
|
|
if 'actors' in item :
|
|
|
|
|
|
|
|
lactors= lactors + item['actors'].split(',')
|
|
|
|
|
|
|
|
self.agents = [agent for agent in self.agents if agent.getName() in scope]
|
|
|
|
|
|
|
|
if len(lactors) == 0 :
|
|
|
|
|
|
|
|
self.actors = []
|
|
|
|
|
|
|
|
self.actors = [ actor for actor in self.actors if actor.getIdentifier() in lactors]
|
|
|
|
|
|
|
|
if len(self.actors) > 0 :
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# We should configure the actors accordingly and make sure they are operational
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conf = {"apps":None}
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# We need to get the configuration for the apps remotely
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
read_class = self.config['store']['class']['read']
|
|
|
|
|
|
|
|
read_args = self.config['store']['args']
|
|
|
|
|
|
|
|
couchdb = self.factory.instance(type=read_class,args=read_args)
|
|
|
|
|
|
|
|
uinfo = couchdb.view('config/apps',key=self.key)
|
|
|
|
|
|
|
|
if 'apps' in uinfo :
|
|
|
|
|
|
|
|
conf['apps'] = uinfo['apps']
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# Threshold will always give a default value
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
info = couchdb.view('config/folders',key=self.key)
|
|
|
|
|
|
|
|
threshold = info
|
|
|
|
|
|
|
|
conf['folder_threshold'] = threshold
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mailer = None
|
|
|
|
|
|
|
|
for actor in self.actors :
|
|
|
|
|
|
|
|
id = actor.getIdentifier()
|
|
|
|
|
|
|
|
if id == "mailer" :
|
|
|
|
|
|
|
|
mailer = actor.Mailer()
|
|
|
|
|
|
|
|
if conf[id] is None :
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
args = conf[id]
|
|
|
|
|
|
|
|
actor.init(args)
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# Initializing the mailer
|
|
|
|
|
|
|
|
if mailer is not None and mailer in self.config:
|
|
|
|
|
|
|
|
mailer.init(self.config['mailer'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return meta
|
|
|
|
|
|
|
|
def setup(self,meta) :
|
|
|
|
def setup(self,meta) :
|
|
|
|
conf = {"folders":None,"apps":None}
|
|
|
|
conf = {"folders":None,"apps":None}
|
|
|
|
read_class = self.config['store']['class']['read']
|
|
|
|
read_class = self.config['store']['class']['read']
|
|
|
|
read_args = self.config['store']['args']
|
|
|
|
read_args = self.config['store']['args']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
args = None
|
|
|
|
couchdb = self.factory.instance(type=read_class,args=read_args)
|
|
|
|
couchdb = self.factory.instance(type=read_class,args=read_args)
|
|
|
|
args = couchdb.view('config/apps',key=self.key)
|
|
|
|
args = couchdb.view('config/apps',key=self.key)
|
|
|
|
if len(args.keys()) > 0 :
|
|
|
|
if len(args.keys()) > 0 :
|
|
|
@ -158,40 +120,6 @@ class Manager() :
|
|
|
|
if args is not None and actor.getName() == name and len(args.keys()) > 0:
|
|
|
|
if args is not None and actor.getName() == name and len(args.keys()) > 0:
|
|
|
|
actor.init(args)
|
|
|
|
actor.init(args)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __setup(self,meta):
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# We should configure the actors accordingly and make sure they are operational
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
conf = {"folders":meta['folder_threshold'],"apps":None}
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# We need to get the configuration for the apps remotely
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
read_class = self.config['store']['class']['read']
|
|
|
|
|
|
|
|
read_args = self.config['store']['args']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
couchdb = self.factory.instance(type=read_class,args=read_args)
|
|
|
|
|
|
|
|
uinfo = couchdb.view('config/apps',key=self.key)
|
|
|
|
|
|
|
|
if 'apps' in uinfo :
|
|
|
|
|
|
|
|
conf['apps'] = uinfo['apps']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for agent in self.agents :
|
|
|
|
|
|
|
|
agent.init(conf['apps'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mailer = None
|
|
|
|
|
|
|
|
for actor in self.actors :
|
|
|
|
|
|
|
|
id = actor.getIdentifier()
|
|
|
|
|
|
|
|
if id == "mailer" :
|
|
|
|
|
|
|
|
mailer = actor.Mailer()
|
|
|
|
|
|
|
|
if conf[id] is None :
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
args = conf[id]
|
|
|
|
|
|
|
|
actor.init(args)
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# Initializing the mailer
|
|
|
|
|
|
|
|
if mailer is not None and mailer in self.config:
|
|
|
|
|
|
|
|
mailer.init(self.config['mailer'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def isvalid(self):
|
|
|
|
def isvalid(self):
|
|
|
|
self.update()
|
|
|
|
self.update()
|
|
|
|
return self.DELAY > -1 and self.LIMIT > -1
|
|
|
|
return self.DELAY > -1 and self.LIMIT > -1
|
|
|
@ -210,10 +138,25 @@ class Manager() :
|
|
|
|
This function enables the manager to be able to receive messages and delegate them to the appropriate actor
|
|
|
|
This function enables the manager to be able to receive messages and delegate them to the appropriate actor
|
|
|
|
@channel
|
|
|
|
@channel
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
print [channel,header]
|
|
|
|
|
|
|
|
message = json.loads(stream)
|
|
|
|
message = json.loads(stream)
|
|
|
|
data = message['data']
|
|
|
|
#
|
|
|
|
|
|
|
|
# we should inspect the message and insure it has reached the appropriate recepient
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
if 'node' in message and message['node'] == self.id :
|
|
|
|
|
|
|
|
action = message['action']
|
|
|
|
|
|
|
|
params = message['params']
|
|
|
|
|
|
|
|
self.delegate(action,params)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def delegate(self,action,params):
|
|
|
|
|
|
|
|
for actor in self.actors :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if actor.isValid(action=action,params=params) :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actor.init(action,params)
|
|
|
|
|
|
|
|
actor.run()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
pass
|
|
|
|
def run(self):
|
|
|
|
def run(self):
|
|
|
|
#DELAY=35*60 #- 35 Minutes
|
|
|
|
#DELAY=35*60 #- 35 Minutes
|
|
|
|
#LIMIT=1000
|
|
|
|
#LIMIT=1000
|
|
|
@ -240,6 +183,10 @@ class Manager() :
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
#label = id
|
|
|
|
#label = id
|
|
|
|
row = data
|
|
|
|
row = data
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
# @TODO:
|
|
|
|
|
|
|
|
# This data should be marked if it has been flagged for reboot
|
|
|
|
|
|
|
|
#
|
|
|
|
if type(row)==list and len(row) == 0 :
|
|
|
|
if type(row)==list and len(row) == 0 :
|
|
|
|
|
|
|
|
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|