Date de lancementseptembre 2016
État du ServicePRODUCTION
ConcepteursDorian Becker, Alexandre Narbonne
Sourceshttps://github.com/gadzorg/gram2_api_server
Clés de routage écoutées
request.gramapi.group.update
Clés de routage émises
notify.account.created
notify.account.updated
notify.account.deleted
notify.group.created
notify.group.updated
notify.group.deleted

Présentation du service

Ce service fait l'interaction entre l'API GrAM et le système SOA

Outre le fait de piloter les sous-système tel que le LDAP et les comptes GoogleApps, il permet d’exécuter des requêtes en mode "batch", notamment pour la mise à jour des groupes depuis le site Soce

Ce service est complètement intégré au sein de l'application GrAM API 2

Infos pour les Ops

Environnements

Développement

VHOST rabbitmq individuel pour chaque dev

Recette

HébergementVOIR GrAM API 2
ResourcesUser rabbitmq : rec-gram

Production

HébergementVOIR GrAM API 2
ResourcesUser rabbitmq : rec-gram

Dépendances extérieures

Aucune spécifiques au service rabbitMQ, de manière générale voir GrAM API 2

Déploiement

Configuration

voir GrAM API 2

L'application fonctionne soit avec des varaibles d'environnement, soit avec un fichier de configuration.

Le fichier de configuration est situé dans config/rabbitmq.yml

Exemple de fichier config/rabbitmq.yml
default: &default
  sender: gramapi
  host: localhost
  port: 5672
  vhost: /
  queue_name: logs
  deferred_time: 5000
  max_attempts: 10
  exchange_name: "agoram_event_exchange"
  user: guest
  password: 
  logging_key: "log"

development:
  <<: *default

test:
  <<: *default
  deferred_time: 10
  max_attempts: 2

production:
  <<: *default

 

Tout ces attributs peuvent être indiquer en variable d'environnement en les mettant en majuscules et en prefixant le nom avec RABBITMQ_

Les variables d'environnement sont prioritaires sur le fichier de configuration

Exemple : RABBITMQ_HOST

Arret / Démarage

Sur Heroku :

Il suffit d'activer ou désactiver le dyno service_rabbitmq

En local :

Lancer la commande bundle exec rake gorg_service:run pour démarrer le service

Ctrl+C pour le couper ou envoyer SIGINT (kill -2)

Installation

Infos pour les Dev'

Notifications générées

Clé de routageQuand ?Contenu du messageExemple de contenu
notify.account.createdLe compte a été créé dans le GrAM

key : l'uuid du compte

changes : la liste des changement sous la forme

{
  "attr1": [null,nouvelle_valeur_attr1],
  "attr2": [null,nouvelle_valeur_attr2]
}
{  
   "key":"36a7e016-a300-4f52-85f4-6804dede6c6b",
   "changes":{  
      "uuid":[null,"36a7e016-a300-4f52-85f4-6804dede6c6b"],
      "hruid":[null,"paul.david-hewson.1986"],
      "id_soce":[null,1556001],
      "enabled":[null,true],
      "lastname":[null,"David Hewson"],
      "firstname":[null,"Paul"],
      "birthname":[null,""],
      "birth_firstname":[ null,""],
      "email":[null,"[email protected]"],
      "birthdate":[null,"1960-05-10"],
      "is_gadz":[null,true],
      "school_id":[null,""],
      "date_sortie_ecole":[null,"1990-12-12"],
      "buque_texte":[null,"Bono"],
      "buque_zaloeil":[null,"Bono"],
      "gadz_fams":[ null,"59"],
      "gadz_fams_zaloeil":[null,""],
      "gadz_proms_principale":[null,"1986"],
      "gadz_proms_secondaire":[null,""],
      "avatar_url":[null,"http://recette.soce.fr/images/"],
      "url":[null,"/api/v2/accounts/36a7e016-a300-4f52-85f4-6804dede6c6b"]
   }
}
notify.account.updatedLe compte a été mis à jour dans le GrAM

