Date de lancementSeptembre 2016
État du Service
ConcepteursAlexandre Narbonne
Sourceshttps://github.com/gadzorg/gorg_mailling_lists_daemon
Clés de routage écoutées
request.mailinglist.update
request.mailinglist.delete
Clés de routage émises

 

Présentation du service

Ce service offre une couche d'abstraction vis à vis du système de mailing lists. Il permet notament le passage à GoogleApps comme gestionnaire système d'hébergement des mailingin lists

Cette fonction était auparavant portée directement via platal via une interface XML-RPC avec Mailman2

Le passage a un micro service à était décider afin de permettre de changer à nouveau de système de gestion de mailing lists en cas de problème avec Google

Ce service est autonome et peut-être stateless 

Infos pour les Ops

Environnements

Développement

Domaine Google Apps de recette Poubs.org

VHost rabbit MQ pour chaque developpeurs

Recette

HébergementHeroku
CaractéristiquesApp rec-mailling-lists-daemon sur appartenant à l'utilisateur [email protected]
Resources
  • Domaine Google Apps de recette Poubs.org
  • Utilisateur RabbitMQ : rec-mailing-list-daemon

Production

HébergementHeroku
CaractéristiquesApp rec-mailling-lists-daemon sur appartenant à l'utilisateur [email protected]
Resources
  • Domaine Google Apps Gadz.org
  • Utilisateur RabbitMQ : prod-mailing-list-daemon

Dépendances extérieures

API Google

Redis pour être stateless (stockage des token de l'api Google)

Déploiement

Configuration

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

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

default: &default
  application_name: GoogleDirectoryDaemon-test
  application_id: gdd

  authorizer: DefaultAuthorizer

  admin_user_id: my.user@my_org.com
  message_handler_map:
    request.gapps.create: DefaultMessageHandler

  rabbitmq_host: localhost
  rabbitmq_port: 5672
  rabbitmq_vhost: /
  rabbitmq_queue_name: gdirdaemon
  rabbitmq_deferred_time: 1800000
  rabbitmq_max_attempts: 48
  exchange_name: exchange
  rabbitmq_user: my_user
  rabbitmq_password: P4ssWord

  log_routing_key:"logging.key"
 
  logger_level: DEBUG


development:
  <<: *default

test:
  <<: *default

production:
  <<: *default

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

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

Exemple : GMLD_RABBITMQ_HOST

L'environnement utilisé est défini par la variable d'environnement GOOGLE_DIRECTORY_DAEMON_ENV et à pour valeur "development" par défaut

La variable logger_level permet de définir la verbosité des logs. Les valeurs autorisées sont :

Pour fonctionner les API google on besoin d'un json appelé client_secret.json.

Ce fichier est stocké dans le dossier secrets/

Il est également possible de stocker le JSON dans la variable d'environnement GMLD_GOOGLE_CLIENT_SECRET

Si la variable d'environnement REDIS_URL est définie l'appli stockera les token de connexion dans le Redis, sinon ils  seront stocké dans secrets/tokens.yaml

Arret / Démarage

Sur Heroku :

Suivre la procédure Démarrer/Arrêter une application sur Heroku

En local :

Lancer l'executable bin/worker pour démarrer le service

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

Accéder aux Logs

Suivre la procédure Accéder aux logs d'une application Heroku

Installation

Guide d'installation du service

Infos pour les Dev'

Notifications générées

Clé de routageQuand ?Contenu du messageExemple de contenu
notify.monservice.ressource.statusQu'est ce que cette notification signifie ? Quel est le nouvel tat ?Quels sont les informations contenues dans ce message ?

 

 

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

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
request.unautreservice.ressource.actionun commentaire qui pourrait aider les autres dev a comprendre pourquoi cet appel a un autre service est fait

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.mailinglist.updateCrée ou met à jour la liste de diffusion pour atteindre l'état spécifié

 

{   
   "$schema":"http://json-schema.org/draft-04/schema#",
   "title":"Mailling list creation message",
   "type":"object",
   "properties":{   
      "name":{   
         "type":"string",
         "description":"Name of the mailling list"
      },
      "primary_email":{   
         "type":"string",
         "description":"Primary email address used to create the mailling list"
      },
      "description":{   
         "type":"string",
         "description":"Description of the mailling list"
      },
      "aliases":{   
         "type":"array",
         "description":"Mailling list email aliases",
         "items":{   
            "type":"string"
         }
      },
      "members":{   
         "type":"array",
         "description":"List of members email address",
         "items":{   
            "type":"string"
         }
      },
      "message_max_bytes_size":{   
         "type":"integer",
         "description":"Message maximum size in bytes. Default to 3MB",
         "default":3145728
      },
      "object_tag":{   
         "type":"string",
         "description":"Tag in front of object. ex: [me211]"
      },
      "message_footer":{   
         "type":"string",
         "description":"Message appended to the bottom of each message"
      },
      "is_archived":{   
         "type":"boolean",
         "description":"Defines if messages archive is activated for this mailling list",
         "default":false
      },
      "distribution_policy":{   
         "enum":[   
            "open",
            "closed",
            "moderated"
         ],
         "default":"closed",
         "description":"open: Anyone can post to the list;closed: Only members can post to the list; moderated: All message shave to be approved by a moderator"
      }
   },
   "additionalProperties":true,
   "required":[   
      "name",
      "primary_email"
   ]
}

 

{  
   "name":"PouetList3",
   "primary_email":"[email protected]",
   "description":"Liste de test de Karine",
   "aliases":[  
      "[email protected]"
   ],
   "members":[  
      "[email protected]",
      "[email protected]",
      "[email protected]",
      "[email protected]",
      "[email protected]"
   ],
   "message_max_bytes_size":500,
   "object_tag":"Test Message Header",
   "message_footer":"Test Message Footer",
   "is_archived":true,
   "distribution_policy":"open"
}
request.mailinglist.deleteSupprime la mailing listLa clé mailling_list_key
{  "mailling_list_key":"[email protected]",
}

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

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
notify.unautreservice.ressource.statusExpliquez ce que le service va faire quand on appel cette action

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

 

 

{  
   "name":"PouetList3",
   "primary_email":"[email protected]",
   "description":"Liste de test de Karine",
   "aliases":[  
      "[email protected]"
   ],
   "members":[  
      "[email protected]",
      "[email protected]",
      "[email protected]",
      "[email protected]",
      "[email protected]"
   ],
   "message_max_bytes_size":500,
   "object_tag":"Test Message Header",
   "message_footer":"Test Message Footer",
   "is_archived":true,
   "distribution_policy":"open"
}