iobroker.bee 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,9 +13,25 @@ Fleet agent for ioBroker. It connects a delivered ioBroker system (in a house, a
13
13
  3. **Desired state instead of commands.** The server publishes the desired profile as a retained message. A system that was offline for months reads the current profile, not a backlog of orders.
14
14
  4. **Reconciliation.** The agent compares the profile with the installed versions and plans install, upgrade, downgrade (and removal only when the server asks for it on return to managed mode). It never touches adapters that are not in the profile.
15
15
  5. **Preflight.** Emergency stop, dependencies of the target versions (`io-package.json` of the target version, `engines.node`), free space, maintenance window and configurable conditions on ioBroker states (installation not in use, battery charged, no roaming, vehicle standing, …). Conditions that change by themselves mean *waiting*, everything that needs a human means *blocked*.
16
- 6. **Execution.** A detached runner process performs backup (`iobroker backup`) and the steps (`iobroker add/upgrade/del`) one by one. It survives restarts of the adapter, including the update of the agent itself, which always comes last.
16
+ 6. **Execution.** A detached runner process performs backup (`iobroker backup`) and the steps (`iobroker add/upgrade/del`) one by one. It survives restarts of the adapter, including the update of the agent itself, which always comes last. A new major line of Node.js comes right after the backup, see below.
17
17
  7. **Verification.** Versions must match, all enabled daemon instances of the changed adapters must be alive, and no new errors may appear in their log during the observation time. Otherwise the agent rolls back the changed adapters to their previous versions and reports *blocked*. A blocked job is not repeated until the fleet manager releases a new attempt.
18
18
 
19
+ ### Node.js
20
+
21
+ The profile names the major line of Node.js (e.g. `22`). If this system runs an older one, the plan starts with a step `node`. Never downwards: a newer Node.js than in the profile stays. Within a major line Node.js is updated with the OS updates.
22
+
23
+ The update stops ioBroker, so the agent cannot do it itself. It starts `scripts/node-update.sh` as root in a systemd unit of its own (`sudo -n systemd-run`, allowed by the installer of ioBroker), so stopping ioBroker does not end it. The script
24
+
25
+ 1. stops the ioBroker service, points the NodeSource source (`/etc/apt/sources.list.d/nodesource.sources` or `.list`) to the new line and installs the newest `nodejs` of it, with the capabilities the old binary had (ports below 1024, raw sockets),
26
+ 2. starts ioBroker and waits for the verdict of the agent: under the new Node.js the agent checks that every instance that ran before runs again (at least 10 minutes, or the start timeout if longer) and then writes `node-verdict.json`,
27
+ 3. without a positive verdict in time it stops ioBroker, puts the source back, installs the old package again and starts ioBroker.
28
+
29
+ Afterwards the runner continues with the adapters. A failed adapter later rolls back the adapters, Node.js stays. If the old version came back, the job is *blocked* with the reason. Adapters with native modules are rebuilt by js-controller when they start.
30
+
31
+ Preflight blocks with a reason unless all of this holds: Linux, ioBroker runs as a systemd service, sudo without password for `systemd-run` (not with `--hardened`), Node.js is `/usr/bin/node` of the package `nodejs` from NodeSource, architecture amd64 or arm64, `nodejs` not on hold, an off-device backup target (BackItUp), and no installed package (js-controller, adapters that the job does not change) excludes the new line in `engines.node`.
32
+
33
+ Limits: a power loss while the script works leaves the system as far as the script got; the agent then reports *blocked* and `node-update.log` tells where it stopped.
34
+
19
35
  ### Behaviour without server
20
36
 
21
37
  - **Unknown means self-stop.** If the server explicitly rejects the device (unknown token, revoked certificate), the agent writes the reason to `bee.0.info.status`, raises a notification and terminates. It does not keep knocking.
@@ -72,13 +88,13 @@ From the asset detail a technician (permission `operate`) can start, stop and re
72
88
  | `job.state`, `job.detail`, `job.steps` | current or last job |
73
89
  | `control.halted` | emergency stop of the fleet is active |
74
90
  | `control.refresh`, `control.check` | buttons: send inventory, check desired state now |
75
- | `info.remoteAccess`, `info.remoteAccessBy` | remote access running now, and by whom with which purpose |
91
+ | `info.remoteAccess`, `info.remoteAccessBy` | remote access running now, and by whom with which purpose (`keiner` if none; scripts should use `info.remoteAccess`) |
76
92
 
77
- Files in `iobroker-data/bee.0/`: `device.json` (certificate and key, mode 0600), `desired.json`, `job.json`, `runner.json`, `runner.log` (complete CLI output of all jobs), `tunnels.json` (running remote access sessions, resumed after a restart).
93
+ Files in `iobroker-data/bee.0/`: `device.json` (certificate and key, mode 0600), `desired.json`, `job.json`, `runner.json`, `runner.log` (complete CLI output of all jobs), `tunnels.json` (running remote access sessions, resumed after a restart), and for an update of Node.js `node-update.sh` (copy of the script), `node-status.json`, `node-verdict.json` and `node-update.log` (complete output of the script).
78
94
 
79
95
  ## Not in this version
80
96
 
81
- Platform updates of js-controller and Node.js (with a systemd watchdog outside ioBroker), vis-2 project distribution, recording of console sessions, signed artifacts. See the concept of the beekeeper project.
97
+ Updates of js-controller through the fleet (with a watchdog outside ioBroker), vis-2 project distribution, recording of console sessions, signed artifacts. See the concept of the beekeeper project.
82
98
 
83
99
  ## Development
84
100
 
@@ -92,6 +108,18 @@ npm test # unit tests of planner, preflight and diff
92
108
 
93
109
  ## Changelog
94
110
 
111
+ ### 0.2.4 (2026-11-10)
112
+
113
+ - Settings, tab *Remote access*: "Remote access in progress" instead of "Access right now", and `info.remoteAccessBy` says `keiner` when nobody accesses the system
114
+ - Settings, tab *Enrollment*: the connection to the fleet management in green or red, the status (now naming the server) next to it
115
+ - Instances without a process (mode `none` or `extension`) refuse start, stop and restart
116
+ - Updates Node.js to the major line of the profile, as the first step of a job: a script as root in a systemd unit of its own, back to the old version if the instances do not run again under the new one (see *Node.js*)
117
+
118
+ ### 0.2.3 (2026-11-10)
119
+
120
+ - Instances that run as a web extension inside a web instance (`common.webExtension` and `native.webInstance`, e.g. mcp) have no process of their own; they count as running when their web instance runs, as in admin. Before, the fleet management showed them as not running, and the check after an update of such an adapter would have rolled it back.
121
+ - Instances of adapters that only bring files for web (`common.onlyWWW`, e.g. material) have no process either: no longer reported as not running, not checked after an update, no commands.
122
+
95
123
  ### 0.2.2 (2026-11-10)
96
124
 
97
125
  - Console: a shell on this system for the fleet management, in the browser of the technician; off unless the owner allows it, Linux with `script` (util-linux) only
@@ -53,16 +53,34 @@
53
53
  "lg": 12,
54
54
  "xl": 12
55
55
  },
