Skip to main content
scripts/fireflo est la ligne de commande de l’opérateur. Il parle à trois choses différentes selon le verbe, et savoir laquelle est l’essentiel pour savoir l’utiliser.
show lit la base de données, ce qui n’est pas la même chose que ce que fait la passerelle. En mode fichier, il ne lit pas du tout ces tables ; en mode base de données, il détient un instantané en cache et le relit à un poll.Pour ce qui est réellement en vigueur — y compris si la whitelist a bien été chargée — utilisez health.

Base de données et hors ligne

info et validate n’ont pas besoin du drapeau d’activation d’écriture. Lire la version du schéma ne change rien, et exiger un drapeau avant de pouvoir regarder serait un piège au milieu d’un incident.

bootstrap

Écrit le minimum dont une nouvelle base a besoin pour démarrer : une table de routage default, une table MESSAGE vide pour qu’un fournisseur y aille, un listener sur 27777, et un login SMPP dont il génère et imprime le mot de passe une fois. Il n’écrit rien d’autre à dessein — pas de fournisseur, car il faut un hôte et des identifiants que personne ne peut deviner ; pas de tarifs, car un prix inventé facturerait silencieusement là où un prix absent apparaît sans tarif. Les deux absences sont nommées dans la sortie finale.
bootstrap refuse dès qu’il trouve une table de routage, un worker ou un login, donc il ne peut pas écraser un déploiement en marche. Aucun drapeau ne l’y force.

import

Les sujets sont all (défaut), rates, routing, credentials. Drapeaux : --dry-run, --replace, --replace-filters, --prune, --rates-file, --routing-file, --currency. Faites le dry run et lisez-le. Il classe chaque scope de tarif comme un coût fournisseur ou un prix compte et nomme ceux qu’il ne peut classer ni l’un ni l’autre — c’est ainsi qu’un scope qui se chargera et ne correspondra silencieusement à rien est attrapé avant que ce soit fait.
Les credentials ont un refus que les autres n’ont pas. Un import qui ne produit aucun credential utilisable est refusé inconditionnellement, drapeau ou pas. Un app_credential vide plus FIREFLO_CONFIG_SOURCE=db refuse chaque bind et chaque appel REST d’un seul coup, et rien dans les logs ne nomme la cause.
Codes de sortie : 0 OK, 1 la migration a échoué, 2 refusé sans rien toucher — donc un pipeline de déploiement peut distinguer un drapeau manquant d’une migration cassée.

show

whitelist imprime les quatre grilles dans l’ordre où elles s’appliquent, puis ce qui est approuvé. rejected est ce qui a été refusé dans les dernières 24 heures, et pourquoi.

Envoyer un message

Passe par l’API HTTP exactement comme le ferait un client. Nécessite FIREFLO_SEND_LOGIN et FIREFLO_SEND_PASSWORD.

Opérationnel

version demande à la passerelle plutôt qu’aux fichiers sur disque — un artefact qui a été construit mais dans lequel on n’a jamais redémarré est toute la raison de demander. verify vérifie dans l’ordre qui rend le premier échec informatif : l’artefact est complet, Java est assez récent, le port de message répond, le port opérationnel est en accord avec la configuration choisie, et les deux tokens sont vraiment séparés. Il termine en disant s’il peut envoyer, ce qui n’est pas la même question que de savoir s’il tourne.
verify code de sortie 4 signifie que le déploiement est sain mais que les propres données de cette installation ne le sont pas — par exemple rien n’est configuré vers quoi router. 0 OK, 1 échec, 2 refusé ou mal utilisé.

Crédit

Retourne le crédit prépayé RESERVED non dépensé pour que le prochain message relise le solde.
C’est le seul élément d’état runtime que reload ne peut pas reconstruire. Le crédit est distribué par blocs et reste dépensable jusqu’à utilisation, donc corriger un solde à la main ne prend pas effet tant que ceci n’a pas tourné. Cela ne retire rien — le bloc est immédiatement réservable à nouveau.

Files d’attente

Liste les messages en attente, pas juste combien — compte, produit, destination, nombre de tentatives et âge. Répond à « à qui est ce trafic » quand une file est profonde. En lecture seule : rien n’est retiré d’une file et rien n’est réordonné. Par défaut 20 par file, maximum 500. Il n’y a pas de texte de message dans la sortie, selon la même règle qui le tient hors des enregistrements d’appel par défaut.

Usage et rétention

usage purge refuse tout le run si un jour qu’il supprimerait n’a pas de rollup, et nomme les jours. Pas un avertissement — supprimer un jour non résumé détruit l’enregistrement de consommation de façon permanente, sans que rien puisse le reconstruire. Nécessite FIREFLO_CDR_PURGE=true.rollup est délibérément une commande séparée. Une purge qui rollup silencieusement d’abord signifierait qu’un bug de rollup est découvert par la commande qui supprime les preuves.

Connexions

Les IDs de session viennent de fireflo health. C’est le compteur propre du listener, donc ils entrent en collision entre listeners et redémarrent avec la passerelle.
disconnect met fin à une connexion ; il ne retire pas la permission. Un client sain se rebind en quelques secondes sauf si vous désactivez aussi son login.
Les captures contiennent le contenu du message et les numéros de destination. Elles sont bornées et uniquement en mémoire : la capture s’arrête d’elle-même et est jetée quinze minutes plus tard, téléchargée ou non. Cela remplace le fait d’activer log.pdus pour un worker entier, qui écrivait les PDUs de chaque session dans un fichier de log partagé.

Les six verbes de contrôle

Purger les données d’exemple

purge seed exécute le script de descente apparié et rien d’autre. Il n’y a pas de recherche des choses qui ressemblent à des données de test, parce que sur une base de configuration, c’est comme cela qu’on supprime un client. --reset-database vide chaque table, en revenant à l’état juste après db migrate. Il refuse sauf si FIREFLO_DB_RESET=true, refuse tant que la passerelle est joignable, et vous demande de taper le nom de la base.

Environnement

Voir Variables d’environnement pour la liste complète, et Le endpoint opérationnel pour les deux tokens.