Carregant...
 

Desenvolupament de plugins en n4d

Versiones
  -LliureX 16

 

1. Introducció

Abans de començar la creació de plugins és important que hages llegit les següents entrades:

2. Plugins n4d

El desenvolupament de mòduls n4d és prou senzill i consisteix principalment en:

  • Definir la classe i els mètodes que volem implementar.
  • Indicar al sistema n4d com publicar aquests mètodes de cara a l'exterior.

La millor manera de veure açò, és a través d'un xicotet exemple que veurem a continuació.

L'estructura d'un plugin consta de dos fitxers, un de configuració (/etc/n4d/conf.d) i altre d'implementació de la classe (/usr/share/n4d/).

Dins de la carpeta /usr/share/n4d  tenim diferents carpetes en funció del llenguatge de programació  que utilitzem per a crear el plugin:

  • python-­plugins: escrits en python
  • perl-plugins: escrits en perl
  • binary-plugins: escrits en bash

3. Creació d'un plugin xat d'aula

El nostre plugin, que anomenarem N4dChat, implementarà tres mètodes i disposarà d'un atribut on guardarà els missatges:

  • ClaseN4dChat
    • Atribut missatge: llista de missatges.
    • Mètode SendMessage(ip, usuari, missatge): Agafarà  la ip de qui l'envia, el nom d'usuari i el missatge.
    • Mètode getMessages(inici): Tornarà tots els missatges enviats a la par del missatge marcat com a "Inici".
    • Mètode saveChat(arxiu): guardarà tots els missatges en el /tmp del servidor.

Els mètodes sendMessage i getMEssage són accessibles per a tothom i savehat serà sols accessible per a administradors i professors.

Per a implementar açò crearem un fitxer /etc/n4d/conf.d/N4dChat amb el següent contingut:

 

[SETUP]
type=python
path=N4dChat.py
class=N4dChat
[METHODS]
(ip)sendMessage=anonymous
getMessages=anonymous
saveChat=adm,admins,teachers

 

Podem veure que tenim dues seccions en l'arxiu:

  • SETUP: que és on es configura el plugin.
    • type=python : definim el  llenguatge de programació del plugin.
    • path=N4dChat.py  Nom del fitxer on s'implementaran els  mètodes.
    • class=N4dChat Nom de la classe
  • METHODS: on s'indiquen els mètodes que es fan públics en la classe.
    • (ip)sendMessage=anonymous : la ip davant indica que la ip de la màquina s'envia com primer paràmetre.
    • getMessages=anonymous
    • saveChat=adm,admins,teachers

 

Anem a explicar el codi pas a pas. Has de tenir en compte que no pots tallar i apegar directament aquest codi puix python utilitza els tabuladors.

Importem les llibreries os i json. Os per accedir al sistema i json per poder crear arxius json

import os
import json

 


Definim la classe N4dChat i  definim el constructor. En el constructor iniciem un vector:

class N4dChat:
def __init__(self):
self.Messages=[]
pass


Definim el mètode sendMessage(self, ip, username, message)

def sendMessage(self, ip, username, message):
  try:
    msg={"ip":ip, "username": username, "message":message}
    self.Messages.append(msg)
  except Exception as e:
    print "except "+str(e)
    return 1



Definim el mètode getMessage(self, startMsg),  on li passem des de quin missatge volem que comence a llegir.

def getMessages(self,startMsg):
  try:
    return(self.Messages[int(startMsg):]);
  except Exception as e:
    print "except "+str(e)
    return 1
  return 0

 
Definim el mètode saveChat(self, filename)  on indiquem el  nom de l'arxiu que volem que se salve.

def saveChat(self, filename):
  try:
    with open("/tmp/"+filename, 'w') as outfile:
      json.dump(self.Messages, outfile)
  except Exception as e:
    print "except "+str(e)
    return 1
  return 0

 

Des d'ací podem baixar l'arxiu per a utilitzar-lo:

N4dChat 

 

4.   Ús i  verificació de plugins

 

Una vegada hàgem creat el nostre plugin, si volem verificar-lo hem de reinicialitzar el servidor n4d, per a això hem  de fer:

sudo service n4d restart

És important obrir altra terminal i controlar el log de n4d:

sudo tail -f /var/log/n4d/n4d-server

Si ens fixem en el log, en algun moment ha d'eixir-nos:

[N4dChat] /usr/share/n4d/python-plugins/N4dChat.py ... OK

Si hi ha algun problema, hem de revisar el codi per a assegurar-nos que tot és correcte.

 

5. Proves

Finalment hem de provar el nostre plugin. Si tot ha funcionat correctament, per a provar-lo utilitzarem  n4d-client.

n4d-client -c N4dChat -m sendMessage -a "" lliurex "Hola a tots"

 

n4d-client -c N4dChat -m getMessages -a 0
[{'username': 'lliurex', 'ip': '127.0.0.1', 'message': 'Hola a tots'}, {'username': 'lliurex', 'ip': '127.0.0.1', 'message': 'Fent proves'}]

 

n4d-client -c N4dChat -m saveChat -u lliurex -p lliurex -a chat.txt
cat /tmp/chat.txt
[{"username": "lliurex", "ip": "127.0.0.1", "message": "Hola a tots"}, {"username": "lliurex", "ip": "127.0.0.1", "message": "Fent proves"}]