56
+ "_connection": {
57
+ "type": "state",
58
+ "oid": "info.connection",
59
+ "label": { "en": "Fleet management", "de": "Flottenverwaltung" },
60
+ "trueText": { "en": "connected", "de": "verbunden" },
61
+ "falseText": { "en": "not connected", "de": "nicht verbunden" },
62
+ "trueTextStyle": { "color": "#4caf50", "fontWeight": "bold" },
63
+ "falseTextStyle": { "color": "#f44336", "fontWeight": "bold" },
64
+ "narrow": true,
65
+ "addColon": true,
66
+ "newLine": true,
67
+ "xs": 12,
68
+ "sm": 12,
69
+ "md": 4,
70
+ "lg": 3,
71
+ "xl": 3
72
+ },
56
73
  "_status": {
57
74
  "type": "state",
58
75
  "oid": "info.status",
59
76
  "label": { "en": "Status", "de": "Status" },
60
- "newLine": true,
77
+ "narrow": true,
78
+ "addColon": true,
61
79
  "xs": 12,
62
80
  "sm": 12,
63
- "md": 12,
64
- "lg": 12,
65
- "xl": 12
81
+ "md": 8,
82
+ "lg": 9,
83
+ "xl": 9
66
84
  }
67
85
  }
68
86
  },
