Module alemca
Le module alemca permet d'interagir avec le service Alemca. Il est importé via :
Import
Configuration YAML
Le module alemca est chargé par défaut et ne nécessite pas de configuration pour les fonctionnalités de base. La configuration YAML ci-dessous est optionnelle et permet de définir des destinations personnalisées pour la publication de messages :
iot:
alemca: # configuration de la connexion à alemca
max_cache_size: 1024 # taille maximum du cache en octets
destinations: # destinations des messages
- name: "destination_name" # nom de la destination
exchange: "destination_name" # nom de l'échange
routing_key: "destination_name" # clé de routage
queue_not_durable: false # file non durable
exchange_type: "direct" # type d'échange
Détails de la configuration
- max_cache_size : Taille maximum du cache en octets. Si le cache dépasse cette taille, les messages les plus anciens seront supprimés.
- destinations : Liste des destinations des messages. Chaque destination doit avoir un nom, un échange, une clé de routage, et d'autres options comme la durabilité de la file et le type d'échange.
- name : Nom de la destination. Utilisé pour identifier la destination dans le code Lua.
- exchange : Nom de l'échange. Utilisé pour publier des messages.
- routing_key : Clé de routage. Utilisée pour diriger les messages vers la bonne file d'attente.
- queue_not_durable : Indique si la file d'attente est non durable. Si
true, la file d'attente ne sera pas persistée après un redémarrage. - exchange_type : Type d'échange. Peut être
direct,fanout,topic, ouheaders. Définit comment les messages sont routés vers les files d'attente.
API Lua
Liste des fonctions
| Fonction | Signature Lua | Rôle | Retour (succès) | Retour (échec) |
|---|---|---|---|---|
write |
bool, err = alemca.write(routingKey, payload [, headers]) |
Publie immédiatement payload sur la queue routingKey (exchange et routingKey identiques). |
true, nil |
nil, "msg" |
writebatch |
bool, err = alemca.writebatch(payload) |
Ajoute payload au cache disque amqp.cache. |
true, nil |
nil, "msg" |
sendbatch |
bool, err = alemca.sendbatch(routingKey [, unique=false [, compress=false [, headers]]]) |
Vide le cache sur routingKey. unique=true : envoie ligne par ligne. compress=true : gzip. |
true, nil |
nil, "msg" |
compress |
compressed, err = alemca.compress(str) |
Retourne str compressé (gzip + base64). |
string, nil |
nil, "msg" |
status |
connected, err = alemca.status() |
Vérifie la connexion AMQP. | true, nil |
false, "msg" |
getbatch |
len, err = alemca.getbatch() |
Nombre de lignes dans amqp.cache. |
n, nil |
nil, "msg" |
clearbatch |
bool, err = alemca.clearbatch() |
Purge le cache. | true, nil |
nil, "msg" |
read |
msg, err = alemca.read(queueName) |
Bloque max 5 s et renvoie le prochain message de queueName. |
string, nil |
nil, "msg" |
read (ack) |
msg, tag, err = alemca.read(queueName, true) |
Lit un message avec accusé de réception différé. | string, tag, nil |
nil, nil, "msg" |
ack |
bool, err = alemca.ack(tag) |
Accuse réception d’un message précédemment lu. | true, nil |
nil, "msg" |
nack |
bool, err = alemca.nack(tag [, requeue]) |
Rejette un message, avec ou sans réinjection dans la file. | true, nil |
nil, "msg" |
writemetrics |
err = alemca.writemetrics(metrics [, types [, units [, tags [, ident]]]]) |
Convertit la table metrics en JSON et l’écrit dans metrics.cache. |
nil |
"msg" |
pushmetrics |
err = alemca.pushmetrics() |
Envoie le contenu de metrics.tmp vers data_metrics_ex. |
nil |
"msg" |
newcommand |
bool, err = alemca.newcommand(cmdTable) |
Planifie l’exécution différée d’un script (Lua) distant. | true, nil |
nil, "msg" |
get_entity |
entity, err = alemca.get_entity([ident]) |
Récupère l’entité Core. | luaTable, nil |
nil, "msg" |
get_children |
children, err = alemca.get_children([ident]) |
Récupère les enfants d’une entité. | luaTable, nil |
nil, "msg" |
get_attribute |
attrs, err = alemca.get_attribute([ident]) |
Récupère les attributs d’une entité. | luaTable, nil |
nil, "msg" |
get_config |
cfg, err = alemca.get_config([ident]) |
Récupère la configuration d'une entité. | luaTable, nil |
nil, "msg" |
write_event |
bool, err = alemca.write_event(eventTable) |
Envoie un événement au service Alemca. | true, nil |
nil, "msg" |
create_entity |
json, err = alemca.create_entity(entityTable[, ident]) |
Crée une nouvelle entité enfant. | string, nil |
nil, "msg" |
delete_entity |
bool, err = alemca.delete_entity([ident]) |
Supprime une entité. | true, nil |
nil, "msg" |
create_attribute |
bool, err = alemca.create_attribute(ident, name, value) |
Crée ou met à jour un attribut. | true, nil |
nil, "msg" |
delete_attribute |
bool, err = alemca.delete_attribute(ident, name) |
Supprime un attribut. | true, nil |
nil, "msg" |
create_config |
bool, err = alemca.create_config([ident,] configTable) |
Crée ou met à jour la configuration. | true, nil |
nil, "msg" |
delete_config |
bool, err = alemca.delete_config([ident[, configKey]]) |
Supprime la configuration. | true, nil |
nil, "msg" |
| Champs | alemca.ident, alemca.token, alemca.name, alemca.type |
Accès direct aux métadonnées chargées. | – | – |
alemca.write(routing_key, message[, headers])
Publie un message à Alemca.
- Paramètres :
routing_key(string) : La clé de routage pour le message. ()message(string) : Le message à envoyer.-
headers(table, optionnel) : Un tableau contenant des en-têtes supplémentaires pour le message. -
Retour :
truesi l'envoi est réussi, sinon retourne une erreur.
alemca.writebatch(message [, batchName])
Écrit un lot de messages dans le cache. Sépare les messages par des retours à la ligne. Si le cache dépasse la taille maximale, les messages les plus anciens sont supprimés.
- Paramètres :
message(string) : Le message à ajouter au cache.-
batchName(string, optionnel) : Nom du lot de messages. Si non spécifié, le nom par défaut est utilisé (amq.cache). -
Retour :
truesi l'écriture est réussie, sinon retourne une erreur.
alemca.writebatch('{"ts":1680000000,"v":12}')
alemca.writebatch('{"ts":1680000005,"v":13}', "temp_batch.cache")
-- plus tard …
local ok, err = alemca.sendbatch("uc.raw.series", false, true)
assert(ok, err)
alemca.sendbatch(routing_key[, send_mode[, compress_mode[, headers [, batchName]]]])
Envoie un lot de messages à Alemca.
- Paramètres :
routing_key(string) : La clé de routage pour les messages.send_mode(boolean, optionnel) : Sitrue, tous les messages du cache sont envoyés en un a un ; sinon, ils sont envoyés en une seule fois (séparé par un retour a la ligne) (défaut :false).compress_mode(boolean, optionnel) : Sitrue, les messages sont compressés avant l'envoi (défaut :false).headers(table, optionnel) : Un tableau d'en-têtes supplémentaires pour les messages.-
batchName(string, optionnel) : Nom du lot de messages. Si non spécifié, le nom par défaut est utilisé (amq.cache). -
Retour :
truesi l'envoi est réussi, sinon retourne une erreur.
alemca.writebatch('{"ts":1680000000,"v":12}')
alemca.writebatch('{"ts":1680000005,"v":13}', "temp_batch.cache")
-- plus tard …
local ok, err = alemca.sendbatch("uc.raw.series", true)
assert(ok, err)
-- plus tard …
local ok, err = alemca.sendbatch("uc.raw.series", false, true, nil, "temp_batch.cache")
assert(ok, err)
alemca.compress(message)
Compresse un message en utilisant l'algorithme GZIP.
- Paramètres :
-
message(string) : Le message à compresser. -
Retour :
- Le message compressé ou une erreur.
alemca.status()
Retourne le statut de la connexion à Alemca.
-
Paramètres : Aucun
-
Retour :
truesi connecté, sinon retourne une erreur.
alemca.getbatch()
Retourne la longueur du lot de messages en cache.
-
Paramètres : Aucun
-
Retour :
- La longueur du lot ou une erreur.
alemca.clearbatch()
Efface le lot de messages en cache.
-
Paramètres : Aucun
-
Retour :
truesi l'effacement est réussi, sinon retourne une erreur.
alemca.read(routing_key[, ack])
Lit un message depuis Alemca.
- Paramètres :
routing_key(string) : La clé de routage du message à lire.-
ack(boolean, optionnel) : Sitrue, retourne un tag pour pouvoir "ack" le message après traitement. Sifalseou omis, le message est lu sans accusé de réception. -
Retour :
- Mode simple : message, nil
- Mode ack : message, tag, nil
- Échec : nil, "msg" (ou 3e valeur en mode ack)
local msg, err = alemca.read("alerts")
if msg then
print("ALERT:", msg)
else
print("no alert:", err)
end
Mode ack:
local msg, tag, err = alemca.read("alerts", true)
if msg then
print("ALERT:", msg)
else
print("no alert:", err)
end
alemca.ack(tag) -- accuse réception du message
alemca.ack(tag)
Accuse réception d'un message précédemment lu.
- Paramètres :
-
tag(string) : Le tag du message à accuser réception. -
Retour :
- status ou une erreur.
local tag = "12345" -- tag obtenu lors de la lecture du message
local ok, err = alemca.ack(tag)
assert(ok, err)
alemca.nack(tag)
Accuse réception d'un message précédemment lu, mais indique qu'il n'a pas été traité correctement.
- Paramètres :
tag(string) : Le tag du message à accuser réception.- Retour :
- status ou une erreur.
local tag = "12345" -- tag obtenu lors de la lecture du message
local ok, err = alemca.nack(tag)
assert(ok, err)
alemca.writemetrics(metrics[, types[, units[, tags[, ident]]]])
Écrit des métriques dans le cache.
- Paramètres :
metrics(table) : Un tableau contenant les métriques.types(table, optionnel) : Un tableau indiquant les types de métriques.units(table, optionnel) : Un tableau indiquant les unités de chaque métrique.tags(table, optionnel) : Un tableau de tags optionnels à inclure.-
ident(string, optionnel) : L'identifiant à utiliser (par défaut, celui de l'instance Alemca). -
Retour :
truesi l'écriture est réussie, sinon retourne une erreur.
alemca.writemetrics(
{
{ cpu_usage = 75 },
{ memory_usage = 2048 },
{ disk_space = 50000 }
},
{
{ cpu_usage = "percent" },
{ memory_usage = "MB" },
{ disk_space = "MB" }
},
{
cpu_usage = "percent",
memory_usage = "MB",
disk_space = "MB"
},
{ environment = "production", region = "us-west" }
)
alemca.pushmetrics()
Force l'envoie les métriques depuis le cache vers Alemca. Sinon elles sont envoyées automatiquement à intervalle régulier.
-
Paramètres : Aucun
-
Retour :
truesi l'envoi est réussi, sinon retourne une erreur.
alemca.newcommand(command)
Crée une nouvelle commande pour Alemca.
- Paramètres :
-
command(table) : Un tableau représentant la commande à exécuter. Les champs requis incluentscript,job_ident,variables,constants,attributes,scheduled_time, etexpire_time. -
Retour :
truesi la commande est créée avec succès, sinon retourne une erreur.
local cmd = {
script = "reboot.lua",
job_ident = "reboot-2025-04-30-02h",
variables = { delay = 10 },
constants = {},
attributes = { reason = "nightly-maintenance" },
scheduled_time = os.time() + 3600, -- dans 1 h
expire_time = os.time() + 86400, -- invalide après 24 h
cancel = ""
}
local ok, err = alemca.newcommand(cmd)
assert(ok, err)
alemca.get_entity([ident])
Récupère l'entité Core.
- Paramètres :
-
ident(string, optionnel) : L'identifiant de l'entité à récupérer. Si non spécifié, l'identifiant de l'instance Alemca est utilisé. -
Retour :
- Un tableau Lua représentant l'entité.
nilet un message d'erreur en cas d'échec.
local entity, err = alemca.get_entity("my_entity")
if entity then
print("Entity:", entity.name)
else
print("Error:", err)
end
alemca.get_children([ident])
Récupère les enfants de l'entité Core.
- Paramètres :
-
ident(string, optionnel) : L'identifiant de l'entité dont on veut récupérer les enfants. Si non spécifié, l'identifiant de l'instance Alemca est utilisé. -
Retour :
- Un tableau Lua contenant les enfants de l'entité.
nilet un message d'erreur en cas d'échec.
local children, err = alemca.get_children("my_entity")
if children then
for _, child in ipairs(children) do
print("Child:", child.name)
end
else
print("Error:", err)
end
alemca.get_attribute([ident])
Récupère les attributs de l'entité Core.
- Paramètres :
-
ident(string, optionnel) : L'identifiant de l'entité dont on veut récupérer les attributs. Si non spécifié, l'identifiant de l'instance Alemca est utilisé. -
Retour :
- Un tableau Lua contenant les attributs de l'entité.
nilet un message d'erreur en cas d'échec.
local attrs, err = alemca.get_attribute("my_entity")
if attrs then
for key, value in pairs(attrs) do
print("Attribute:", key, "=", value)
end
else
print("Error:", err)
end
alemca.get_config([ident])
Récupère la configuration de l'entité Core.
- Paramètres :
-
ident(string, optionnel) : L'identifiant de l'entité dont on veut récupérer la configuration. Si non spécifié, l'identifiant de l'instance Alemca est utilisé. -
Retour :
- Un tableau Lua contenant la configuration de l'entité.
nilet un message d'erreur en cas d'échec.
local cfg, err = alemca.get_config("my_entity")
if cfg then
for key, value in pairs(cfg) do
print("Config:", key, "=", value)
end
else
print("Error:", err)
end
alemca.write_event(event_table)
Envoie un événement au service Alemca.
- Paramètres :
-
event_table(table) : Un tableau Lua contenant les données de l'événement. -
Retour :
truesi l'envoi est réussi.nilet un message d'erreur en cas d'échec.
local ok, err = alemca.write_event({
type = "alert",
severity = "warning",
message = "Temperature exceeded threshold",
value = 85.5
})
assert(ok, err)
alemca.create_entity(entity_table[, parent_ident])
Crée une nouvelle entité enfant dans le service Alemca.
- Paramètres :
entity_table(table) : Un tableau Lua contenant les données de l'entité (name, type, comment, etc.).-
parent_ident(string, optionnel) : L'identifiant de l'entité parente. Si non spécifié, l'identifiant de l'instance Alemca est utilisé. -
Retour :
- Le JSON de l'entité créée en cas de succès.
nilet un message d'erreur en cas d'échec.
local result, err = alemca.create_entity({
name = "Capteur Temperature",
type = "sensor",
comment = "Capteur de température salle serveur"
}, "parent_ident")
if result then
print("Entity created:", result)
else
print("Error:", err)
end
alemca.delete_entity([ident])
Supprime une entité du service Alemca.
- Paramètres :
-
ident(string, optionnel) : L'identifiant de l'entité à supprimer. Si non spécifié, l'identifiant de l'instance Alemca est utilisé. -
Retour :
truesi la suppression est réussie.nilet un message d'erreur en cas d'échec.
alemca.create_attribute(ident, attribute_name, value)
Crée ou met à jour un attribut pour une entité dans le service Alemca.
- Paramètres :
ident(string) : L'identifiant de l'entité.attribute_name(string) : Le nom de l'attribut à créer ou mettre à jour.-
value(any) : La valeur de l'attribut (string, number, boolean, ou table). -
Retour :
truesi la création/mise à jour est réussie.nilet un message d'erreur en cas d'échec.
local ok, err = alemca.create_attribute("my_entity", "location", "Salle A")
assert(ok, err)
-- Avec une valeur complexe
local ok, err = alemca.create_attribute("my_entity", "config", {
threshold = 80,
unit = "celsius"
})
assert(ok, err)
alemca.delete_attribute(ident, attribute_name)
Supprime un attribut d'une entité dans le service Alemca.
- Paramètres :
ident(string) : L'identifiant de l'entité.-
attribute_name(string) : Le nom de l'attribut à supprimer. -
Retour :
truesi la suppression est réussie.nilet un message d'erreur en cas d'échec.
alemca.create_config([ident,] config_table)
Crée ou met à jour la configuration d'une entité dans le service Alemca.
- Paramètres :
ident(string, optionnel) : L'identifiant de l'entité. Si non spécifié, l'identifiant de l'instance Alemca est utilisé.-
config_table(table) : Un tableau Lua contenant les données de configuration. -
Retour :
truesi la création/mise à jour est réussie.nilet un message d'erreur en cas d'échec.
local ok, err = alemca.create_config("my_entity", {
polling_interval = 60,
retry_count = 3,
enabled = true
})
assert(ok, err)
-- Sans spécifier l'ident (utilise l'ident par défaut)
local ok, err = alemca.create_config({
polling_interval = 60
})
assert(ok, err)
alemca.delete_config([ident[, config_key]])
Supprime la configuration d'une entité dans le service Alemca.
- Paramètres :
ident(string, optionnel) : L'identifiant de l'entité. Si non spécifié, l'identifiant de l'instance Alemca est utilisé.-
config_key(string, optionnel) : La clé de configuration à supprimer. Si non spécifié, supprime toute la configuration. -
Retour :
truesi la suppression est réussie.nilet un message d'erreur en cas d'échec.
-- Supprimer une clé de configuration spécifique
local ok, err = alemca.delete_config("my_entity", "old_config_key")
assert(ok, err)
-- Supprimer toute la configuration d'une entité
local ok, err = alemca.delete_config("my_entity")
assert(ok, err)
Champs Lua associés
Envoie un événement au service Alemca.
- Paramètres :
-
eventTable(table) : Un tableau Lua contenant les données de l'événement. -
Retour :
truesi l'envoi est réussi, sinon retourne une erreur.
local ok, err = alemca.write_event({
type = "alert",
severity = "high",
message = "Temperature exceeded threshold",
value = 85.5
})
assert(ok, err)
alemca.create_entity(entityTable[, parentIdent])
Crée une nouvelle entité enfant dans le service Alemca.
- Paramètres :
entityTable(table) : Un tableau Lua contenant les données de l'entité à créer.-
parentIdent(string, optionnel) : L'identifiant de l'entité parente. Si non spécifié, utilise l'identifiant de l'instance Alemca. -
Retour :
- Le JSON de l'entité créée en cas de succès.
nilet un message d'erreur en cas d'échec.
local result, err = alemca.create_entity({
name = "Capteur-01",
type = "sensor",
comment = "Capteur de température"
})
if result then
print("Entité créée : " .. result)
else
print("Erreur : " .. err)
end
alemca.delete_entity([ident])
Supprime une entité du service Alemca.
- Paramètres :
-
ident(string, optionnel) : L'identifiant de l'entité à supprimer. Si non spécifié, utilise l'identifiant de l'instance Alemca. -
Retour :
truesi la suppression est réussie.nilet un message d'erreur en cas d'échec.
alemca.create_attribute(ident, attributeName, value)
Crée ou met à jour un attribut pour une entité dans le service Alemca.
- Paramètres :
ident(string) : L'identifiant de l'entité.attributeName(string) : Le nom de l'attribut à créer ou mettre à jour.-
value(any) : La valeur de l'attribut (peut être string, number, boolean ou table). -
Retour :
truesi la création/mise à jour est réussie.nilet un message d'erreur en cas d'échec.
local ok, err = alemca.create_attribute("my_entity", "temperature", 23.5)
assert(ok, err)
-- Avec une table comme valeur
local ok2, err2 = alemca.create_attribute("my_entity", "config", {
threshold = 30,
unit = "celsius"
})
assert(ok2, err2)
alemca.delete_attribute(ident, attributeName)
Supprime un attribut d'une entité dans le service Alemca.
- Paramètres :
ident(string) : L'identifiant de l'entité.-
attributeName(string) : Le nom de l'attribut à supprimer. -
Retour :
truesi la suppression est réussie.nilet un message d'erreur en cas d'échec.
alemca.create_config([ident,] configTable)
Crée ou met à jour la configuration d'une entité dans le service Alemca.
- Paramètres :
ident(string, optionnel) : L'identifiant de l'entité. Si non spécifié, utilise l'identifiant de l'instance Alemca.-
configTable(table) : Un tableau Lua contenant la configuration à créer ou mettre à jour. -
Retour :
truesi la création/mise à jour est réussie.nilet un message d'erreur en cas d'échec.
local ok, err = alemca.create_config("my_entity", {
polling_interval = 60,
retry_count = 3,
enabled = true
})
assert(ok, err)
-- Sans ident (utilise l'ident par défaut)
local ok2, err2 = alemca.create_config({
mode = "active"
})
assert(ok2, err2)
alemca.delete_config([ident[, configKey]])
Supprime la configuration (ou une clé spécifique) d'une entité dans le service Alemca.
- Paramètres :
ident(string, optionnel) : L'identifiant de l'entité. Si non spécifié, utilise l'identifiant de l'instance Alemca.-
configKey(string, optionnel) : La clé de configuration à supprimer. Si non spécifié, supprime toute la configuration. -
Retour :
truesi la suppression est réussie.nilet un message d'erreur en cas d'échec.
-- Supprimer une clé spécifique
local ok, err = alemca.delete_config("my_entity", "polling_interval")
assert(ok, err)
-- Supprimer toute la configuration
local ok2, err2 = alemca.delete_config("my_entity")
assert(ok2, err2)
Champs Lua associés
alemca.ident: Retourne l'identifiant de l'instance Alemca.alemca.token: Retourne le token de l'instance Alemca.alemca.name: Retourne le nom de l'instance du module.alemca.type: Retourne le type du module ("alemca").