Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the device.changed_api_heartbeat_state_on__date term to the model #1343

Merged
merged 1 commit into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/balena-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -682,6 +682,7 @@ export interface Device {
id: Types['Serial']['Read'];
actor: { __id: Actor['Read']['id'] } | [Actor['Read']];
api_heartbeat_state: 'online' | 'offline' | 'timeout' | 'unknown';
changed_api_heartbeat_state_on__date: Types['Date Time']['Read'] | null;
uuid: Types['Text']['Read'];
local_id: Types['Short Text']['Read'] | null;
device_name: Types['Short Text']['Read'] | null;
Expand Down Expand Up @@ -786,6 +787,7 @@ export interface Device {
id: Types['Serial']['Write'];
actor: Actor['Write']['id'];
api_heartbeat_state: 'online' | 'offline' | 'timeout' | 'unknown';
changed_api_heartbeat_state_on__date: Types['Date Time']['Write'] | null;
uuid: Types['Text']['Write'];
local_id: Types['Short Text']['Write'] | null;
device_name: Types['Short Text']['Write'] | null;
Expand Down
5 changes: 4 additions & 1 deletion src/balena.sbvr
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,9 @@ Term: device
Necessity: each device has exactly one api heartbeat state
Definition: "online" or "offline" or "timeout" or "unknown"

Fact type: device [changed api heartbeat state on] date
Necessity: each device [changed api heartbeat state on] at most one date.

Fact type: device has env var name
Term Form: device environment variable
Database Table Name: device environment variable
Expand Down Expand Up @@ -451,7 +454,7 @@ Fact type: user (Auth) has public key
-- user public key

Fact type: user public key has title
Necessity: each user public key has exactly one title
Necessity: each user public key has exactly one title


-- application type
Expand Down
13 changes: 10 additions & 3 deletions src/features/device-heartbeat/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ export class DeviceOnlineStateManager extends EventEmitter<{

try {
// patch the api_heartbeat_state value to the new state...
const body = {
const baseBody = {
api_heartbeat_state: newState,
};
await api.resin.patch({
Expand All @@ -259,10 +259,17 @@ export class DeviceOnlineStateManager extends EventEmitter<{
id: deviceId,
options: {
$filter: {
$not: body,
$not: baseBody,
},
},
body,
body: {
...baseBody,
// Since the heartbeat manager is the only place that we update the heartbeat state
// we are updating the heartbeat's change date in here rather than a hook, so that
// we can avoid the extra DB request that a generic hook would require for checking
// whether the value actually changed or not.
changed_api_heartbeat_state_on__date: Date.now(),
},
});
} catch ($err) {
err = $err;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE "device"
ADD COLUMN IF NOT EXISTS "changed api heartbeat state on-date" TIMESTAMP NULL;
3 changes: 3 additions & 0 deletions src/translations/v7/v7.sbvr
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,9 @@ Term: device
Necessity: each device has exactly one api heartbeat state
Definition: "online" or "offline" or "timeout" or "unknown"

Fact type: device [changed api heartbeat state on] date
Necessity: each device [changed api heartbeat state on] at most one date.

Fact type: device has env var name
Term Form: device environment variable
Database Table Name: device environment variable
Expand Down
Loading
Loading