|
|
@ -60,8 +60,11 @@ class Actor(Thread):
|
|
|
|
class Folders(Actor):
|
|
|
|
class Folders(Actor):
|
|
|
|
def init(self,config,item):
|
|
|
|
def init(self,config,item):
|
|
|
|
Actor.init(self,config,item)
|
|
|
|
Actor.init(self,config,item)
|
|
|
|
self.config = config['folders']
|
|
|
|
self.lfolders = config['folders']
|
|
|
|
self.item = item
|
|
|
|
self.config = config['actions']['folders']
|
|
|
|
|
|
|
|
self.threshold = self.get_size(self.config['threshold'])
|
|
|
|
|
|
|
|
self.item = item
|
|
|
|
|
|
|
|
|
|
|
|
def archive(self,item):
|
|
|
|
def archive(self,item):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
This function will archive all files in a given folder
|
|
|
|
This function will archive all files in a given folder
|
|
|
@ -82,13 +85,44 @@ class Folders(Actor):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
This function consists in deleting files from a given folder
|
|
|
|
This function consists in deleting files from a given folder
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
shutil.rmtree(item['label'])
|
|
|
|
rpath = item['label']
|
|
|
|
os.mkdir(item['label'])
|
|
|
|
lists = os.listdir(item['label'])
|
|
|
|
|
|
|
|
for name in list() :
|
|
|
|
|
|
|
|
path = os.sep([item['label'],name])
|
|
|
|
|
|
|
|
if os.path.isdir(path) :
|
|
|
|
|
|
|
|
shutil.rmtree(path)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
os.remove(path)
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_size(self,value):
|
|
|
|
|
|
|
|
units = {'MB':1000,'GB':1000000,'TB':1000000000} # converting to kb
|
|
|
|
|
|
|
|
key = set(unites) & set(re.split('(\d+)',value.upper()))
|
|
|
|
|
|
|
|
if len(key) == 0:
|
|
|
|
|
|
|
|
return -1
|
|
|
|
|
|
|
|
key = key.pop()
|
|
|
|
|
|
|
|
return float(value.upper().replace('MB','').strip()) * units[key]
|
|
|
|
|
|
|
|
|
|
|
|
def isvalid(self,item):
|
|
|
|
def isvalid(self,item):
|
|
|
|
return os.path.exists(item['label'])
|
|
|
|
"""
|
|
|
|
|
|
|
|
This function returns whether the following :
|
|
|
|
|
|
|
|
p : folder exists
|
|
|
|
|
|
|
|
q : has_reached threashold
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p = os.path.exists(item['label']) and item['label'] in self.lfolders
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
q = self.get_size(item['size']) >= self.threshold
|
|
|
|
|
|
|
|
return p and q
|
|
|
|
|
|
|
|
|
|
|
|
def process(self,item):
|
|
|
|
def process(self,item):
|
|
|
|
print item
|
|
|
|
if self.isValid(item) :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
name = self.config['action']
|
|
|
|
|
|
|
|
stream = "".join([name,'(',json.dumps(item),')'])
|
|
|
|
|
|
|
|
eval(stream)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Kill(Actor):
|
|
|
|
class Kill(Actor):
|
|
|
@ -109,7 +143,7 @@ class Start(Actor):
|
|
|
|
|
|
|
|
|
|
|
|
def init(self,config,item):
|
|
|
|
def init(self,config,item):
|
|
|
|
Actor.init(self,config,item)
|
|
|
|
Actor.init(self,config,item)
|
|
|
|
self.config = config['start']
|
|
|
|
self.config = config['apps']
|
|
|
|
self.ng = ng(self.config.keys())
|
|
|
|
self.ng = ng(self.config.keys())
|
|
|
|
|
|
|
|
|
|
|
|
def isValid(self,name):
|
|
|
|
def isValid(self,name):
|
|
|
@ -169,7 +203,10 @@ class Apps(Actor):
|
|
|
|
self.reboot()
|
|
|
|
self.reboot()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Event(Thread):
|
|
|
|
|
|
|
|
def __init__(self,config):
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
The orchestrator class is designed to aggregate actions and communicate back to the caller
|
|
|
|
The orchestrator class is designed to aggregate actions and communicate back to the caller
|
|
|
|
Mesage passing is structured as follows {from,to,content} The content is designed to be understood by the actor
|
|
|
|
Mesage passing is structured as follows {from,to,content} The content is designed to be understood by the actor
|
|
|
@ -187,6 +224,7 @@ class Orchestrator(Actor):
|
|
|
|
f.close()
|
|
|
|
f.close()
|
|
|
|
self.config = config
|
|
|
|
self.config = config
|
|
|
|
Actor.__init__(self)
|
|
|
|
Actor.__init__(self)
|
|
|
|
|
|
|
|
|
|
|
|
self.actors = {"apps":Apps(),"folders":Folders()}
|
|
|
|
self.actors = {"apps":Apps(),"folders":Folders()}
|
|
|
|
self.is_master_node = False
|
|
|
|
self.is_master_node = False
|
|
|
|
self.items = []
|
|
|
|
self.items = []
|
|
|
|