Table of Contents

Documentation Mongo DB

Installation

Serveur

Installer une version recente de mongodb sur MONPC

Creation des utilisateurs

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

Creation de la base

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

Backup

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.

Client

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

Addendum

L'access se fait maintenant par defaut avec python3

sudo apt-get install python3-pip
sudo pip3 install pymongo

Acces et modification des configurations des ASICs

Representation des ASICs

MongoRoc object

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

Methodes de la classe

mongoroc.pdf

Le script mgroc

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

Exemples

Les exemples suivants sont pour un FEB, la methodologie est analogue pour les DIFs et les GRICs

Création d'un state

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

Modification d'un state

Thresholds
 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")
 
6 Bits DAC
 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")
Masks channels
 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 

Utilisation pour le jobcontrol

Les configurations du jobcontrol de zdaq sont des fichiers JSON qui doivent etre accessible sur le reseau, l'utilisation de mongodb est donc naturelle

Structure des fichiers JSON

Description generale

Un fichier de configuration est un dictionnaire avec deux tags:

  1. NAME, le nom de la configuration
  2. HOSTS, un dictionnaire des differents PC utilises avec leur liste de processus associes
{
"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:

  1. ARGS, une liste des arguments du programme
  2. ENV, une liste des variables d'environnement a declarer lors de l'execution, la variable WEBPORT determinant le port d'acces a l'application doit etre obligatoirement definie.
  3. NAME, le nom logique du programme dans zdaq
  4. PROGRAM, le chemin complet vers le binaire a executer
  5. PARAMETER, un objet JSON pour acceder aux parametres de l'application (format libre)

La description JSON des differents processus se trouve dans Liste des descriptions de processus

La classe MongoJob

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 mgjob

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