1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-04 02:09:32 +02:00

Reap dead devices using timeouts. Previously, if a provider died without being able to clean up properly, the device would stay as a ghost.

This commit is contained in:
Simo Kinnunen 2014-02-25 20:45:29 +09:00
parent f24e777961
commit 4896ca406e
10 changed files with 189 additions and 3 deletions

View file

@ -7,6 +7,10 @@ var wireutil = require('../wire/util')
var dbapi = Object.create(null)
dbapi.close = function(options) {
return db.close(options)
}
dbapi.saveUserAfterLogin = function(user) {
return db.run(r.table('users').get(user.email).update({
name: user.name
@ -56,6 +60,7 @@ dbapi.saveDevice = function(serial, device) {
, status: device.status
, statusChangedAt: r.now()
, createdAt: r.now()
, lastHeartbeatAt: r.now()
}
, {
upsert: true
@ -84,6 +89,7 @@ dbapi.unsetDeviceOwner = function(serial, owner) {
dbapi.setDeviceAbsent = function(serial) {
return db.run(r.table('devices').get(serial).update({
present: false
, lastHeartbeatAt: null
}))
}
@ -114,4 +120,26 @@ dbapi.loadDevice = function(serial) {
return db.run(r.table('devices').get(serial))
}
dbapi.updateDeviceHeartbeat = function(serial) {
return db.run(
r.table('devices').get(serial).update({
lastHeartbeatAt: r.now()
})
, {
noreply: true
, durability: 'soft'
}
)
}
dbapi.getDeadDevices = function(timeout) {
return db.run(
r.table('devices')
.between(null, r.now().sub(timeout / 1000), {
index: 'lastHeartbeatAt'
})
.pluck('serial')
)
}
module.exports = dbapi