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