lumnik. / scénarios Tous les scénarios · English

La GMAO est éteinte et le hub rend toujours les mêmes octets

Objectif Éteindre une GMAO remplacée sans perdre ses trente ans d'ordres de travail ni les lectures de conformité.

Une GMAO remplacée reste allumée pour quelques lectures de conformité par an. lumnik la lit une dernière fois, archive ce qu'il a lu, puis on éteint la machine.

cmms.sql
-- A retired CMMS: thirty years of work orders, all synthetic, generated the same way every time.
CREATE TABLE workorder (
  wonum       text PRIMARY KEY,
  assetnum    text NOT NULL,
  description text NOT NULL,
  status      text NOT NULL,
  reportdate  date NOT NULL,
  actfinish   date,
  failurecode text,
  remarks     text
);

INSERT INTO workorder
SELECT 'WO-' || lpad(n::text, 6, '0'),
       (ARRAY['T-114','T-115','P-207','P-208','C-031','V-412','G-002','K-090'])[1 + n % 8],
       (ARRAY['Inspection annuelle','Fuite huile','Remplacement joint','Surchauffe','Vibration anormale',
              'Contrôle isolement','Graissage','Déclenchement protection'])[1 + (n * 7) % 8],
       CASE WHEN n % 97 = 0 THEN 'CAN' ELSE 'CLOSE' END,
       date '1995-01-02' + (n * 3),
       date '1995-01-02' + (n * 3) + (n % 5),

… 4 lignes de plus

manifests/20-work-order.yaml
kind: Entityname: work_order_blabel: Ordre de travaildescription: "Thirty years of the retired CMMS's work orders, kept for compliance reads."scopes: [maintenance]match: [wonum]sources:  - table: t_zombie_workorder_b    map:      wonum: wonum      assetnum: assetnum      description: description      status: status      reportdate: reportdate      actfinish: actfinish      failurecode: failurecode      remarks: remarks
manifests/30-archive.yaml
# The final archive: one file, one name, delivered once. A second run is refused rather than# replacing what was delivered.apiVersion: apps.lumnik.io/v1kind: Exportmetadata:  name: scenario-zombie-archive-bspec:  scope: maintenance  source:    entity: work_order_b  columns: [wonum, assetnum, description, status, reportdate, actfinish, failurecode, remarks]  order: [wonum]  format:    kind: csv  destination:    kind: s3    bucket: archive    prefix: cmms    filename: work-orders-final.csv    region: us-east-1    endpoint: http://zombie-archive-b:9000    access_key_env: SCENARIO_ZOMBIE_B_S3_ACCESS    secret_key_env: SCENARIO_ZOMBIE_B_S3_SECRET  mode: snapshot
$ lm run get cb35afc0-b589-48f6-9c23-8fc463dfa536
ID        CONNECTOR          ENDPOINT   STATUS  IN  OUT  SKIPPED  DEAD-LETTERS  STARTED           ENDED             EVALUATED
cb35afc0  scenario-zombie-b  workorder  Failed  0   0    0        0             2026-11-03 19:11  2026-11-03 19:11  yes
✖ run failed: could not reach public.workorder (SQLSTATE 08001): host not resolved (UnknownHostException)

$ lm connector pause scenario-zombie-b
paused: scenario-zombie-b

$ lm connector list
NAME                             TYPE          TENANT  SCHED               WINDOW  STATUS     LAST RUN
scenario-zombie-b                jdbc-generic  1       * * * * * (paused)          Failed     2026-11-03 19:11
$ lm entity get work_order_b --filter wonum=WO-001234
WONUM      ASSETNUM  DESCRIPTION  STATUS  REPORTDATE  ACTFINISH   FAILURECODE  REMARKS                                    _CONFLICTS
WO-001234  P-207     Graissage    CLOSE   2005-02-20  2005-02-24               Intervention 1234 : aucun défaut constaté  {}

$ lm entity export work_order_b -o work-orders-after.csv
work_order_b: 438561 bytes written to work-orders-after.csv (sha256 6cfa21baedadc0b0321a9998f5fa6da5eded14a94b84f597b4527a3017292fc2)

$ lm export run scenario-zombie-archive-b --wait
Run           5cd65a1c-85a2-4df4-8b60-c0682dcf9eee
Export        scenario-zombie-archive-b
Entity        work_order_b
Scope         maintenance
Destination   s3
Status        Failed
Trigger       manual
Attempt       1
Started       2026-11-03 19:13:40
Ended         2026-11-03 19:13:40
Failure       collision
Reason        S3 destination: s3://archive/cmms/work-orders-final.csv already exists — refusing to overwrite a previously delivered artifact
• export run 5cd65a1c-85a2-4df4-8b60-c0682dcf9eee accepted — waiting for the hub to record its outcome
Error: export run 5cd65a1c-85a2-4df4-8b60-c0682dcf9eee failed (collision): S3 destination: s3://archive/cmms/work-orders-final.csv already exists — refusing to overwrite a previously delivered artifact

Limites

  • Un connecteur dont la source est éteinte échoue à chaque créneau jusqu'à sa mise en pause; le hub ne le met pas en pause de lui-même.
  • lm source jdbc discover cite encore le message du pilote.
  • La rétention du compartiment (verrouillage d'objet) relève du stockage, pas du hub.
  • GMAO et compartiment simulés; données synthétiques.

Maintenance · conformité

Une GMAO remplacée tourne encore.

Pour quelques lectures par an.

Une licence, une machine, et une seule personne qui sait la redémarrer.

GMAO simulée · données synthétiques

Le problème

Trente ans d'ordres de travail retiennent la machine.

  • 3 600 ordres, de 1995 à 2024.
  • Un audit peut citer n'importe lequel.
  • Éteindre, c'est perdre la réponse.

Rien n'est migré

La GMAO est lue telle qu'elle est.

  • Un compte en lecture seule.
  • Pas de reprise de données.
  • Aucune application à développer.

Ce qu'il a fallu écrire

filename: work-orders-final.csv
mode: snapshot

Une archive, un nom, livrée une fois.

Le scénario complet tient en 3 fichiers de déclaration, 63 lignes.

La preuve

Une seule empreinte.

  • L'instantané local.
  • Le reçu de l'export.
  • L'objet relu dans le compartiment.

SHA-256 6cfa21ba…92fc2, rejeu du 3 novembre 2026.

La machine éteinte

Le run suivant dit pourquoi il échoue.

lm run get
could not reach public.workorder (SQLSTATE 08001): host not resolved (UnknownHostException)

Une pause arrête le planning.

La limite

Le hub ne se met pas en pause tout seul.

  • Sans pause, chaque créneau échoue.
  • La rétention du compartiment relève du stockage.
  • Le message du pilote reste visible dans discover.

Essayer

Le scénario se rejoue de bout en bout.

GMAO, archive S3, extinction: chaque étape est publiée avec sa sortie.

Ce scénario tourne sur lumnik Open, gratuit et open source.

Essayer lumnik Open →