wiki:Gestió de tasques

Gestió de Tasques

Per tal d'oferir un flux de comunicació contínua entre l'aplicació web admin-center i el bolcat d'informació contínua per part de mètodes n4d (com per exemple la creció d'imatges d'ltsp), es proporciona un mecanisme de comunicació a través de websockets entre les funcionalitats n4d i l'admin-center.

Aquesta comunicació es realitza a través del mètode n4dWithLog, de la classe Utils, proporcionada per l'adminCenter:

UtilsClass.prototype.n4dWithLog=function n4dWithLog(credentials, n4dclass, n4dmethod, arglist)

On especifiquem:

  • Les credencials (usuari i contrassenya),
  • La classe n4d que volem utilitzar,
  • El mètode
  • La llista d'arguments

Fet açò, l'admin center es posa en contacte amb l'administrador de tasques, i llança un thread al servidor amb la funcionalitat que li hajam demanat, proporcionant-nos un número identificador de la tasca. Amb aquest, ens mostrarà una finestra de log, que podrem ocultar en qualsevol moment i tornar a escoltar el log posteriorment.

Per reenganxar-nos de nou a un log, necessitarem l'id de la tasca, i la funció listenJob de la següent manera:

UtilsClass.prototype.listenJob=function listenJob(jobid=0)

Aquesta funció ja s'encarregarà d'obtenir de nou l'adreça del websocket on està la conversa i posar-se a escoltar els seus missatges.

La classe TaskMan?

La clase TaskMan? és qui s'encarrega de gestionar les tasques amb log a l'n4d dins l'admin center. Fa ús de dos llibreríes python: wsmanager.py, per gestionar els websockets i actasks.py, per gestionar les tasques. La idea és utilitzar sempre el mateix websocket per comunicar tots els processos, i cada missatge anirà etiquetat pel seu identificador de tasca. Aquest, en lloc de ser seqüencial, vindrà determinat per l'hora del sistema, de manera que proporcione un identificador únic en la màquina que puga associar-se, per exemple a les imatges de clients i oferisca la data de la última vegada que s'ha modificat.

Aquesta classe proporciona els mètodes:

[TaskMan] getTasks : anonymous * 
[TaskMan] getWS : anonymous * 
[TaskMan] getTaskStatus : anonymous * 
[TaskMan] newTask : admin admins adm 
[TaskMan] cancelTask : admin admins adm 
[TaskMan] getTask : anonymous * 
[TaskMan] listenTask : anonymous * 

Vegem alguns exemples d'us:

  • Per obtenir la llista de tasques:
    $ n4d-client -c TaskMan -m getTasks
    {'status': True, 'msg': "{'14655107302': <actasks.Task instance at 0x7fb40ab14fc8>}"}
    
  • Per obtenir el websocket
    n4d-client -c TaskMan -m getWS
    {'status': True, 'ws': 'ws://127.0.0.1:44697'}
    

Per consultar una tasca concreta:

n4d-client -c TaskMan -m getTask -a 14655107302
{'status': True, 'msg': "{'status': 'BROKEN', 'logfolder': '/run/taskmanager', 'process': <subprocess.Popen object at 0x7fb40ad9d750>, 'filepipe': '/run/taskmanager/pipe_q3vyyy', 'command': 'ltsp-build-client --config /etc/ltsp/templates/lliurex-ltsp-desktop.conf --accept-unsigned-packages --purge-chroot --chroot Desktop&& service nbd-server restart', 'taskid': 14655107302}"}
Last modified 18 months ago Last modified on Jun 10, 2016, 12:23:41 AM