From 5915c720164aaf1a742d29e3f4e0181813180a1b Mon Sep 17 00:00:00 2001 From: Thodoris Greasidis Date: Thu, 9 Jul 2020 16:50:11 +0300 Subject: [PATCH] Device: explicitly fetch only the presented fields Depends on open-balena adding the mac_address & the overall_status device fields, but the latest cli version is probably already not working, since some of its dependencies already use the v14 SDK which needs the v6 model, that the open-balena-api doesn't have yet either. Change-type: minor See: https://www.flowdock.com/app/rulemotion/i-cli/threads/SaSXFlJEv-dpk9uUngWY225zv2D See: https://github.com/balena-io/open-balena-api/issues/388 See: https://github.com/balena-io/open-balena-api/issues/338 See: https://github.com/balena-io/balena-sdk/issues/920 Signed-off-by: Thodoris Greasidis --- lib/actions-oclif/device/index.ts | 33 +++++++++------- tests/commands/device/device.spec.ts | 2 - .../api-response/device-missing-app.json | 39 +------------------ tests/test-data/api-response/device.json | 39 +------------------ 4 files changed, 24 insertions(+), 89 deletions(-) diff --git a/lib/actions-oclif/device/index.ts b/lib/actions-oclif/device/index.ts index 2007ed370f..ef60697823 100644 --- a/lib/actions-oclif/device/index.ts +++ b/lib/actions-oclif/device/index.ts @@ -69,19 +69,26 @@ export default class DeviceCmd extends Command { const balena = getBalenaSdk(); - const [device, overallStatus] = await Promise.all([ - balena.models.device.get(params.uuid, expandForAppName) as Promise< - ExtendedDevice - >, - // TODO: drop this and add `overall_status` to a $select in the above - // pine query once the overall_status field is moved to open-balena-api. - // See: https://github.com/balena-io/open-balena-api/issues/338 - balena.models.device - .get(params.uuid, { $select: 'overall_status' }) - .then(({ overall_status }) => overall_status) - .catchReturn(''), - ]); - device.status = overallStatus; + const device: ExtendedDevice = await balena.models.device.get(params.uuid, { + $select: [ + 'device_name', + 'id', + 'device_type', + 'overall_status', + 'is_online', + 'ip_address', + 'mac_address', + 'last_connectivity_event', + 'uuid', + 'is_on__commit', + 'supervisor_version', + 'is_web_accessible', + 'note', + 'os_version', + ], + ...expandForAppName, + }); + device.status = device.overall_status; device.dashboard_url = balena.models.device.getDashboardUrl(device.uuid); diff --git a/tests/commands/device/device.spec.ts b/tests/commands/device/device.spec.ts index a3cee520d5..b58c5a56e4 100644 --- a/tests/commands/device/device.spec.ts +++ b/tests/commands/device/device.spec.ts @@ -78,7 +78,6 @@ describe('balena device', function () { it('should list device details for provided uuid', async () => { api.expectGetWhoAmI({ optional: true, persist: true }); api.expectGetMixpanel({ optional: true }); - api.expectGetDeviceStatus(); api.scope .get( /^\/v5\/device\?.+&\$expand=belongs_to__application\(\$select=app_name\)/, @@ -103,7 +102,6 @@ describe('balena device', function () { // e.g. When user has a device associated with app that user is no longer a collaborator of. api.expectGetWhoAmI({ optional: true, persist: true }); api.expectGetMixpanel({ optional: true }); - api.expectGetDeviceStatus(); api.scope .get( /^\/v5\/device\?.+&\$expand=belongs_to__application\(\$select=app_name\)/, diff --git a/tests/test-data/api-response/device-missing-app.json b/tests/test-data/api-response/device-missing-app.json index b224b622cc..66ff2944da 100644 --- a/tests/test-data/api-response/device-missing-app.json +++ b/tests/test-data/api-response/device-missing-app.json @@ -4,54 +4,19 @@ "belongs_to__application": [ ], "id": 1747415, - "belongs_to__user": { - "__deferred": { - "uri": "/resin/user(46272)" - }, - "__id": 46272 - }, "is_managed_by__device": null, - "actor": 4180757, - "should_be_running__release": null, "device_name": "sparkling-wood", "device_type": "raspberrypi4-64", "uuid": "fda508c8583011b8466c26abdd5159f2", "is_on__commit": "18756d3386c25a044db66b89e0409804", "note": null, - "local_id": null, - "status": "Idle", "is_online": false, - "last_connectivity_event": "2019-11-23T00:26:35.074Z", - "is_connected_to_vpn": false, - "last_vpn_event": "2019-11-23T00:26:35.074Z", "ip_address": "192.168.0.112", - "vpn_address": null, - "public_address": "89.186.29.129", + "mac_address": null, "os_version": "balenaOS 2.44.0+rev3", - "os_variant": "dev", "supervisor_version": "10.3.7", - "should_be_managed_by__supervisor_release": null, - "is_managed_by__service_instance": { - "__deferred": { - "uri": "/resin/service_instance(124111)" - }, - "__id": 124111 - }, - "provisioning_progress": null, - "provisioning_state": "", - "download_progress": null, "is_web_accessible": false, - "longitude": "22.5853", - "latitude": "51.2712", - "location": "Lublin, Lublin, Poland", - "custom_longitude": "", - "custom_latitude": "", - "logs_channel": null, - "is_locked_until__date": null, - "is_accessible_by_support_until__date": null, - "created_at": "2019-11-18T12:27:37.423Z", - "is_active": true, - "api_heartbeat_state": "offline", + "overall_status": "idle", "__metadata": { "uri": "/resin/device(@id)?@id=1747415" } diff --git a/tests/test-data/api-response/device.json b/tests/test-data/api-response/device.json index c922c6e36f..58852c08c8 100644 --- a/tests/test-data/api-response/device.json +++ b/tests/test-data/api-response/device.json @@ -8,54 +8,19 @@ } ], "id": 1747415, - "belongs_to__user": { - "__deferred": { - "uri": "/resin/user(46272)" - }, - "__id": 46272 - }, "is_managed_by__device": null, - "actor": 4180757, - "should_be_running__release": null, "device_name": "sparkling-wood", "device_type": "raspberrypi4-64", "uuid": "fda508c8583011b8466c26abdd5159f2", "is_on__commit": "18756d3386c25a044db66b89e0409804", "note": null, - "local_id": null, - "status": "Idle", "is_online": false, - "last_connectivity_event": "2019-11-23T00:26:35.074Z", - "is_connected_to_vpn": false, - "last_vpn_event": "2019-11-23T00:26:35.074Z", "ip_address": "192.168.0.112", - "vpn_address": null, - "public_address": "89.186.29.129", + "mac_address": null, "os_version": "balenaOS 2.44.0+rev3", - "os_variant": "dev", "supervisor_version": "10.3.7", - "should_be_managed_by__supervisor_release": null, - "is_managed_by__service_instance": { - "__deferred": { - "uri": "/resin/service_instance(124111)" - }, - "__id": 124111 - }, - "provisioning_progress": null, - "provisioning_state": "", - "download_progress": null, "is_web_accessible": false, - "longitude": "22.5853", - "latitude": "51.2712", - "location": "Lublin, Lublin, Poland", - "custom_longitude": "", - "custom_latitude": "", - "logs_channel": null, - "is_locked_until__date": null, - "is_accessible_by_support_until__date": null, - "created_at": "2019-11-18T12:27:37.423Z", - "is_active": true, - "api_heartbeat_state": "offline", + "overall_status": "offline", "__metadata": { "uri": "/resin/device(@id)?@id=1747415" }