docs: the collector contract described the machine-number defect as the rule
COLLECTOR-INTEGRATION.md told integrators that machinenumber maps to Asset.assetnumber and that a real value updates it on an existing PC. That is precisely the behaviour that returned 500 to every bay reporting a machine ShopDB already knew, and it is the document another site reads to build its reporter. Rewritten to say what the field is for: it identifies the machine, the PC keeps its hostname, and the number builds a controls link. Adds a section covering the claim-versus-handover rule and its quiet window, the alert gate defaulting off, and how a part-marker PC gets its own marker asset under the operation.
This commit is contained in:
@@ -198,7 +198,7 @@ a column.
|
|||||||
| Payload field | Type | Server behaviour (`apply_collector_payload`) |
|
| Payload field | Type | Server behaviour (`apply_collector_payload`) |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `hostname` (required) | string | Identity. Matches `Computer.hostname` (case-insensitive), then falls back to `Asset.assetnumber`. New asset created if no match. |
|
| `hostname` (required) | string | Identity. Matches `Computer.hostname` (case-insensitive), then falls back to `Asset.assetnumber`. New asset created if no match. |
|
||||||
| `machinenumber` | string | Business tag -> `Asset.assetnumber`. The placeholder `9999` and empty string are skipped; when skipped a new PC falls back to `assetnumber = hostname`. On an existing PC a real value updates `assetnumber`. |
|
| `machinenumber` | string | Identifies the MACHINE this PC drives, never the PC. A new PC always takes `assetnumber = hostname`, and an existing PC's `assetnumber` is left alone. The number resolves a machine asset and builds a PC -> machine `controls` relationship; an unknown number warns rather than creating a machine. The placeholder `9999` and empty string link nothing. See "Machine links" below. |
|
||||||
| `pctype` | string | `gea-shopfloor-*` imaging type -> `Computer.computertypeid` via the configurable `pctypemap` settings. Unmapped value -> warning, not error. |
|
| `pctype` | string | `gea-shopfloor-*` imaging type -> `Computer.computertypeid` via the configurable `pctypemap` settings. Unmapped value -> warning, not error. |
|
||||||
| `pcsubtype` | string | Accepted but not stored yet -> warning. |
|
| `pcsubtype` | string | Accepted but not stored yet -> warning. |
|
||||||
| `serialnumber` | string | `Asset.serialnumber`. |
|
| `serialnumber` | string | `Asset.serialnumber`. |
|
||||||
@@ -216,6 +216,46 @@ a column.
|
|||||||
Schema source of truth: `get_collector_schema` in `plugins/computers/plugin.py`.
|
Schema source of truth: `get_collector_schema` in `plugins/computers/plugin.py`.
|
||||||
If you change the payload, change it there and re-check this table.
|
If you change the payload, change it there and re-check this table.
|
||||||
|
|
||||||
|
### PC -> machine links, and part markers
|
||||||
|
|
||||||
|
The reported `machinenumber` says which machine the PC drives. It is not the
|
||||||
|
PC's own identifier, and writing it as one is a defect this contract used to
|
||||||
|
describe: `assets.assetnumber` is uniquely indexed and the machine already holds
|
||||||
|
that value, so the insert failed and the bay got a 500 on every report, forever.
|
||||||
|
A PC takes its hostname as its asset number and keeps it.
|
||||||
|
|
||||||
|
- Link: PC -> machine as `controls`, tagged
|
||||||
|
`assetrelationships.label = 'collector:machine'`. Only tagged rows are ever
|
||||||
|
archived by a push, so a link made by hand is never touched.
|
||||||
|
- Unknown number: warns and links nothing. A machine is never invented, because
|
||||||
|
a mistyped number would create equipment nobody can account for.
|
||||||
|
- A second PC reporting a machine another PC holds is a CLAIM, not a handover.
|
||||||
|
A PC imaged for a machine carries that number before it reaches the floor, so
|
||||||
|
the PC currently running the machine keeps the link while it is still alive -
|
||||||
|
reporting within 24 hours (`MACHINE_CLAIM_QUIET_HOURS`) and still `In Use`.
|
||||||
|
The challenger is recorded as a dormant link, which also marks the claim as
|
||||||
|
already announced so it does not alert every cycle.
|
||||||
|
- Handover completes on its own once the incumbent has been quiet past that
|
||||||
|
window, or immediately when someone moves it off `In Use` - which is the
|
||||||
|
one-step way to force a swap at the moment it happens. The old link is
|
||||||
|
archived, never deleted, so "which PC ran this machine in June" stays
|
||||||
|
answerable. The retired PC's STATUS is deliberately not changed: the collector
|
||||||
|
cannot tell shelved from broken from re-imaged.
|
||||||
|
- Alerts for handover and contested claims are gated on the
|
||||||
|
`computers_machinelink_alerts` setting, which ships OFF. A site may run
|
||||||
|
several PCs on one machine number legitimately, and there the alerts fire on
|
||||||
|
correct data. Warnings ride in the collector response either way.
|
||||||
|
|
||||||
|
A PC reporting `pctype = gea-shopfloor-partmarker` is handled differently,
|
||||||
|
because several markers can serve one machine number and an operation holds any
|
||||||
|
number of them. Such a PC gets its own Part Marker machine asset
|
||||||
|
(`<HOSTNAME>-PARTMARKER`), `controls` it, and the marker is filed `partof` the
|
||||||
|
operation the PC reported. Both links are tagged `collector:partmarker`. The PC
|
||||||
|
does NOT claim the operation directly: `controls` propagates through `partof`,
|
||||||
|
so control still follows from controlling the marker, without two markers
|
||||||
|
contesting a link only one can hold. Backups from a marker PC file against the
|
||||||
|
marker rather than the operation.
|
||||||
|
|
||||||
### PC -> printer relationship sync
|
### PC -> printer relationship sync
|
||||||
|
|
||||||
When a payload carries `defaultprinter` and/or `printers`, the collector syncs
|
When a payload carries `defaultprinter` and/or `printers`, the collector syncs
|
||||||
|
|||||||
Reference in New Issue
Block a user