Module alemca
Le module alemca
permet d'interagir avec le service Alemca. Il s'agit d'un module par défaut nommé alemca
. Il expose plusieurs fonctions pour écrire des messages, compresser des données, gérer les connexions et manipuler des commandes.
Pour l'importer il faut utiliser la déclaration suivante :
Configuration
Le module alemca
nécessite une configuration spécifique pour fonctionner. Cette configuration est définie dans le fichier de configuration de l'agent.
Pour la configuration voici un exemple de toutes les options possibles :
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.
Fonctions Lua
Tableau 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" |
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 :
true
si 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 :
true
si 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 :
true
si 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 :
true
si 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 :
true
si 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. Sifalse
ou 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 :
true
si 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 :
true
si 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 :
true
si 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é.
nil
et 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é.
nil
et 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é.
nil
et 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é.
nil
et un message d'erreur en cas d'échec.
local cfg, err = alemca.get_cconfig("my_entity")
if cfg then
for key, value in pairs(cfg) do
print("Config:", key, "=", value)
end
else
print("Error:", err)
end
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 Alemca.alemca.type
: Retourne le type de l'instance Alemca, contante aalemca
.