Documentation Utilisateur - API command
Introduction
L'API command
permet l'exécution distante de scripts Lua sur des équipements via un système de tâches (task
) et exécutions (job
).
Elle permet de déclencher des actions telles que redémarrages, mises à jour, configuration à distance, etc.
Concepts Clés
Task (Tâche)
Une tâche est une commande prête à être exécutée sur des équipements, composée :
- D’un nom et d’un script Lua (script
)
- De variables à fournir à l’exécution (variables_info
)
- D’options comme des constantes (constants
), notifications, ou signature
Exemple : Une tâche
demo_cmd
qui exécute le scriptdemo_cmd.lua
avec une URL et un hash de vérification.
Job (Exécution)
Un job est une exécution concrète d’une tâche sur un device (entity_ident
).
Chaque job garde une trace complète de son historique, avec une suite de statuts (ex: pending
, running
, terminated
, etc.).
API Endpoints
Lister les tâches
Headers
Lire une tâche
Créer un job
Body
{
"entity_ident": "<uuid_de_la_device>",
"variables": {
"url": "https://update.example.com/v1.bin",
"hash": "9a1b7f..."
},
"comment": "Commentaire libre"
}
Lire un job
Voir l’historique d’un job
Planifier un job
Inclure un champ scheduled_time
(timestamp Unix) lors de la création du job :
Annuler un job
Exemple Complet : Demo CMD
1. Définition de la tâche demo_cmd
{
"name": "demo_cmd",
"script": "demo_cmd.lua",
"variables_info": {
"firmware_url": {
"type": "string",
"alias": "URL"
},
"hash": {
"type": "string",
"alias": "SHA256"
}
},
"constants": {
"retry_count": 3
},
"allow_offline": true
}
2. Création d’un job associé
{
"entity_ident": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"variables": {
"url": "https://update.example.com/v1.2.3.bin",
"hash": "f87c0f4d5d75a1c8a..."
},
"comment": "Update firmware to v1.2.3"
}
3. Lecture du job
4. Historique typique du job
Statut | Description |
---|---|
initial |
Job créé |
pending |
En file d’attente |
edge_transmitted |
Transmis au device |
edge_started |
Début de l'exécution |
edge_running |
En cours de mise à jour |
edge_error |
Erreur durant l’exécution (si erreur) |
terminated |
Mise à jour terminée |
Notifications
L'API permet de configurer des notifications par email pour être alerté à chaque changement d'état d’un job.
Où définir les notifications ?
-
Au niveau de la tâche (
task
)
→ Les notifications définies ici s’appliqueront à tous les jobs créés à partir de cette tâche. -
Au niveau du job (
job
)
→ Ces paramètres sont additionnels à ceux définis dans la tâche.
Les listes sont cumulées. Si une tâche définit une adresse et le job en ajoute une autre, les deux recevront les notifications.
Champs disponibles
Champ | Type | Description |
---|---|---|
notification_mail_list |
Array<String> |
Emails à notifier |
notification_status_list |
Array<String> |
Statuts déclencheurs (ex: "terminated" , "edge_error" ) |
Exemple d’usage combiné
Dans la tâche :
"notification_mail_list": ["ops@company.com"],
"notification_status_list": ["edge_error", "terminated"]
Dans le job :
Effet cumulé :
- Statuts déclencheurs :
["edge_error", "terminated"]
- Emails notifiés :
- Lors d’un
edge_error
→ops@company.com
ettech@company.com
- Lors d’un
terminated
→ops@company.com
uniquement
Comprendre les ident
(Identifiants uniques)
Dans l’API command
, chaque ressource possède un identifiant universel (UUID
) propre à la plateforme ALEMCA.
On les retrouve dans les entités suivantes :
Entité | Champ | Rôle |
---|---|---|
Tâche | ident |
Identifie une tâche unique dans le système |
Job | ident |
Identifie une exécution particulière d’une tâche |
Appareil | entity_ident |
Identifie une device (cible d’un job) |
Client Racine | client_root |
Identifie le client maître auquel est lié l’équipement |
Remarque : Les identifiants sont uniques, opaques, et ne doivent pas être modifiés ou générés manuellement par l'utilisateur. Ils sont automatiquement assignés par la plateforme.
Exemple anonymisé
{
"task": {
"ident": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "demo_cmd"
},
"job": {
"ident": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"entity_ident": "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"
}
}
Commandes groupées & Groupes de jobs
L'API command
permet de créer des commandes groupées pour exécuter une tâche sur plusieurs devices simultanément.
Ces envois sont organisés sous forme de groupes permettant un suivi centralisé.
Méthodes d'envoi groupé
1. Envoi par liste de devices (ident_list
)
Body
{
"variables": {
"param1": "valeur",
"param2": "valeur"
},
"comment": "Demo lot 1",
"group_name": "demo",
"ident_list": [
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
]
}
2. Envoi par tag
Body
{
"variables": {
"param1": "valeur"
},
"comment": "Commandes sur tous les capteurs extérieurs",
"group_name": "capteurs_ext",
"tag": "outdoor_sensors"
}
Les jobs seront envoyés à tous les devices possédant le tag spécifié dans l’inventaire ALEMCA.
Groupes
Un groupe est un conteneur logique de jobs liés par un envoi commun (par ident_list ou tag).
- Un groupe est automatiquement créé si vous spécifiez un
group_name
. - Permet de retrouver tous les jobs exécutés dans le cadre de ce groupe.
Lister les groupes existants
Réponse
{
"items": [
{
"ident": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "test",
"created_user": "user@alemca.com"
},
...
]
}
Filtrer les jobs d’un groupe
Réponse
{
"items": [
{
"task": { "name": "demo_cmd" },
"group": { "name": "demo" },
"status": "terminated",
"entity_ident": "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz",
"response": "command sent"
},
...
]
}
Exemple d’usage
- Vous créez une tâche
demo_cmd
- Vous envoyez un job à 100 devices via
/jobs/list
avec ungroup_name
- Vous pouvez ensuite :
- Suivre chaque job individuellement
- Lister tous les jobs avec
GET /v3/commands/jobs?group_ident=...
Swagger API Commands
Pour plus d’informations détaillées et la liste complète des endpoints, consultez la documentation Swagger de l'API Commands.