Reaper decides if a device is present or not. Allows devices to "come back to life" if they start beating again.

This commit is contained in:
Simo Kinnunen
2015-06-03 18:49:42 +09:00
parent 2b84476c42
commit 736b6f769e
8 changed files with 149 additions and 26 deletions

View File

@@ -54,8 +54,8 @@ module.exports = function(options) {
devDealer.on('message', wirerouter()
// Initial device message
.on(wire.DevicePresentMessage, function(channel, message, data) {
dbapi.saveDevice(message.serial, message)
.on(wire.DeviceIntroductionMessage, function(channel, message, data) {
dbapi.saveDeviceInitialState(message.serial, message)
.then(function() {
devDealer.send([
message.provider.channel
@@ -67,6 +67,10 @@ module.exports = function(options) {
})
})
// Workerless messages
.on(wire.DevicePresentMessage, function(channel, message, data) {
dbapi.setDevicePresent(message.serial)
appDealer.send([channel, data])
})
.on(wire.DeviceAbsentMessage, function(channel, message, data) {
dbapi.setDeviceAbsent(message.serial)
appDealer.send([channel, data])

View File

@@ -151,7 +151,7 @@ module.exports = function(options) {
// Tell others we found a device
push.send([
wireutil.global
, wireutil.envelope(new wire.DevicePresentMessage(
, wireutil.envelope(new wire.DeviceIntroductionMessage(
device.id
, wireutil.toDeviceStatus(device.type)
, new wire.ProviderMessage(

View File

@@ -56,7 +56,17 @@ module.exports = function(options) {
lifecycle.fatal()
})
ttlset.on('timeout', function(serial) {
ttlset.on('insert', function(serial) {
log.info('Device "%s" is present', serial)
push.send([
wireutil.global
, wireutil.envelope(new wire.DevicePresentMessage(
serial
))
])
})
ttlset.on('drop', function(serial) {
log.info('Reaping device "%s" due to heartbeat timeout', serial)
push.send([
wireutil.global
@@ -73,7 +83,7 @@ module.exports = function(options) {
.then(function(list) {
var now = Date.now()
list.forEach(function(device) {
ttlset.bump(device.serial, now)
ttlset.bump(device.serial, now, TtlSet.SILENT)
})
})
})
@@ -81,14 +91,14 @@ module.exports = function(options) {
function listenToChanges() {
sub.on('message', wirerouter()
.on(wire.DevicePresentMessage, function(channel, message) {
.on(wire.DeviceIntroductionMessage, function(channel, message) {
ttlset.bump(message.serial, Date.now())
})
.on(wire.DeviceHeartbeatMessage, function(channel, message) {
ttlset.bump(message.serial, Date.now())
})
.on(wire.DeviceAbsentMessage, function(channel, message) {
ttlset.drop(message.serial)
ttlset.drop(message.serial, TtlSet.SILENT)
})
.handler())
}

View File

@@ -120,26 +120,35 @@ module.exports = function(options) {
.on(wire.DeviceLogMessage, function(channel, message) {
socket.emit('device.log', message)
})
.on(wire.DevicePresentMessage, function(channel, message) {
.on(wire.DeviceIntroductionMessage, function(channel, message) {
socket.emit('device.add', {
important: true
, data: {
serial: message.serial
, present: false
, provider: message.provider
, present: true
, owner: null
, status: message.status
, ready: false
, reverseForwards: []
}
})
})
.on(wire.DevicePresentMessage, function(channel, message) {
socket.emit('device.change', {
important: true
, data: {
serial: message.serial
, present: true
}
})
})
.on(wire.DeviceAbsentMessage, function(channel, message) {
socket.emit('device.remove', {
important: true
, data: {
serial: message.serial
, present: false
, ready: false
, using: false
, likelyLeaveReason: 'device_absent'
}
})