Diagnostiquer le module IoT¶
Objectif : vérifier que le module IoT est sain et savoir où chercher quand il
ne l'est pas.
Ce que vous allez apprendre : le diagnostic Forge IoT. La commande
forge iot:doctor vérifie l'ensemble (paquet, configuration, API, base, broker).
Ce starter expose en JSON son sous-ensemble non invasif, les contrôles qui
ne touchent ni la base ni le broker, directement dans l'application.
Dernier palier du niveau avancé de la progression IoT, après
Le subscriber MQTT.
Ce que ce starter montre¶
- l'appel des vérifications non invasives du diagnostic :
check_package_importable: le paquet est installé,check_config_loadable: la configuration se charge,check_http_api_registrable: l'API HTTP peut être branchée ;
- un statut global
healthy+ le détail de chaque contrôle, en JSON.
Le diagnostic complet (table en base, connexion broker) reste la commande
forge iot:doctor.
Classes Forge utilisées¶
| Classe / fonction | Rôle dans ce starter | Référence |
|---|---|---|
check_package_importable / check_config_loadable / check_http_api_registrable |
Vérifications de diagnostic non invasives. | Forge IoT : doctor |
forge iot:doctor (CLI) |
Diagnostic complet (avec --db, --mqtt). |
Forge IoT : doctor |
Tester¶
Ouvrez https://localhost:8000/iot-doctor : la réponse JSON donne healthy et la
liste des contrôles avec leur statut. Pour le diagnostic complet, en ligne de
commande :
forge iot:doctor # config + paquet + API
forge iot:doctor --db # + vérifie la table iot_events
forge iot:doctor --mqtt # + teste la connexion au broker
Le contrôleur¶
Créez le fichier ci-dessous, complet et copiable tel quel.
# mvc/controllers/iot_doctor_controller.py
from core.http.request import Request
from core.http.response import Response
from core.mvc.controller.base_controller import BaseController
from forge_mvc_iot.cli.doctor import (
check_config_loadable,
check_http_api_registrable,
check_package_importable,
)
# Vérifications sûres : aucune ne touche la base ni le broker.
_SAFE_CHECKS = (
check_package_importable,
check_config_loadable,
check_http_api_registrable,
)
class IotDoctorController(BaseController):
"""Starter pédagogique : diagnostic IoT non invasif exposé en JSON."""
@staticmethod
def index(request: Request) -> Response:
checks = []
for check in _SAFE_CHECKS:
result = check()
checks.append({
"status": result.status,
"label": result.label,
"detail": result.detail,
})
healthy = all(c["status"] == "ok" for c in checks)
return Response.json({"healthy": healthy, "checks": checks})
Comprendre ce code¶
- On n'appelle que les contrôles sûrs : aucun ne touche la base ni le broker,
donc la route reste rapide et sans effet de bord. - Chaque contrôle renvoie un
status, unlabelet undetail: on les expose
tels quels. - Pour les contrôles invasifs (table, broker), on délègue à la CLI
forge iot:doctor, qui les active explicitement via--db/--mqtt.
La route¶
Déclarez la route dans mvc/routes.py, à l'intérieur du groupe public.
# mvc/routes.py
from mvc.controllers.iot_doctor_controller import IotDoctorController
with router.group("", public=True) as public:
public.add("GET", "/iot-doctor", IotDoctorController.index, name="iot_doctor_index")
À retenir¶
forge iot:doctordiagnostique le module ; ses contrôles non invasifs sont
réutilisables en application.- Un diagnostic sépare le sûr (config, paquet) de l'invasif (base,
broker) : on n'effleure l'infrastructure que sur demande. - Savoir diagnostiquer fait partie de l'exploitation d'un module en production.
Après ce starter¶
Vous avez terminé le niveau avancé et toute la progression IoT : contrat,
subscriber temps réel, diagnostic. Faites le point dans le bilan du niveau.