Installer une version recente de mongodb sur MONPC
Pour la base 'MaBase
'
use MaBase
db.createUser({ user: 'monId', pwd: 'secretPassword', roles: [{ role: 'readWrite', db:'MaBase'}] })
Puis on modifie /etc/mongod.conf
# network interfaces net: port: 27017 bindIp: 0.0.0.0
security: authorization: 'enabled'
On peut ainsi acceder a la base MaBase a distance
mongo -u monId -p secretPassword MONPC/MaBase
La creation des table dans la base de donnees se fait par insertion d'objets dans les tables
Pour creer la base elle meme, il suffit de se connecter avec mongo
et de taper:
use MaBase
pour creer la base MaBase
Les tables sont creees par insertion par le script python
Pour sauvegAarder sur un PC distant
mongodump --forceTableScan --host monPC --port 27017 --username monId --password monPwd --db MaBase --out /data/local/mgbackup17/
Pour restaurer sur un autre monPC1
mongorestore mgbackup17/
et c'est fini.
Du cote client, seul l'acces au base mongodb est necessaire a travers des scripts python. Sur les distributions basees sur debian il suffit d'installer
le paquet python-pymongo
en python2
sudo apt-get install python-pymongo
L'access se fait maintenant par defaut avec python3
sudo apt-get install python3-pip sudo pip3 install pymongo
L'objet MongoRoc offre l'access a la base mongo ou les configurations d'ASICs sont stockees
On cree une instance de l'objet avec la method instance()
, pour cela il faut avoir defini la variable d'environnment MGDBLOGIN sous la forme:
MGDBLOGIN=userXXX/pwdXXX@hostYYY:27017@MYDB ou userXXX est le usernamce pwdXXX est le password hostYYY est le pc sur lequel la base est installle 27017 est le port d'acces MYDB est le nom de la base
On peut etablir un tunnel ssh pour acceder une base distante
ssh -fN -L 27037:hostYYY:27017 user@proxy
Dans ce cas on aura
MGDBLOGIN=userXXX/pwdXXX@localhost:27037@MYDB
Le script mgroc permet d'enumerer les etats de la base disponibles et de telecharger un etat donne dans /dev/shm/mgroc/statename_version.json
mgroc --states ... CERN2B_1415 1 upload from oracle FEB_2B_1415_16 DIF_ALGECO 1 Un essai avec les DIFs DIF_ALGECO 2 150 DIF SDHCAL ajoutees PULSALYS_DOME 1 State de base des 8 boards GRIC pour PULSALYS PULSALYS_DOME 2 Un test avec un seuil a 120 ... DIFTEST_DOME 1 State de base de la DIF 5 (24 Asics) DIFTEST_DOME 2 Seuil 140 ASU DIF 5 ...
mgroc --download --state=PULSALYS_DOME --version=2 PULSALYS_DOME 2 48 asics
et
ls -l /dev/shm/mgroc/ total 104 -rw-r--r-- 1 mirabito cms 104744 Jan 7 15:03 PULSALYS_DOME_2.json
Les exemples suivants sont pour un FEB, la methodologie est analogue pour les DIFs et les GRICs
Dans python (MGDBLOGIN doit être déclaré)
import MongoRoc as mg s=mg.instance() s.createNewState("FEB_B15_LYON") s.addFEB("192.168.10.15",2,"PR2B") s.uploadNewState("Un example de state avec un FEB et 2 ASICs")
et le state FEB_B15_LYON version 1 est inséré dans la base
import MongoRoc as mg s=mg.instance() s.download("FEB_B15_LYON",1) s.PR2_ChangeVthTime(495,15*256+10,1) s.PR2_ChangeVthTime(499,15*256+10,2) s.uploadChanges("FEB_B15_LYON","Threshold changed 495 on PR2_1 and 499 on 2")
import MongoRoc as mg s=mg.instance() s.download("FEB_B15_LYON",2) cor15_1= [0, 0, 0, 0, 3, 2, 2, 2, 3, 1, 1, 2, 0, 1, 1, 0,-1, 1, 1, -1, 1, 1, 1, 0, 1, 0, 1, 0, -1, 0, 2, 0] cor15_2= [0, 0, 0, 0, -2, -3, -3, -2, -2, -2, -2, -3, -2, -2, -2, -2, -2, -2, -2,-2, -2, -2, -3, -3, -2,0, -2, 0, -2, 0, -2, 0] s.PR2_Correct6BDac(15*256+10,1,cor15_1) s.PR2_Correct6BDac(15*256+10,2,cor15_2) s.uploadChanges("FEB_B15_LYON","Correction on 6BDAC on the 2 Asics")
import MongoRoc as mg s=mg.instance() s.download("FEB_B15_LYON",3) chm1=[0,1,2,3,25,27,29,31] for c in chm1: s.PR2_Change6BDac(15*256+10,1,c,1) s.PR2_ChangeMask(15*256+10,1,c,1) s.PR2_Change6BDac(15*256+10,2,c,1) s.PR2_ChangeMask(15*256+10,2,c,1) s.uploadChanges("FEB_B15_LYON","Mask unused channels ")
et on obtient:
mgroc --states | grep B15 FEB_B15_LYON 1 Un example de state avec un FEB et 2 ASICs FEB_B15_LYON 2 Threshold changed 495 on PR2_1 and 499 on 2 FEB_B15_LYON 3 Correction on 6BDAC on the 2 Asics FEB_B15_LYON 4 Mask unused channels
Les configurations du jobcontrol de zdaq sont des fichiers JSON qui doivent etre accessible sur le reseau, l'utilisation de mongodb est donc naturelle
Un fichier de configuration est un dictionnaire avec deux tags:
{ "NAME":"My_first_conf_1", "HOSTS":{ "lyopc1":[p1,p2,p3 ], "lyopc1":[p1,p2,p3,p4 ], "lyopcbuild":[p1,p2] } }
Chaque processus p est decrit par les attributs suivants:
La description JSON des differents processus se trouve dans Liste des descriptions de processus
La classe MongoJob est decrite dans le fichier mongojob.pdf
Un objet MongoJob permet l'acces a la base MongoDB par le meme mecanisme de varaible d'environnement MGDBLOGIN. Il permet en outre
Le script est une interface en ligne de commande du module MongoJob
usage: mgjob [-h] [--upload-config | --configurations | --download | --runs | --new-run] [--version VERSION] [--name NAME] [--comment COMMENT] [--location LOCATION] [--file FILE] optional arguments: -h, --help show this help message and exit --upload-config Upload new config with --name=NAME --file=FILE and optional --comment=xxx and --version=num --configurations List all the available configurations --download download the configuration specified in --name=config name --version=version --runs List all the taken runs --new-run Find last run of a given setup (--location setup) and fill the lastrun.sjon with the next runid Optional: --comment=xxxx --version VERSION DB configuration version --name NAME Configuration name --comment COMMENT Comment --location LOCATION Setup name --file FILE Configuration file