@@ -126,7 +144,7 @@
126
144
  "_remoteAccessBy": {
127
145
  "type": "state",
128
146
  "oid": "info.remoteAccessBy",
129
- "label": { "en": "Access right now", "de": "Zugriff gerade" },
147
+ "label": { "en": "Remote access in progress", "de": "Laufender Fernzugriff" },
130
148
  "newLine": true,
131
149
  "xs": 12,
132
150
  "sm": 12,
@@ -6,6 +6,7 @@ exports.osUpdatesFrom = osUpdatesFrom;
6
6
  exports.instanceRefusal = instanceRefusal;
7
7
  exports.chooseOsPackages = chooseOsPackages;
8
8
  const protocol_1 = require("./protocol");
9
+ const instances_1 = require("./instances");
9
10
  const util_1 = require("./util");
10
11
  /**
11
12
  * Commands of the fleet management to this system: start, stop or restart an instance (as admin does it,
@@ -72,12 +73,23 @@ function instanceRefusal(id, action, own, obj, host) {
72
73
  if (obj.common.host !== host) {
73
74
  return `Instanz ${id} gehört zum Host ${obj.common.host}, nicht zu ${host}`;
74
75
  }
76
+ if ((0, instances_1.onlyWww)(obj)) {
77
+ return `${id} hat keinen eigenen Prozess (nur Dateien für web)`;
78
+ }
79
+ if (obj.common.mode === 'none' || obj.common.mode === 'extension') {
80
+ return `${id} hat keinen eigenen Prozess (Modus ${obj.common.mode})`;
81
+ }
75
82
  if (id === own && action === 'stop') {
76
83
  return 'bee stoppen trennt die Anlage von der Flottenverwaltung; das geht nur am Gerät';
77
84
  }
78
85
  if (action === 'restart' && !obj.common.enabled) {
79
86
  return `Instanz ${id} ist ausgeschaltet; starten statt neu starten`;
80
87
  }
88
+ const web = (0, instances_1.webExtensionOf)(obj);
89
+ if (action === 'restart' && web) {
90
+ // web ignores a write of the object that changes nothing
91
+ return `${id} läuft als Erweiterung in ${(0, instances_1.webText)(web)} und hat keinen eigenen Prozess; dafür ${(0, instances_1.webText)(web)} neu starten`;
92
+ }
81
93
  return null;
82
94
  }
83
95
  exports.ACTION_DONE = {
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/lib/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/lib/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Whether an instance runs. Most instances have a process of their own and report it in
4
+ * system.adapter.<id>.alive. An adapter with a web extension that is set to run inside a web instance
5
+ * (common.webExtension and native.webInstance, the rule of admin) has no process of its own: its alive
6
+ * stays false while it runs inside web. It runs when its web instance runs ("*": any of them) and it does
7
+ * not report the opposite in its state info.extension.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.webExtensionOf = webExtensionOf;
11
+ exports.instanceRunning = instanceRunning;
12
+ exports.onlyWww = onlyWww;
13
+ exports.webText = webText;
14
+ /**
15
+ * The web instance an instance runs in as a web extension, e.g. "web.0", "*" for every web instance;
16
+ * undefined if it has a process of its own.
17
+ *
18
+ * @param obj the object system.adapter.<id>
19
+ */
20
+ function webExtensionOf(obj) {
21
+ const web = obj.native?.webInstance;
22
+ if (obj.common.mode !== 'daemon' ||
23
+ !obj.common.enabled ||
24
+ !obj.common.webExtension ||
25
+ typeof web !== 'string' ||
26
+ !web) {
27
+ return undefined;
28
+ }
29
+ return web.replace(/^system\.adapter\./, '');
30
+ }
31
+ /**
32
+ * Whether an instance runs, also as a web extension.
33
+ *
34
+ * @param obj the object system.adapter.<id>
35
+ * @param readState reads a foreign state
36
+ * @param webInstances the enabled web instances, e.g. ["web.0"]; only asked for "*"
37
+ */
38
+ async function instanceRunning(obj, readState, webInstances) {
39
+ const web = webExtensionOf(obj);
40
+ if (!web) {
41
+ return !!(await readState(`${obj._id}.alive`))?.val;
42
+ }
43
+ const id = obj._id.replace(/^system\.adapter\./, '');
44
+ if ((await readState(`${id}.info.extension`))?.val === false) {
45
+ return false;
46
+ }
47
+ for (const w of web === '*' ? await webInstances() : [web]) {
48
+ if ((await readState(`system.adapter.${w}.alive`))?.val) {
49
+ return true;
50
+ }
51
+ }
52
+ return false;
53
+ }
54
+ /**
55
+ * An adapter that only brings files for web (common.onlyWWW, e.g. material): js-controller starts no
56
+ * process for it, except for the old vis.
57
+ *
58
+ * @param obj the object system.adapter.<id>
59
+ */
60
+ function onlyWww(obj) {
61
+ return !!obj.common.onlyWWW && obj.common.name !== 'vis';
62
+ }
63
+ /** "web.0", or "web" for every web instance */
64
+ function webText(web) {
65
+ return web === '*' ? 'web' : web;
66
+ }
67
+ //# sourceMappingURL=instances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instances.js","sourceRoot":"","sources":["../../src/lib/instances.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAUH,wCAYC;AASD,0CAmBC;AAQD,0BAEC;AAGD,0BAEC;AA7DD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,GAA4B;IACvD,MAAM,GAAG,GAAI,GAAG,CAAC,MAA8C,EAAE,WAAW,CAAC;IAC7E,IACI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;QACnB,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY;QACxB,OAAO,GAAG,KAAK,QAAQ;QACvB,CAAC,GAAG,EACN,CAAC;QACC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CACjC,GAA4B,EAC5B,SAAsB,EACtB,YAAqC;IAErC,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,MAAM,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,GAA4B;IAChD,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;AAC7D,CAAC;AAED,+CAA+C;AAC/C,SAAgB,OAAO,CAAC,GAAW;IAC/B,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AACrC,CAAC"}
@@ -11,6 +11,7 @@ exports.installedVersions = installedVersions;
11
11
  const node_child_process_1 = require("node:child_process");
12
12
  const promises_1 = require("node:fs/promises");
13
13
  const node_os_1 = __importDefault(require("node:os"));
14
+ const instances_1 = require("./instances");
14
15
  /**
15
16
  * Collects the inventory of this ioBroker system. Versions and system data only;
16
17
  * no measured values of the end customer (data minimization).
@@ -90,14 +91,25 @@ async function collectInventory(adapter, opts) {
90
91
  });
91
92
  const instances = {};
92
93
  let offDevice = false;
94
+ // web instances on any host, for extensions that run in every one of them
95
+ const webInstances = () => Promise.resolve(instanceRows.rows
96
+ .map(r => r.value)
97
+ .filter(o => o?.common.name === 'web' && o.common.enabled)
98
+ .map(o => o._id.replace(/^system\.adapter\./, '')));
93
99
  for (const row of instanceRows.rows) {
94
100
  const obj = row.value;
95
101
  if (!obj || obj.common.host !== adapter.host) {
96
102
  continue;
97
103
  }
98
104
  const id = obj._id.replace(/^system\.adapter\./, '');
99
- const alive = await adapter.getForeignStateAsync(`${obj._id}.alive`);
100
- instances[id] = { enabled: !!obj.common.enabled, alive: !!alive?.val, mode: obj.common.mode };
105
+ const web = (0, instances_1.webExtensionOf)(obj);
106
+ instances[id] = {
107
+ enabled: !!obj.common.enabled,
108
+ alive: await (0, instances_1.instanceRunning)(obj, sid => adapter.getForeignStateAsync(sid), webInstances),
109
+ mode: obj.common.mode,
110
+ ...(web ? { webInstance: web } : {}),
111
+ ...((0, instances_1.onlyWww)(obj) ? { onlyWWW: true } : {}),
112
+ };
101
113
  if (obj.common.name === 'backitup' && obj.common.enabled) {
102
114
  const native = obj.native;
103
115
  offDevice ||= OFF_DEVICE_KEYS.some(k => native[k] === true);
@@ -1 +1 @@
1
- {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/lib/inventory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/lib/inventory.ts"],"names":[],"mappings":";;;;;AAyCA,4BAOC;AAED,4BAOC;AAED,wCAGC;AAaD,4CA+EC;AAGD,8CAEC;AA/JD,2DAA8C;AAC9C,+CAAoD;AACpD,sDAAyB;AACzB,2CAAuE;AAGvE;;;GAGG;AAEH,KAAK,UAAU,QAAQ,CAAC,IAAY;IAChC,IAAI,CAAC;QACD,OAAO,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,MAAM;IACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,OAAO,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAE,CAAC,IAAI,EAAE,IAAI,iBAAE,CAAC,OAAO,EAAE,EAAE,IAAI,iBAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AACvE,CAAC;AAED,IAAI,UAAU,GAAkB,IAAI,CAAC;AACrC,KAAK,UAAU,MAAM;IACjB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtB,UAAU,GAAG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACrC,IAAA,6BAAQ,EACJ,iBAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAC7C,CAAC,IAAI,CAAC,EACN,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,EACrD,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACrD,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,UAAU,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,qFAAqF;AAC9E,KAAK,UAAU,QAAQ;IAC1B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAY;IACvC,IAAI,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,cAAc;IAChC,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,uCAAuC,CAAC,CAAC;IAClE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,gEAAgE;AAChE,MAAM,eAAe,GAAG;IACpB,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,eAAe;IACf,aAAa;CAChB,CAAC;AAEK,KAAK,UAAU,gBAAgB,CAClC,OAAyB,EACzB,IAA6F;IAE7F,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE;QACtE,QAAQ,EAAE,iBAAiB;QAC3B,MAAM,EAAE,kBAAkB;KAC7B,CAAC,CAAC;IACH,MAAM,QAAQ,GAAqC,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;QACjC,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;gBACpB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3E,CAAC;QACN,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE;QACxE,QAAQ,EAAE,iBAAiB;QAC3B,MAAM,EAAE,kBAAkB;KAC7B,CAAC,CAAC;IACH,MAAM,SAAS,GAAsC,EAAE,CAAC;IACxD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,0EAA0E;IAC1E,MAAM,YAAY,GAAG,GAAsB,EAAE,CACzC,OAAO,CAAC,OAAO,CACX,YAAY,CAAC,IAAI;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAA4C,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAC1D,CAAC;IACN,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,CAAC,KAA4C,CAAC;QAC7D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAC3C,SAAS;QACb,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAA,0BAAc,EAAC,GAAG,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,CAAC,GAAG;YACZ,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;YAC7B,KAAK,EAAE,MAAM,IAAA,2BAAe,EAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC;YACzF,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;YACrB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,GAAG,CAAC,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C,CAAC;QACF,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAiC,CAAC;YACrD,SAAS,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAChE,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,eAAe,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,iBAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IAE3G,OAAO;QACH,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,iBAAE,CAAC,QAAQ,EAAE;QACvC,QAAQ,EAAE;YACN,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,IAAI,EAAE;YACrD,IAAI,EAAE,OAAO,CAAC,OAAO;YACrB,GAAG,EAAE,MAAM,MAAM,EAAE;YACnB,QAAQ;YACR,SAAS;SACZ;QACD,MAAM,EAAE;YACJ,QAAQ,EAAE,iBAAE,CAAC,QAAQ,EAAE;YACvB,IAAI,EAAE,iBAAE,CAAC,IAAI,EAAE;YACf,EAAE,EAAE,MAAM,MAAM,EAAE;YAClB,MAAM,EAAE,iBAAE,CAAC,OAAO,EAAE;YACpB,KAAK;YACL,QAAQ,EAAE,iBAAE,CAAC,QAAQ,EAAE;YACvB,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;SAC9B;QACD,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,SAAS,EAAE;KAC5D,CAAC;AACN,CAAC;AAED,mDAAmD;AACnD,SAAgB,iBAAiB,CAAC,GAAc;IAC5C,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC"}
package/build/lib/jobs.js CHANGED
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.JobManager = void 0;
4
7
  const node_child_process_1 = require("node:child_process");
5
8
  const node_fs_1 = require("node:fs");
6
9
  const promises_1 = require("node:fs/promises");
7
10
  const node_path_1 = require("node:path");
11
+ const semver_1 = __importDefault(require("semver"));
12
+ const node_1 = require("./node");
8
13
  const planner_1 = require("./planner");
9
14
  const util_1 = require("./util");
10
15
  function pidAlive(pid) {
@@ -104,12 +109,13 @@ class JobManager {
104
109
  profileName: profile.name,
105
110
  profileHash: profile.hash,
106
111
  retry: desired.retry,
107
- targets: Object.fromEntries(steps.map(s => [s.adapter, s.to ?? null])),
112
+ targets: Object.fromEntries(steps.filter(s => s.adapter).map(s => [s.adapter, s.to ?? null])),
108
113
  state: 'preflight',
109
114
  detail: '',
110
115
  steps: all,
111
116
  phase: 'apply',
112
117
  createdAt: Date.now(),
118
+ ...(Object.keys(files).length ? { files } : {}),
113
119
  };
114
120
  await this.save();
115
121
  await this.spawnRunner('apply', all, files);
@@ -125,6 +131,9 @@ class JobManager {
125
131
  if (this.job.phase === 'apply' || this.job.phase === 'rollback') {
126
132
  await this.pollRunner();
127
133
  }
134
+ else if (this.job.phase === 'node') {
135
+ await this.pollNode();
136
+ }
128
137
  else if (this.job.phase === 'verify') {
129
138
  await this.verify();
130
139
  }
@@ -142,7 +151,10 @@ class JobManager {
142
151
  if (!runner) {
143
152
  return;
144
153
  }
145
- const finished = runner.phase === 'done' || runner.phase === 'failed' || runner.phase === 'halted';
154
+ const finished = runner.phase === 'done' ||
155
+ runner.phase === 'failed' ||
156
+ runner.phase === 'halted' ||
157
+ runner.phase === 'node';
146
158
  if (!finished && runner.phase === 'running' && !pidAlive(runner.pid)) {
147
159
  // runner died (power loss, reboot)
148
160
  runner.phase = 'failed';
@@ -163,7 +175,10 @@ class JobManager {
163
175
  }
164
176
  if (job.phase === 'apply') {
165
177
  job.steps = runner.steps;
166
- if (runner.phase === 'done') {
178
+ if (runner.phase === 'node') {
179
+ await this.startNode();
180
+ }
181
+ else if (runner.phase === 'done') {
167
182
  job.phase = 'verify';
168
183
  job.verifyStartedAt = Date.now();
169
184
  await this.setState('verify', 'Instanzen und Log werden geprüft');
@@ -185,6 +200,110 @@ class JobManager {
185
200
  }
186
201
  await this.finish(job.halted && ok ? 'waiting' : 'blocked', detail);
187
202
  }
203
+ /** Time the agent gives the instances under the new Node.js; the script waits 15 minutes longer */
204
+ get nodeWaitSeconds() {
205
+ return Math.max(this.deps.startTimeoutSeconds, 600);
206
+ }
207
+ async startNode() {
208
+ const job = this.job;
209
+ const step = job.steps.find(s => s.action === 'node' && s.status === 'pending');
210
+ step.status = 'running';
211
+ step.ts = Date.now();
212
+ job.phase = 'node';
213
+ job.node = { unit: (0, node_1.nodeUnit)(), startedAt: Date.now(), instances: await this.deps.running() };
214
+ // saved before: the script stops ioBroker and with it this process
215
+ await this.setState('rollout', `Node.js ${step.to} wird installiert, ioBroker startet dafür neu`);
216
+ try {
217
+ await this.deps.launchNode(step.to, job.node.unit, this.nodeWaitSeconds + 900);
218
+ }
219
+ catch (e) {
220
+ await this.nodeFailed(`Node.js ${step.to} nicht gestartet: ${e.message}`);
221
+ }
222
+ }
223
+ /** The script for Node.js runs, or ran while this process was gone */
224
+ async pollNode() {
225
+ const job = this.job;
226
+ const step = job.steps.find(s => s.action === 'node');
227
+ const node = job.node;
228
+ const dir = this.deps.dataDir;
229
+ const status = await (0, node_1.readNodeStatus)(dir);
230
+ if (status?.state === 'restored') {
231
+ await this.nodeFailed(`Node.js ${step.to}: ${status.detail}; Node.js ${step.from} wiederhergestellt`);
232
+ return;
233
+ }
234
+ if (status?.state === 'failed') {
235
+ await this.nodeFailed(`Node.js ${step.to}: ${status.detail}`);
236
+ return;
237
+ }
238
+ const verdict = await (0, node_1.readVerdict)(dir);
239
+ if (status?.state === 'ok' || verdict?.ok) {
240
+ await this.nodeDone();
241
+ return;
242
+ }
243
+ const interrupted = `Node.js ${step.to}: Skript wurde unterbrochen, jetzt läuft Node.js ${process.version}; siehe node-update.log`;
244
+ if (status?.state !== 'waiting') {
245
+ // running: the script works (this process normally does not live that long)
246
+ if (Date.now() - node.startedAt > 60_000 && !(await this.deps.unitActive(node.unit))) {
247
+ await this.nodeFailed(interrupted);
248
+ }
249
+ return;
250
+ }
251
+ if (verdict) {
252
+ // negative: the script goes back to the old version and restarts ioBroker
253
+ return;
254
+ }
255
+ if (!(await this.deps.unitActive(node.unit))) {
256
+ await this.nodeFailed(interrupted);
257
+ return;
258
+ }
259
+ if (String(semver_1.default.major(process.version)) !== step.to) {
260
+ await (0, node_1.writeVerdict)(dir, false, `Der Agent läuft weiter unter Node.js ${process.version}`);
261
+ return;
262
+ }
263
+ const running = new Set(await this.deps.running());
264
+ const down = node.instances.filter(id => !running.has(id));
265
+ if (!down.length) {
266
+ await (0, node_1.writeVerdict)(dir, true);
267
+ await this.nodeDone();
268
+ }
269
+ else if (Date.now() - status.ts > this.nodeWaitSeconds * 1000) {
270
+ await (0, node_1.writeVerdict)(dir, false, `Unter Node.js ${process.version} laufen nicht: ${down.join(', ')}`);
271
+ await this.setState('rollout', `Instanzen starten nicht, zurück zu Node.js ${step.from}`);
272
+ }
273
+ else {
274
+ await this.setState('rollout', `Node.js ${process.version}: warte auf ${down.join(', ')}`);
275
+ }
276
+ }
277
+ /** Node.js is new: the rest of the steps, or the verification */
278
+ async nodeDone() {
279
+ const job = this.job;
280
+ const step = job.steps.find(s => s.action === 'node');
281
+ step.status = 'ok';
282
+ step.detail = `${step.from} → ${process.version}`;
283
+ this.deps.log.info(`Node.js updated: ${step.detail}`);
284
+ if (job.steps.some(s => s.status === 'pending')) {
285
+ job.phase = 'apply';
286
+ await this.save();
287
+ await this.spawnRunner('apply', job.steps, job.files);
288
+ await this.setState('rollout', `Node.js ${process.version}, weiter mit den Adaptern`);
289
+ }
290
+ else {
291
+ job.phase = 'verify';
292
+ job.verifyStartedAt = Date.now();
293
+ await this.setState('verify', 'Instanzen und Log werden geprüft');
294
+ }
295
+ }
296
+ /** Nothing after the backup has changed (the script went back to the old version, if it got so far) */
297
+ async nodeFailed(reason) {
298
+ const job = this.job;
299
+ const step = job.steps.find(s => s.action === 'node');
300
+ step.status = 'error';
301
+ step.detail = reason;
302
+ job.steps.filter(s => s.status === 'pending').forEach(s => (s.status = 'skipped'));
303
+ job.failure = reason;
304
+ this.deps.log.warn(reason);
305
+ await this.finish('blocked', reason);
306
+ }
188
307
  async startRollback(reason, halted = false) {
189
308
  const job = this.job;
190
309
  job.failure = reason;
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/lib/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/lib/jobs.ts"],"names":[],"mappings":"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"}