key : l'uuid du compte

changes : la liste des changement sous la forme

{
  "attr1": [ancienne_valeur_attr1,nouvelle_valeur_attr1],
  "attr2": [ancienne_valeur_attr2,nouvelle_valeur_attr2]
}
{
  "key":"ae96e86a-c761-4ebe-a4c4-a31a226e7620",
  "changes":
    {
      "birthname": ["","VanelNaissance"],
      "email":["[email protected]","[email protected]"],
      "date_sortie_ecole":[null,"2002-01-01"]
    }
}
notify.account.deletedLe compte a été supprimé du GrAM
PAS ENCORE IMPLEMENTE 
key : l'uuid du compte
{
  "key":"ae96e86a-c761-4ebe-a4c4-a31a226e7620",
}
notify.group.createdLe groupe a été créé dans le GrAM

key : l'uuid du compte

changes : la liste des changement sous la forme

{
  "attr1": [null,nouvelle_valeur_attr1],
  "attr2": [null,nouvelle_valeur_attr2]
}

 

 

notify.group.updatedLe groupe a été mis à jour dans le GrAM

key : l'uuid du compte

changes : la liste des changement sous la forme

{
  "attr1": [ancienne_valeur_attr1,nouvelle_valeur_attr1],
  "attr2": [ancienne_valeur_attr2,nouvelle_valeur_attr2]
}
{
  "key":"ae96e86a-c761-4ebe-a4c4-a31a226e7620",
  "changes":
    {
      "name": ["roots","Les Roots"],
    }
}
notify.group.deleted

Le groupe a été supprimé du GrAM

PAS ENCORE IMPLEMENTE 

key : l'uuid du groupe
{
  "key":"ae96e86a-c761-4ebe-a4c4-a31a226e7620",
}

N'oubliez pas de mettre à jour la propriétés "Clés de routage émises" de la page avec les nouvelles routing keys

Changement des spécifications

Si vous modifiez le format d'une notification existante, essayez au maximum de conserver les données précédentes et pensez à reporter les changements sur les services clients de cette notification

 

Requêtes faites à d'autres services

Clé de routageCommentaires

N'oubliez pas de mettre à jour la propriétés "Clés de routage émise" de la page avec les nouvelles routing keys

Requetes écoutées

Clé de routageActions effectuéesContenu du messageExemple de contenu
request.gramapi.group.updateMet à jours les informations d'un groupe à partir des données du message, y compris la liste des membres
SCHEMA JSON
{  
   "$schema":"http://json-schema.org/draft-04/schema#",
   "title":"Create Google Account message schema",
   "type":"object",
   "properties":{  
      "group_uuid":{  
         "type":"string",
         "description":"The unique identifier of linked GrAM Account",
         "pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
      },
      "name":{  
         "type":"string",
         "description":"Long name of the group"
      },
      "short_name":{  
         "type":"string",
         "description":"String identifier of the group"
      },
      "description":{  
         "type":"string",
         "description":"Description text of the group"
      },
      "members":{  
         "type":"array",
         "description":"UUIDs of group members",
         "items":{  
            "type":"string",
            "pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
         }
      }
   },
   "additionalProperties":true,
   "required":[  
      "group_uuid",
      "name",
      "short_name",
      "description",
      "members"
   ]
}
{
	"group_uuid": "ae96e86a-c761-4ebe-a4c4-a31a226e7620",
    "name": "roots",
    "members" : [
        "a911e4ea-b205-433b-bb42-711faa10be27",
        "4fa874db-7730-4105-b550-8ea991907240"
 ]
}

N'oubliez pas de mettre à jour la propriétés "Clés de routage écoutées" de la page avec les nouvelles routing keys

Changement des spécifications

Si vous modifiez le format d'une requete existante, pensez à reporter les changements sur les services clients de cette requete

Notifications écoutées

Clé de routageActions effectuées

N'oubliez pas de mettre à jour la propriétés "Clés de routage écoutées" de la page avec les nouvelles routing keys