scheduler - MutakamwoyoCloud/MCloud GitHub Wiki
3.3.3.4 Manejador
Este componente es el manejador principal del sistema, realiza las tareas de encolado y desencolado de las peticiones de descarga sobre un array de elementos, posteriormente permite procesar estas peticiones de una en una, en este proceso, realiza una serie de comprobaciones y tratamientos sobre el path del archivo, para posteriormente pasar a descomprimir el archivo, solicitar los datos necesarios al modulo especificado en el nombre del archivo y volver a comprimir los resultados en la carpeta ../out/.
Funciones
Process
Función más importante del componente, esta función realiza la descompresión, tratamiento y compresión de todas las peticiones, eliminando los archivos de la carpeta ../received/
una vez han sido utilizados. Llama a un módulo distinto dependiendo del tipo de petición de información que venga marcado en el path del archivo.
def process(self, p = None):
petition = self.dequeue() if p is None else p
names = self.splitPath(petition)
try:
list = decompress(names[0], petition)
except OSError as osE:
os.chdir(self.path)
shutil.rmtree("../out/"+names[0])
self.process(petition)
listOut = []
os.mkdir(list['dir']+"/result/")
try:
for l in list['listDir']:
if names[0].split("_")[1] == "wiki":
params = self.wiki.search(...)
if params and len(params) > 0:
for d in params:
listOut.append(d)
compress_file = names[0]+"_out.tar.gz"
compress(...)
elif names[0].split("_")[1] == "youtube":
self.youtube.search(...)
except OSError as osE:
os.chdir(self.path)
shutil.rmtree(list['dir'])
except Exception as eEx:
os.chdir(self.path)
shutil.rmtree(list['dir'])
time.sleep(15)
self.process(petition)
except e:
print "cannot get resources, check internet connection!"
os.chdir(self.path)
shutil.rmtree(list['dir'])
time.sleep(15)
self.process(petition)
os.remove(petition);
os.chdir(self.path)
Enqueue
Encola la petición en el array de peticiones, si el archivo es de eliminación (remove) llama a la eliminación de archivos.
parámetros entrada:
- petition: petición que se va a encolar en el sistema.
def enqueue(self, petition):
Dequeue
Desencola la ultima petición almacenada en el array de peticiones.
parámetros salida:
- petition: petición desencolada.
def dequeue(self):
Split Path
Recibe un path de petición y realiza las acciones necesarias para devolver únicamente la información importante del path de la petición.
parámetros entrada:
- petition: petición a tratar.
parámetros salida:
- names[]: array de strings de la petición tratada.
def splitPath(self,petition):
Remove files
Elimina todos los archivos nombrados en el archivo remove
de la carpeta ../out/
comprobando siempre que el archivo exista, por ultimo, elimina el archivo remove
de la carpeta ../received/
.
parámetros entrada:
- petition: petición a eliminar.
def remove_files(self, petition):
Is Empty
Devuelve True si la lista de peticiones no tiene ningún elemento.
parámetros salida:
- Boolean: booleano de lista vacía
def isEmpty(self):
Insert Order List Petition
Realiza una inserción en la lista de forma ordenada, esta ordenación depende del tipo de módulo al que vaya destinado, estos módulos tienen una prioridad, la Wikipedia es el módulo que más prioridad tiene, seguido del Vademécum y por último el módulo Youtube.
parámetros entrada:
- num: numero de prioridad de la petición.
- petition: petición a insertar en orden.
def insertOrderListPetition(self, num, petition):
Call Thread
Esta función crea un thread y le manda a ejecutar un comando enviado por el parámetro popenArgs, la llamada subprocess.call(popenArgs)
se queda bloqueada hasta que el comando ha terminado, cuando el comando ha terminado, llama al callback enviado en el parámetro onExit
.
parámetos entrada:
- onExit: callback que será llamado cuando el thread acabe.
- popenArgs: argumentos de la llamada al sub-proceso.
parámetros salida:
- thread: thread que se va a ejecutar.
def callThread(self, onExit, popenArgs):
Job
Esta función define un callback a ejecutar cuando el comando se termine de ejecutar y manda crear un thread con el comando scrapy runspider vademecum/medicamentos.py
.
def job(self):
Fichero de eliminado (remove)
Este fichero es enviado desde el servidor, contiene una lista de nombres de archivos que deben ser eliminados de la carpeta ../out/
, ya que estos archivos ya se encuentran almacenados en el sistema del servidor.
El formato de este archivo es:
hashPetition_typePetition
ejemplo:
0891w12e2sqd299291_wiki