in source/services/api/status/lib/status.js [47:128]
async getDeviceStatus(ticket, deviceId) {
const {sub} = ticket;
try {
let validRegistration = await this._validateUserDeviceRegistration(
deviceId,
sub
);
if (validRegistration) {
const iot = new AWS.Iot({
region: process.env.AWS_REGION,
});
const _endP = await iot.describeEndpoint().promise();
const iotdata = new AWS.IotData({
endpoint: _endP.endpointAddress,
apiVersion: '2015-05-28',
});
// Gets thing shadow
const _shadow = await iotdata
.getThingShadow({thingName: deviceId})
.promise();
Logger.log(
Logger.levels.ROBUST,
JSON.stringify(`current shadow document: ${_shadow.payload}`)
);
let payload = _shadow.payload;
if (typeof _shadow.payload === 'string') {
payload = JSON.parse(_shadow.payload);
}
// Gets thing connectivity status
const queryString = `thingName:${deviceId}`;
const params = {
queryString: queryString,
indexName: 'AWS_Things',
};
let result = await iot.searchIndex(params).promise();
let things = result.things;
if (things.length === 0) {
payload['connected'] = false;
} else {
payload['connected'] = things[0].connectivity.connected;
}
_shadow.payload = payload;
//returning sample status temporarily
return Promise.resolve(_shadow.payload);
} else {
Logger.error(
Logger.levels.INFO,
`[MissingRegistration] No registration found for device ${deviceId}.`
);
return Promise.reject({
code: 400,
error: 'MissingRegistration',
message: `No registration found for device "${deviceId}".`,
});
}
} catch (err) {
Logger.error(Logger.levels.INFO, err);
Logger.error(
Logger.levels.INFO,
`Error occurred while attempting to retrieve status for device ${deviceId}.`
);
// If the thing shadow is not created, return an empty data.
if (err.code === 'ResourceNotFoundException') {
return Promise.resolve({});
}
return Promise.reject({
code: 500,
error: 'StatusRetrieveFailure',
message: `Error occurred while attempting to retrieve status for device "${deviceId}".`,
});
}
}