@fastybird/smart-panel-backend 1.1.0-alpha.14 → 1.1.0-alpha.16
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/dist/app.module.js +1 -0
- package/dist/app.module.js.map +1 -1
- package/dist/dataSource.js +1 -0
- package/dist/dataSource.js.map +1 -1
- package/dist/modules/system/scripts/update-worker.sh +360 -59
- package/dist/modules/system/services/update-executor.service.d.ts +9 -0
- package/dist/modules/system/services/update-executor.service.js +170 -25
- package/dist/modules/system/services/update-executor.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.openapi.d.ts +2 -2
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.d.ts +6 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.js +16 -1
- package/dist/plugins/devices-home-assistant/devices-home-assistant.plugin.js.map +1 -1
- package/dist/plugins/devices-home-assistant/dto/mapping-preview.dto.d.ts +1 -0
- package/dist/plugins/devices-home-assistant/dto/mapping-preview.dto.js +11 -0
- package/dist/plugins/devices-home-assistant/dto/mapping-preview.dto.js.map +1 -1
- package/dist/plugins/devices-home-assistant/mappers/button.entity.mapper.service.d.ts +19 -0
- package/dist/plugins/devices-home-assistant/mappers/button.entity.mapper.service.js +51 -0
- package/dist/plugins/devices-home-assistant/mappers/button.entity.mapper.service.js.map +1 -0
- package/dist/plugins/devices-home-assistant/mappings/definitions/entity-mappings.yaml +56 -7
- package/dist/plugins/devices-home-assistant/models/mapping-preview.model.d.ts +1 -0
- package/dist/plugins/devices-home-assistant/models/mapping-preview.model.js +11 -0
- package/dist/plugins/devices-home-assistant/models/mapping-preview.model.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/device-adoption.service.js +17 -0
- package/dist/plugins/devices-home-assistant/services/device-adoption.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/home-assistant-raw-event.service.d.ts +27 -0
- package/dist/plugins/devices-home-assistant/services/home-assistant-raw-event.service.js +271 -0
- package/dist/plugins/devices-home-assistant/services/home-assistant-raw-event.service.js.map +1 -0
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.d.ts +2 -2
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js +31 -13
- package/dist/plugins/devices-home-assistant/services/home-assistant.ws.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/mapping-preview.service.js +24 -4
- package/dist/plugins/devices-home-assistant/services/mapping-preview.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.d.ts +4 -1
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.js +82 -2
- package/dist/plugins/devices-home-assistant/services/state-changed.event.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/services/wizard.service.js +1 -0
- package/dist/plugins/devices-home-assistant/services/wizard.service.js.map +1 -1
- package/dist/plugins/devices-home-assistant/utils/ha-event.utils.d.ts +2 -0
- package/dist/plugins/devices-home-assistant/utils/ha-event.utils.js +50 -0
- package/dist/plugins/devices-home-assistant/utils/ha-event.utils.js.map +1 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.d.ts +2 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.js +22 -0
- package/dist/plugins/devices-homekit/listeners/homekit-event.listener.js.map +1 -1
- package/dist/plugins/devices-homekit/mappers/button.mapper.d.ts +15 -0
- package/dist/plugins/devices-homekit/mappers/button.mapper.js +143 -0
- package/dist/plugins/devices-homekit/mappers/button.mapper.js.map +1 -0
- package/dist/plugins/devices-homekit/mappers/homekit-mapper.interface.d.ts +8 -0
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.d.ts +5 -1
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.js +42 -0
- package/dist/plugins/devices-homekit/services/homekit-mapper-registry.service.js.map +1 -1
- package/dist/plugins/devices-homey/mappings/definitions/channels.yaml +50 -0
- package/dist/plugins/devices-homey/mappings/definitions/devices.yaml +18 -0
- package/dist/plugins/devices-homey/mappings/definitions/properties.yaml +55 -0
- package/dist/plugins/devices-homey/mappings/device-support.js +10 -0
- package/dist/plugins/devices-homey/mappings/device-support.js.map +1 -1
- package/dist/plugins/devices-homey/mappings/mapping-loader.service.d.ts +1 -0
- package/dist/plugins/devices-homey/mappings/mapping-loader.service.js +66 -8
- package/dist/plugins/devices-homey/mappings/mapping-loader.service.js.map +1 -1
- package/dist/plugins/devices-homey/models/inventory.model.d.ts +2 -1
- package/dist/plugins/devices-homey/models/inventory.model.js +1 -0
- package/dist/plugins/devices-homey/models/inventory.model.js.map +1 -1
- package/dist/plugins/devices-homey/models/mapping-preview.model.d.ts +1 -0
- package/dist/plugins/devices-homey/models/mapping-preview.model.js +1 -0
- package/dist/plugins/devices-homey/models/mapping-preview.model.js.map +1 -1
- package/dist/plugins/devices-homey/services/homey-mapping-preview.service.js +7 -0
- package/dist/plugins/devices-homey/services/homey-mapping-preview.service.js.map +1 -1
- package/dist/plugins/devices-homey/services/homey-synchronizer.service.d.ts +3 -1
- package/dist/plugins/devices-homey/services/homey-synchronizer.service.js +37 -6
- package/dist/plugins/devices-homey/services/homey-synchronizer.service.js.map +1 -1
- package/dist/plugins/devices-reterminal/services/reterminal-button.service.d.ts +7 -3
- package/dist/plugins/devices-reterminal/services/reterminal-button.service.js +63 -17
- package/dist/plugins/devices-reterminal/services/reterminal-button.service.js.map +1 -1
- package/dist/plugins/devices-third-party/controllers/third-party-inputs.controller.d.ts +17 -0
- package/dist/plugins/devices-third-party/controllers/third-party-inputs.controller.js +205 -0
- package/dist/plugins/devices-third-party/controllers/third-party-inputs.controller.js.map +1 -0
- package/dist/plugins/devices-third-party/devices-third-party.openapi.d.ts +1 -1
- package/dist/plugins/devices-third-party/devices-third-party.plugin.js +2 -1
- package/dist/plugins/devices-third-party/devices-third-party.plugin.js.map +1 -1
- package/dist/plugins/devices-third-party/dto/report-input-occurrence-response.dto.d.ts +5 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence-response.dto.js +50 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence-response.dto.js.map +1 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence.dto.d.ts +8 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence.dto.js +81 -0
- package/dist/plugins/devices-third-party/dto/report-input-occurrence.dto.js.map +1 -0
- package/dist/plugins/devices-third-party/platforms/third-party-device.platform.js +19 -4
- package/dist/plugins/devices-third-party/platforms/third-party-device.platform.js.map +1 -1
- package/dist/plugins/devices-virtual/listeners/virtual-projection.listener.d.ts +2 -0
- package/dist/plugins/devices-virtual/listeners/virtual-projection.listener.js +57 -0
- package/dist/plugins/devices-virtual/listeners/virtual-projection.listener.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/app.module.js
CHANGED
|
@@ -202,6 +202,7 @@ let AppModule = AppModule_1 = class AppModule {
|
|
|
202
202
|
entities: [__dirname + '/**/*.entity{.ts,.js}'],
|
|
203
203
|
subscribers: [__dirname + '/**/*.subscriber{.ts,.js}'],
|
|
204
204
|
migrations: [__dirname + '/migrations/*{.ts,.js}'],
|
|
205
|
+
migrationsTransactionMode: 'each',
|
|
205
206
|
synchronize: (0, config_utils_1.getEnvValue)(configService, 'FB_DB_SYNC', false),
|
|
206
207
|
migrationsRun: (0, config_utils_1.getEnvValue)(configService, 'FB_DB_MIGRATIONS_RUN', false),
|
|
207
208
|
logging: (0, config_utils_1.getEnvValue)(configService, 'FB_DB_LOGGING', false),
|
package/dist/app.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":"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"}
|
package/dist/dataSource.js
CHANGED
|
@@ -51,6 +51,7 @@ const AppDataSource = new typeorm_1.DataSource({
|
|
|
51
51
|
entities: [__dirname + '/**/*.entity{.ts,.js}'],
|
|
52
52
|
subscribers: [__dirname + '/**/*.subscriber{.ts,.js}'],
|
|
53
53
|
migrations: [__dirname + '/migrations/*{.ts,.js}'],
|
|
54
|
+
migrationsTransactionMode: 'each',
|
|
54
55
|
synchronize: process.env.FB_DB_SYNC === 'true',
|
|
55
56
|
logging: process.env.FB_DB_LOGGING === 'true',
|
|
56
57
|
});
|
package/dist/dataSource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataSource.js","sourceRoot":"","sources":["../src/dataSource.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,2CAA6B;AAC7B,qCAAqC;AAErC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAElG,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;IAChC,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,oBAAU,CAAC;IACpC,IAAI,EAAE,QAAQ;IACd,QAAQ,EACP,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC9B,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACzG,QAAQ,EAAE,CAAC,SAAS,GAAG,uBAAuB,CAAC;IAC/C,WAAW,EAAE,CAAC,SAAS,GAAG,2BAA2B,CAAC;IACtD,UAAU,EAAE,CAAC,SAAS,GAAG,wBAAwB,CAAC;IAClD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM;IAC9C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"dataSource.js","sourceRoot":"","sources":["../src/dataSource.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,2CAA6B;AAC7B,qCAAqC;AAErC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAElG,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;IAChC,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,oBAAU,CAAC;IACpC,IAAI,EAAE,QAAQ;IACd,QAAQ,EACP,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC9B,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACzG,QAAQ,EAAE,CAAC,SAAS,GAAG,uBAAuB,CAAC;IAC/C,WAAW,EAAE,CAAC,SAAS,GAAG,2BAA2B,CAAC;IACtD,UAAU,EAAE,CAAC,SAAS,GAAG,wBAAwB,CAAC;IAClD,yBAAyB,EAAE,MAAM;IACjC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM;IAC9C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC"}
|
|
@@ -7,6 +7,232 @@ INSTALL_TYPE="${INSTALL_TYPE:-npm}"
|
|
|
7
7
|
IMAGE_BASE_DIR="${IMAGE_BASE_DIR:-/opt/smart-panel}"
|
|
8
8
|
DOWNLOAD_URL="${DOWNLOAD_URL:-}"
|
|
9
9
|
|
|
10
|
+
# The attempt record and lock live beside the public status file, never inside a versioned image
|
|
11
|
+
# directory. This lets the record survive a backend restart, target-directory cleanup or a
|
|
12
|
+
# failed migration, while keeping it outside the release tarball and private to the service user.
|
|
13
|
+
ATTEMPT_DIR="${ATTEMPT_DIR:-$(dirname "$STATUS_FILE")/update-attempt}"
|
|
14
|
+
ATTEMPT_FILE="${ATTEMPT_DIR}/attempt.json"
|
|
15
|
+
ATTEMPT_LOCK="${ATTEMPT_DIR}/lock"
|
|
16
|
+
ATTEMPT_ID=""
|
|
17
|
+
MIGRATION_ENTERED="false"
|
|
18
|
+
FINALIZED="false"
|
|
19
|
+
MIGRATION_LOG=""
|
|
20
|
+
CURRENT_PHASE="preparing"
|
|
21
|
+
SERVICE_NAME="smart-panel"
|
|
22
|
+
QUIESCENCE_TIMEOUT_SECONDS="${QUIESCENCE_TIMEOUT_SECONDS:-30}"
|
|
23
|
+
START_TIMEOUT_SECONDS="${START_TIMEOUT_SECONDS:-60}"
|
|
24
|
+
HEALTH_URL="${HEALTH_URL:-}"
|
|
25
|
+
|
|
26
|
+
json_escape() {
|
|
27
|
+
printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g; s/[[:cntrl:]]//g'
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
write_attempt() {
|
|
31
|
+
local state="$1"
|
|
32
|
+
local phase="$2"
|
|
33
|
+
local error="${3:-}"
|
|
34
|
+
local recovery_required="${4:-false}"
|
|
35
|
+
local migration_entered="${5:-$MIGRATION_ENTERED}"
|
|
36
|
+
local tmp_file="${ATTEMPT_FILE}.tmp.$$"
|
|
37
|
+
CURRENT_PHASE="$phase"
|
|
38
|
+
|
|
39
|
+
mkdir -p "$ATTEMPT_DIR"
|
|
40
|
+
chmod 700 "$ATTEMPT_DIR"
|
|
41
|
+
|
|
42
|
+
{
|
|
43
|
+
printf '{\n'
|
|
44
|
+
printf '\t"attemptId": "%s",\n' "$(json_escape "$ATTEMPT_ID")"
|
|
45
|
+
printf '\t"ownerPid": %s,\n' "$$"
|
|
46
|
+
printf '\t"targetVersion": "%s",\n' "$(json_escape "$VERSION")"
|
|
47
|
+
printf '\t"state": "%s",\n' "$(json_escape "$state")"
|
|
48
|
+
printf '\t"phase": "%s",\n' "$(json_escape "$phase")"
|
|
49
|
+
printf '\t"migrationEntered": %s,\n' "$migration_entered"
|
|
50
|
+
printf '\t"recoveryRequired": %s,\n' "$recovery_required"
|
|
51
|
+
printf '\t"migrationLog": "%s",\n' "$(json_escape "$MIGRATION_LOG")"
|
|
52
|
+
printf '\t"updatedAt": "%s",\n' "$(date -Iseconds)"
|
|
53
|
+
printf '\t"error": "%s"\n' "$(json_escape "$error")"
|
|
54
|
+
printf '}\n'
|
|
55
|
+
} > "$tmp_file"
|
|
56
|
+
|
|
57
|
+
chmod 600 "$tmp_file"
|
|
58
|
+
mv -f "$tmp_file" "$ATTEMPT_FILE"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
attempt_is_unresolved() {
|
|
62
|
+
if [ -f "$ATTEMPT_FILE" ] && grep -q '"state": "complete"' "$ATTEMPT_FILE"; then
|
|
63
|
+
# A crash after the durable completion record but before rmdir must not strand a clean
|
|
64
|
+
# attempt forever; completion is the evidence that makes this lock removable.
|
|
65
|
+
rmdir "$ATTEMPT_LOCK" 2>/dev/null || true
|
|
66
|
+
|
|
67
|
+
return 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
if [ -d "$ATTEMPT_LOCK" ]; then
|
|
71
|
+
return 0
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
if [ ! -f "$ATTEMPT_FILE" ]; then
|
|
75
|
+
return 1
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
grep -q '"state": "active"' "$ATTEMPT_FILE" || grep -q '"recoveryRequired": true' "$ATTEMPT_FILE"
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
acquire_attempt() {
|
|
82
|
+
mkdir -p "$ATTEMPT_DIR"
|
|
83
|
+
chmod 700 "$ATTEMPT_DIR"
|
|
84
|
+
|
|
85
|
+
if attempt_is_unresolved; then
|
|
86
|
+
return 1
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# mkdir is the portable atomic OS-level lock used by the legacy launcher. An orphaned lock is
|
|
90
|
+
# deliberately retained; an expired timestamp cannot prove that a migration did not commit.
|
|
91
|
+
if ! mkdir "$ATTEMPT_LOCK" 2>/dev/null; then
|
|
92
|
+
return 1
|
|
93
|
+
fi
|
|
94
|
+
chmod 700 "$ATTEMPT_LOCK"
|
|
95
|
+
|
|
96
|
+
ATTEMPT_ID="$(date +%s)-$$"
|
|
97
|
+
write_attempt "active" "preparing" "" "false" "false"
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
release_attempt() {
|
|
101
|
+
if [ -n "$ATTEMPT_ID" ]; then
|
|
102
|
+
write_attempt "complete" "complete" "" "false" "$MIGRATION_ENTERED"
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
rmdir "$ATTEMPT_LOCK" 2>/dev/null || true
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
hold_attempt() {
|
|
109
|
+
local phase="$1"
|
|
110
|
+
local error="$2"
|
|
111
|
+
|
|
112
|
+
write_attempt "recovery_required" "$phase" "$error" "true" "$MIGRATION_ENTERED"
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
finish_before_migration() {
|
|
116
|
+
local phase="$1"
|
|
117
|
+
local error="$2"
|
|
118
|
+
|
|
119
|
+
if [ -n "${TMP_TARBALL:-}" ]; then
|
|
120
|
+
rm -f "$TMP_TARBALL" 2>/dev/null || true
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
write_attempt "failed_preflight" "$phase" "$error" "false" "false"
|
|
124
|
+
rmdir "$ATTEMPT_LOCK" 2>/dev/null || true
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
phase_requires_hold() {
|
|
128
|
+
case "$CURRENT_PHASE" in
|
|
129
|
+
stopping|quiesced|switching) return 0 ;;
|
|
130
|
+
*) return 1 ;;
|
|
131
|
+
esac
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
fail_before_migration() {
|
|
135
|
+
local phase="$1"
|
|
136
|
+
local error="$2"
|
|
137
|
+
|
|
138
|
+
if [ -n "$ATTEMPT_ID" ]; then
|
|
139
|
+
finish_before_migration "$phase" "$error"
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
update_status "failed" "failed" "$error"
|
|
143
|
+
FINALIZED="true"
|
|
144
|
+
exit 1
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
restore_before_migration() {
|
|
148
|
+
local previous_target="$1"
|
|
149
|
+
local current_link="$2"
|
|
150
|
+
local new_version_dir="$3"
|
|
151
|
+
local resolved_previous resolved_current
|
|
152
|
+
|
|
153
|
+
[ -n "$previous_target" ] || return 1
|
|
154
|
+
sudo -n ln -sfn "$previous_target" "$current_link" || return 1
|
|
155
|
+
|
|
156
|
+
resolved_previous="$(realpath "$previous_target" 2>/dev/null || true)"
|
|
157
|
+
resolved_current="$(realpath "$current_link" 2>/dev/null || true)"
|
|
158
|
+
[ -n "$resolved_previous" ] && [ "$resolved_previous" = "$resolved_current" ] || return 1
|
|
159
|
+
|
|
160
|
+
rm -rf "$new_version_dir" || return 1
|
|
161
|
+
sudo -n systemctl start "$SERVICE_NAME" 2>/dev/null || return 1
|
|
162
|
+
wait_for_started_service
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
service_property() {
|
|
166
|
+
local property="$1"
|
|
167
|
+
|
|
168
|
+
systemctl show "$SERVICE_NAME" --property="$property" --value
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
service_quiesced() {
|
|
172
|
+
local active_state main_pid control_pid control_group cgroup_procs
|
|
173
|
+
|
|
174
|
+
active_state="$(service_property ActiveState 2>/dev/null)" || return 2
|
|
175
|
+
main_pid="$(service_property MainPID 2>/dev/null)" || return 2
|
|
176
|
+
control_pid="$(service_property ControlPID 2>/dev/null)" || return 2
|
|
177
|
+
control_group="$(service_property ControlGroup 2>/dev/null)" || return 2
|
|
178
|
+
|
|
179
|
+
case "$active_state" in
|
|
180
|
+
inactive|failed) ;;
|
|
181
|
+
*) return 1 ;;
|
|
182
|
+
esac
|
|
183
|
+
|
|
184
|
+
[ "$main_pid" = "0" ] || return 1
|
|
185
|
+
[ "$control_pid" = "0" ] || return 1
|
|
186
|
+
|
|
187
|
+
cgroup_procs="${SERVICE_CGROUP_PROCS_FILE:-/sys/fs/cgroup${control_group}/cgroup.procs}"
|
|
188
|
+
[ -r "$cgroup_procs" ] || return 2
|
|
189
|
+
if grep -q '[0-9]' "$cgroup_procs"; then
|
|
190
|
+
return 1
|
|
191
|
+
fi
|
|
192
|
+
|
|
193
|
+
return 0
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
wait_for_quiescence() {
|
|
197
|
+
local deadline=$((SECONDS + QUIESCENCE_TIMEOUT_SECONDS))
|
|
198
|
+
local result
|
|
199
|
+
|
|
200
|
+
while [ "$SECONDS" -le "$deadline" ]; do
|
|
201
|
+
if service_quiesced; then
|
|
202
|
+
return 0
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
result=$?
|
|
206
|
+
if [ "$result" -eq 2 ]; then
|
|
207
|
+
return 2
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
sleep 1
|
|
211
|
+
done
|
|
212
|
+
|
|
213
|
+
return 1
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
wait_for_started_service() {
|
|
217
|
+
local deadline=$((SECONDS + START_TIMEOUT_SECONDS))
|
|
218
|
+
local state main_pid
|
|
219
|
+
|
|
220
|
+
while [ "$SECONDS" -le "$deadline" ]; do
|
|
221
|
+
state="$(service_property ActiveState 2>/dev/null || true)"
|
|
222
|
+
main_pid="$(service_property MainPID 2>/dev/null || true)"
|
|
223
|
+
|
|
224
|
+
if [ "$state" = "active" ] && [ "$main_pid" != "0" ] && [ -n "$main_pid" ]; then
|
|
225
|
+
if [ -z "$HEALTH_URL" ] || curl -fsS --max-time 5 "$HEALTH_URL" >/dev/null 2>&1; then
|
|
226
|
+
return 0
|
|
227
|
+
fi
|
|
228
|
+
fi
|
|
229
|
+
|
|
230
|
+
sleep 1
|
|
231
|
+
done
|
|
232
|
+
|
|
233
|
+
return 1
|
|
234
|
+
}
|
|
235
|
+
|
|
10
236
|
# Capture once — used for all status writes so timeout detection works correctly
|
|
11
237
|
STARTED_AT="$(date -Iseconds)"
|
|
12
238
|
|
|
@@ -45,7 +271,13 @@ update_status() {
|
|
|
45
271
|
cleanup() {
|
|
46
272
|
local exit_code=$?
|
|
47
273
|
|
|
48
|
-
if [ $exit_code -ne 0 ]; then
|
|
274
|
+
if [ "$exit_code" -ne 0 ] && [ "$FINALIZED" != "true" ]; then
|
|
275
|
+
if [ -n "$ATTEMPT_ID" ] && { [ "$MIGRATION_ENTERED" = "true" ] || phase_requires_hold; }; then
|
|
276
|
+
hold_attempt "interrupted" "Update worker exited with code $exit_code during a state-changing phase"
|
|
277
|
+
elif [ -n "$ATTEMPT_ID" ]; then
|
|
278
|
+
finish_before_migration "failed" "Update process exited with code $exit_code"
|
|
279
|
+
fi
|
|
280
|
+
|
|
49
281
|
# Only write a generic failure if a specific error wasn't already recorded
|
|
50
282
|
if [ -f "$STATUS_FILE" ] && grep -q '"status": "failed"' "$STATUS_FILE" 2>/dev/null; then
|
|
51
283
|
return
|
|
@@ -56,6 +288,27 @@ cleanup() {
|
|
|
56
288
|
|
|
57
289
|
trap cleanup EXIT
|
|
58
290
|
|
|
291
|
+
handle_signal() {
|
|
292
|
+
local signal_name="$1"
|
|
293
|
+
local signal_code="$2"
|
|
294
|
+
|
|
295
|
+
if [ -n "$ATTEMPT_ID" ]; then
|
|
296
|
+
if [ "$MIGRATION_ENTERED" = "true" ] || phase_requires_hold; then
|
|
297
|
+
hold_attempt "interrupted" "Update worker received SIG${signal_name} after migration entry"
|
|
298
|
+
else
|
|
299
|
+
finish_before_migration "interrupted" "Update worker received SIG${signal_name} before migration entry"
|
|
300
|
+
fi
|
|
301
|
+
fi
|
|
302
|
+
|
|
303
|
+
update_status "failed" "failed" "Update worker received SIG${signal_name}"
|
|
304
|
+
FINALIZED="true"
|
|
305
|
+
exit "$signal_code"
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
trap 'handle_signal TERM 143' TERM
|
|
309
|
+
trap 'handle_signal INT 130' INT
|
|
310
|
+
trap 'handle_signal HUP 129' HUP
|
|
311
|
+
|
|
59
312
|
# ──────────────────────────────────────────────────────────────
|
|
60
313
|
# Image-based update (Raspbian image installs)
|
|
61
314
|
# ──────────────────────────────────────────────────────────────
|
|
@@ -65,6 +318,12 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
65
318
|
NEW_VERSION_DIR="${IMAGE_BASE_DIR}/v${CLEAN_VERSION}"
|
|
66
319
|
CURRENT_LINK="${IMAGE_BASE_DIR}/current"
|
|
67
320
|
|
|
321
|
+
if ! acquire_attempt; then
|
|
322
|
+
update_status "failed" "failed" "An unresolved update attempt already owns the updater"
|
|
323
|
+
FINALIZED="true"
|
|
324
|
+
exit 1
|
|
325
|
+
fi
|
|
326
|
+
|
|
68
327
|
# Verify passwordless sudo is available for all required commands.
|
|
69
328
|
# Without -n, sudo may hang waiting for a password on a detached process.
|
|
70
329
|
SUDO_CMDS=(
|
|
@@ -77,8 +336,7 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
77
336
|
|
|
78
337
|
for cmd in "${SUDO_CMDS[@]}"; do
|
|
79
338
|
if ! sudo -n -l $cmd >/dev/null 2>&1; then
|
|
80
|
-
|
|
81
|
-
exit 1
|
|
339
|
+
fail_before_migration "preflight" "Passwordless sudo not available for: $cmd"
|
|
82
340
|
fi
|
|
83
341
|
done
|
|
84
342
|
PREVIOUS_TARGET=""
|
|
@@ -86,6 +344,10 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
86
344
|
# Save the current version for rollback
|
|
87
345
|
if [ -L "$CURRENT_LINK" ]; then
|
|
88
346
|
PREVIOUS_TARGET=$(readlink "$CURRENT_LINK")
|
|
347
|
+
case "$PREVIOUS_TARGET" in
|
|
348
|
+
/*) ;;
|
|
349
|
+
*) PREVIOUS_TARGET="${IMAGE_BASE_DIR}/${PREVIOUS_TARGET}" ;;
|
|
350
|
+
esac
|
|
89
351
|
fi
|
|
90
352
|
|
|
91
353
|
# Guard: refuse to overwrite the currently running version
|
|
@@ -94,23 +356,20 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
94
356
|
RESOLVED_NEW=$(cd "$IMAGE_BASE_DIR" && realpath "$NEW_VERSION_DIR" 2>/dev/null || true)
|
|
95
357
|
|
|
96
358
|
if [ -n "$PREVIOUS_TARGET" ] && [ -n "$RESOLVED_PREV" ] && [ -n "$RESOLVED_NEW" ] && [ "$RESOLVED_PREV" = "$RESOLVED_NEW" ]; then
|
|
97
|
-
|
|
98
|
-
exit 1
|
|
359
|
+
fail_before_migration "preflight" "Target version v${CLEAN_VERSION} is already the active version"
|
|
99
360
|
fi
|
|
100
361
|
|
|
101
362
|
# ── Download ──
|
|
102
363
|
update_status "downloading" "downloading"
|
|
103
364
|
|
|
104
365
|
if [ -z "$DOWNLOAD_URL" ]; then
|
|
105
|
-
|
|
106
|
-
exit 1
|
|
366
|
+
fail_before_migration "downloading" "No download URL provided for image update"
|
|
107
367
|
fi
|
|
108
368
|
|
|
109
369
|
TMP_TARBALL="/tmp/smart-panel-backend-v${CLEAN_VERSION}.tar.gz"
|
|
110
370
|
|
|
111
371
|
curl -fSL -o "$TMP_TARBALL" "$DOWNLOAD_URL" 2>&1 || {
|
|
112
|
-
|
|
113
|
-
exit 1
|
|
372
|
+
fail_before_migration "downloading" "Download failed from ${DOWNLOAD_URL}"
|
|
114
373
|
}
|
|
115
374
|
|
|
116
375
|
# ── Extract ──
|
|
@@ -121,8 +380,7 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
121
380
|
tar -xzf "$TMP_TARBALL" -C "$NEW_VERSION_DIR" 2>&1 || {
|
|
122
381
|
rm -rf "$NEW_VERSION_DIR"
|
|
123
382
|
rm -f "$TMP_TARBALL"
|
|
124
|
-
|
|
125
|
-
exit 1
|
|
383
|
+
fail_before_migration "installing" "Failed to extract update archive"
|
|
126
384
|
}
|
|
127
385
|
|
|
128
386
|
rm -f "$TMP_TARBALL"
|
|
@@ -130,8 +388,7 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
130
388
|
# Create the image-install marker in the new version
|
|
131
389
|
touch "${NEW_VERSION_DIR}/.image-install" || {
|
|
132
390
|
rm -rf "$NEW_VERSION_DIR"
|
|
133
|
-
|
|
134
|
-
exit 1
|
|
391
|
+
fail_before_migration "installing" "Failed to create image-install marker"
|
|
135
392
|
}
|
|
136
393
|
|
|
137
394
|
# ── Verify dependencies ──
|
|
@@ -143,8 +400,7 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
143
400
|
if [ ! -d "node_modules" ]; then
|
|
144
401
|
npm install --omit=dev 2>&1 || {
|
|
145
402
|
rm -rf "$NEW_VERSION_DIR"
|
|
146
|
-
|
|
147
|
-
exit 1
|
|
403
|
+
fail_before_migration "installing" "npm install failed"
|
|
148
404
|
}
|
|
149
405
|
fi
|
|
150
406
|
|
|
@@ -153,72 +409,115 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
153
409
|
# hanging on password prompt when running as a detached process.
|
|
154
410
|
sudo -n chown -R smart-panel:smart-panel "$NEW_VERSION_DIR" || {
|
|
155
411
|
rm -rf "$NEW_VERSION_DIR"
|
|
156
|
-
|
|
157
|
-
exit 1
|
|
412
|
+
fail_before_migration "installing" "Failed to set ownership on ${NEW_VERSION_DIR}"
|
|
158
413
|
}
|
|
159
414
|
|
|
160
415
|
# ── Stop service ──
|
|
161
416
|
update_status "stopping" "stopping"
|
|
162
|
-
|
|
417
|
+
write_attempt "active" "stopping" "" "false" "$MIGRATION_ENTERED"
|
|
418
|
+
if ! sudo -n systemctl stop "$SERVICE_NAME" 2>/dev/null; then
|
|
419
|
+
hold_attempt "stopping" "Service stop failed; writer quiescence is unknown"
|
|
420
|
+
update_status "failed" "failed" "Could not stop ${SERVICE_NAME}; update is held for recovery"
|
|
421
|
+
FINALIZED="true"
|
|
422
|
+
exit 1
|
|
423
|
+
fi
|
|
424
|
+
|
|
425
|
+
if ! wait_for_quiescence; then
|
|
426
|
+
hold_attempt "stopping" "Service did not reach verified quiescence before migration"
|
|
427
|
+
update_status "failed" "failed" "Service quiescence could not be verified; update is held for recovery"
|
|
428
|
+
FINALIZED="true"
|
|
429
|
+
exit 1
|
|
430
|
+
fi
|
|
431
|
+
|
|
432
|
+
write_attempt "active" "quiesced" "" "false" "$MIGRATION_ENTERED"
|
|
163
433
|
|
|
164
434
|
# ── Switch symlink (atomic on same filesystem) ──
|
|
165
435
|
sudo -n ln -sfn "$NEW_VERSION_DIR" "$CURRENT_LINK" || {
|
|
166
|
-
# Revert
|
|
167
|
-
if
|
|
168
|
-
|
|
436
|
+
# Revert only when the old link, target cleanup and old-service health are all verified.
|
|
437
|
+
if restore_before_migration "$PREVIOUS_TARGET" "$CURRENT_LINK" "$NEW_VERSION_DIR"; then
|
|
438
|
+
fail_before_migration "switching" "Failed to switch version symlink"
|
|
169
439
|
fi
|
|
170
|
-
|
|
171
|
-
|
|
440
|
+
|
|
441
|
+
hold_attempt "switching" "Failed to switch version symlink and recovery start was not verified"
|
|
442
|
+
update_status "failed" "failed" "Failed to switch version symlink; update is held for recovery"
|
|
443
|
+
FINALIZED="true"
|
|
172
444
|
exit 1
|
|
173
445
|
}
|
|
174
446
|
|
|
175
447
|
# ── Run database migrations ──
|
|
176
448
|
update_status "migrating" "migrating"
|
|
177
|
-
|
|
178
449
|
ENV_FILE="/etc/smart-panel/environment"
|
|
179
450
|
|
|
180
|
-
if [ -f "${NEW_VERSION_DIR}/dist/dataSource.js" ]; then
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
if sudo -n ln -sfn "$PREVIOUS_TARGET" "$CURRENT_LINK"; then
|
|
195
|
-
rm -rf "$NEW_VERSION_DIR"
|
|
196
|
-
update_status "failed" "failed" "Database migration failed — reverted to previous version"
|
|
197
|
-
else
|
|
198
|
-
# Symlink revert failed — keep new version so system stays bootable
|
|
199
|
-
update_status "failed" "failed" "Database migration failed — symlink revert also failed"
|
|
200
|
-
fi
|
|
201
|
-
else
|
|
202
|
-
# No previous version — keep current in place so system stays bootable
|
|
203
|
-
update_status "failed" "failed" "Database migration failed — no previous version to revert to"
|
|
204
|
-
fi
|
|
451
|
+
if [ ! -f "${NEW_VERSION_DIR}/dist/dataSource.js" ]; then
|
|
452
|
+
hold_attempt "migrating" "Target data source is missing; update is held for recovery"
|
|
453
|
+
update_status "failed" "failed" "Target data source is missing; update is held for recovery"
|
|
454
|
+
FINALIZED="true"
|
|
455
|
+
exit 1
|
|
456
|
+
fi
|
|
457
|
+
|
|
458
|
+
MIGRATION_ENTERED="true"
|
|
459
|
+
if ! write_attempt "active" "migrating" "" "false" "true"; then
|
|
460
|
+
hold_attempt "migrating" "Could not persist migration-entry checkpoint"
|
|
461
|
+
update_status "failed" "failed" "Could not persist migration-entry checkpoint; update is held for recovery"
|
|
462
|
+
FINALIZED="true"
|
|
463
|
+
exit 1
|
|
464
|
+
fi
|
|
205
465
|
|
|
206
|
-
|
|
207
|
-
|
|
466
|
+
MIGRATION_LOG="${ATTEMPT_DIR}/${ATTEMPT_ID}.migration.log"
|
|
467
|
+
: > "$MIGRATION_LOG"
|
|
468
|
+
chmod 600 "$MIGRATION_LOG"
|
|
469
|
+
write_attempt "active" "migrating" "" "false" "true"
|
|
470
|
+
|
|
471
|
+
set +e
|
|
472
|
+
(
|
|
473
|
+
set -a
|
|
474
|
+
# shellcheck source=/dev/null
|
|
475
|
+
[ -f "$ENV_FILE" ] && . "$ENV_FILE"
|
|
476
|
+
set +a
|
|
477
|
+
cd "$NEW_VERSION_DIR"
|
|
478
|
+
node node_modules/typeorm/cli.js migration:run -d dist/dataSource.js
|
|
479
|
+
) 2>&1 | awk -v output="$MIGRATION_LOG" '
|
|
480
|
+
BEGIN { limit = 65536; bytes = 0 }
|
|
481
|
+
{
|
|
482
|
+
if (bytes < limit) {
|
|
483
|
+
line = $0 ORS;
|
|
484
|
+
remaining = limit - bytes;
|
|
485
|
+
if (length(line) > remaining) line = substr(line, 1, remaining);
|
|
486
|
+
printf "%s", line >> output;
|
|
487
|
+
bytes += length(line);
|
|
488
|
+
}
|
|
208
489
|
}
|
|
490
|
+
'
|
|
491
|
+
pipeline_status=("${PIPESTATUS[@]}")
|
|
492
|
+
migration_exit_code="${pipeline_status[0]}"
|
|
493
|
+
capture_exit_code="${pipeline_status[1]}"
|
|
494
|
+
set -e
|
|
495
|
+
|
|
496
|
+
if [ "$capture_exit_code" -ne 0 ]; then
|
|
497
|
+
hold_attempt "migration_capture_failed" "Could not retain bounded migration diagnostics"
|
|
498
|
+
update_status "failed" "failed" "Migration diagnostics could not be retained; update is held for recovery"
|
|
499
|
+
FINALIZED="true"
|
|
500
|
+
exit 1
|
|
501
|
+
fi
|
|
502
|
+
|
|
503
|
+
if [ "$migration_exit_code" -eq 0 ]; then
|
|
504
|
+
write_attempt "active" "migrated" "" "false" "true"
|
|
505
|
+
else
|
|
506
|
+
hold_attempt "migration_failed" "Database migration failed with exit code ${migration_exit_code}"
|
|
507
|
+
update_status "failed" "failed" "Database migration failed; update is held for recovery"
|
|
508
|
+
FINALIZED="true"
|
|
509
|
+
exit "$migration_exit_code"
|
|
209
510
|
fi
|
|
210
511
|
|
|
211
512
|
# ── Start service ──
|
|
212
513
|
update_status "starting" "starting"
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
fi
|
|
219
|
-
update_status "failed" "failed" "Failed to start service after update"
|
|
514
|
+
write_attempt "active" "starting" "" "false" "true"
|
|
515
|
+
if ! sudo -n systemctl start "$SERVICE_NAME" 2>&1 || ! wait_for_started_service; then
|
|
516
|
+
hold_attempt "start_failed" "Target service did not reach verified health after migration"
|
|
517
|
+
update_status "failed" "failed" "Target service failed to start or become healthy; update is held for recovery"
|
|
518
|
+
FINALIZED="true"
|
|
220
519
|
exit 1
|
|
221
|
-
|
|
520
|
+
fi
|
|
222
521
|
|
|
223
522
|
# ── Cleanup old versions (keep max 2 previous) ──
|
|
224
523
|
cd "$IMAGE_BASE_DIR"
|
|
@@ -239,7 +538,9 @@ if [ "$INSTALL_TYPE" = "image" ]; then
|
|
|
239
538
|
fi
|
|
240
539
|
|
|
241
540
|
# ── Mark complete ──
|
|
541
|
+
release_attempt
|
|
242
542
|
update_status "complete" "complete"
|
|
543
|
+
FINALIZED="true"
|
|
243
544
|
trap - EXIT
|
|
244
545
|
exit 0
|
|
245
546
|
fi
|
|
@@ -19,7 +19,16 @@ export declare class UpdateExecutorService implements OnModuleInit {
|
|
|
19
19
|
private progressHighWaterMark;
|
|
20
20
|
constructor(updateService: UpdateService, privilegedWorker: PrivilegedWorkerService, notifications: NotificationsService);
|
|
21
21
|
onModuleInit(): Promise<void>;
|
|
22
|
+
private readAttempt;
|
|
23
|
+
private isAttemptUnresolved;
|
|
24
|
+
private isAttemptOwnerAlive;
|
|
25
|
+
private readStatusFile;
|
|
26
|
+
private waitForAttemptSettlement;
|
|
27
|
+
private reconcileCompletedAttempt;
|
|
28
|
+
private reconcileLiveAttempt;
|
|
22
29
|
private checkPendingUpdateStatus;
|
|
30
|
+
private processPendingStatus;
|
|
31
|
+
private cleanupPendingStatus;
|
|
23
32
|
startUpdate(targetVersion: string): Promise<void>;
|
|
24
33
|
private watchUpdateJob;
|
|
25
34
|
private writeStatusFile;
|