Skip to content
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
3 changes: 1 addition & 2 deletions lib/units/api/controllers/autotests.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ function captureDevices(req, res) {
const privilege = req.user.privilege
const username = req.user.name
const runUrl = req.query.runUrl
let timeout = req.query.timeout
timeout = Number(timeout) * 1000 // because Date use milliseconds
const timeout = Number(req.query.timeout) * 1000 // because Date use milliseconds
const now = Date.now()
const start = new Date(now)
const stop = new Date(now + timeout)
Expand Down
5 changes: 1 addition & 4 deletions lib/units/api/controllers/groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -265,10 +265,7 @@ function addGroupDevices(req, res) {
}
if (amount) {
return dbapi.loadBookableDevicesWithFiltersLock(req.user.groups.subscribed, abi, model, type, sdk, version, function(devices) {
let serials = []
if (devices) {
serials = devices.map(device => device.serial)
}
const serials = devices?.map(device => device.serial) || []
if ((serials.length > 0 && !needAmount) || (needAmount && serials.length === amount)) {
return _addGroupDevices(group, serials)
}
Expand Down
13 changes: 6 additions & 7 deletions lib/units/device/plugins/group.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ export default syrup.serial()
.dependency(sub)
.dependency(channels)
.define(async function(options, solo, ident, /** @type {any} */ service, router, push, sub, channels) {
var log = logger.createLogger('device:plugins:group')
var currentGroup = null
const log = logger.createLogger('device:plugins:group')
let currentGroup = null

/** @type {any} */
var plugin = new events.EventEmitter()
const plugin = new events.EventEmitter()

await db.connect()

Expand All @@ -48,10 +48,9 @@ export default syrup.serial()
}
log.info('Update timeout for ', apiutil.QUARTER_MINUTES)
channels.updateTimeout(currentGroup.group, apiutil.QUARTER_MINUTES)
let newTimeout = channels.getTimeout(currentGroup.group)
dbapi.enhanceStatusChangedAt(options.serial, newTimeout).then(() => {
return currentGroup
})

const newTimeout = channels.getTimeout(currentGroup.group)
dbapi.enhanceStatusChangedAt(options.serial, newTimeout)
})
.catch(grouputil.NoGroupError, function() {
currentGroup = newGroup
Expand Down
157 changes: 77 additions & 80 deletions lib/units/processor/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,111 +83,108 @@ export default db.ensureConnectivity(async function(options) {
.on(wire.TemporarilyUnavailableMessage, defaultWireHandler)
.on(wire.UpdateRemoteConnectUrl, defaultWireHandler)
.on(wire.InstalledApplications, defaultWireHandler)
.on(wire.DeviceIntroductionMessage, (channel, message, data) => {
dbapi.saveDeviceInitialState(message.serial, message).then(function() {
devDealer.send([
message.provider.channel,
wireutil.envelope(new wire.DeviceRegisteredMessage(message.serial))
])
appDealer.send([channel, data])
})
.on(wire.DeviceIntroductionMessage, async(channel, message, data) => {
await dbapi.saveDeviceInitialState(message.serial, message)
devDealer.send([
message.provider.channel,
wireutil.envelope(new wire.DeviceRegisteredMessage(message.serial))
])
appDealer.send([channel, data])
})
.on(wire.InitializeIosDeviceState, (channel, message, data) => {
dbapi.initializeIosDeviceState(options.publicIp, message)
})
.on(wire.DevicePresentMessage, (channel, message, data) => {
dbapi.setDevicePresent(message.serial)
.on(wire.DevicePresentMessage, async(channel, message, data) => {
await dbapi.setDevicePresent(message.serial)
appDealer.send([channel, data])
})
.on(wire.DeviceAbsentMessage, (channel, message, data) => {
.on(wire.DeviceAbsentMessage, async(channel, message, data) => {
if (!message.applications) {
dbapi.setDeviceAbsent(message.serial)
await dbapi.setDeviceAbsent(message.serial)
appDealer.send([channel, data])
}
})
.on(wire.DeviceStatusMessage, (channel, message, data) => {
dbapi.saveDeviceStatus(message.serial, message.status)
appDealer.send([channel, data])
})
.on(wire.DeviceReadyMessage, (channel, message, data) => {
dbapi.setDeviceReady(message.serial, message.channel).then(function() {
devDealer.send([message.channel, wireutil.envelope(new wire.ProbeMessage())])
appDealer.send([channel, data])
})
.on(wire.DeviceReadyMessage, async(channel, message, data) => {
await dbapi.setDeviceReady(message.serial, message.channel)
devDealer.send([message.channel, wireutil.envelope(new wire.ProbeMessage())])
appDealer.send([channel, data])
})
.on(wire.JoinGroupByAdbFingerprintMessage, (channel, message, data) => {
dbapi
.lookupUserByAdbFingerprint(message.fingerprint)
.then(function(user) {
if (user) {
devDealer.send([
channel,
wireutil.envelope(new wire.AutoGroupMessage(new wire.OwnerMessage(user.email, user.name, user.group), message.fingerprint))
])
}
else if (message.currentGroup) {
appDealer.send([
message.currentGroup,
wireutil.envelope(new wire.JoinGroupByAdbFingerprintMessage(message.serial, message.fingerprint, message.comment))
])
}
})
.catch(function(err) {
log.error('Unable to lookup user by ADB fingerprint "%s"', message.fingerprint, err.stack)
})
.on(wire.JoinGroupByAdbFingerprintMessage, async(channel, message, data) => {
try {
const user = await dbapi.lookupUserByAdbFingerprint(message.fingerprint)
if (user) {
devDealer.send([
channel,
wireutil.envelope(new wire.AutoGroupMessage(new wire.OwnerMessage(user.email, user.name, user.group), message.fingerprint))
])
return
}
appDealer.send([
message.currentGroup,
wireutil.envelope(new wire.JoinGroupByAdbFingerprintMessage(message.serial, message.fingerprint, message.comment))
])
}
catch (/** @type any */ err) {
log.error('Unable to lookup user by ADB fingerprint "%s"', message.fingerprint, err.stack)
}
})
.on(wire.JoinGroupByVncAuthResponseMessage, (channel, message, data) => {
dbapi
.lookupUserByVncAuthResponse(message.response, message.serial)
.then(function(user) {
if (user) {
devDealer.send([
channel,
wireutil.envelope(new wire.AutoGroupMessage(new wire.OwnerMessage(user.email, user.name, user.group), message.response))
])
}
else if (message.currentGroup) {
appDealer.send([
message.currentGroup,
wireutil.envelope(new wire.JoinGroupByVncAuthResponseMessage(message.serial, message.response))
])
}
})
.catch(function(err) {
log.error('Unable to lookup user by VNC auth response "%s"', message.response, err.stack)
})
.on(wire.JoinGroupByVncAuthResponseMessage, async(channel, message, data) => {
try {
const user = await dbapi.lookupUserByVncAuthResponse(message.response, message.serial)
if (user) {
devDealer.send([
channel,
wireutil.envelope(new wire.AutoGroupMessage(new wire.OwnerMessage(user.email, user.name, user.group), message.response))
])
return
}

appDealer.send([
message.currentGroup,
wireutil.envelope(new wire.JoinGroupByVncAuthResponseMessage(message.serial, message.response))
])
}
catch (/** @type any */ err) {
log.error('Unable to lookup user by VNC auth response "%s"', message.response, err.stack)
}
})
.on(wire.ConnectStartedMessage, (channel, message, data) => {
dbapi.setDeviceConnectUrl(message.serial, message.url)
.on(wire.ConnectStartedMessage, async(channel, message, data) => {
await dbapi.setDeviceConnectUrl(message.serial, message.url)
appDealer.send([channel, data])
})
.on(wire.ConnectStoppedMessage, (channel, message, data) => {
dbapi.unsetDeviceConnectUrl(message.serial)
.on(wire.ConnectStoppedMessage, async(channel, message, data) => {
await dbapi.unsetDeviceConnectUrl(message.serial)
appDealer.send([channel, data])
})
.on(wire.JoinGroupMessage, (channel, message, data) => {
dbapi.setDeviceOwner(message.serial, message.owner)
if (message.usage) {
dbapi.setDeviceUsage(message.serial, message.usage)
}
.on(wire.JoinGroupMessage, async(channel, message, data) => {
await Promise.all([
dbapi.setDeviceOwner(message.serial, message.owner),

const deviceUsage = message?.usage ? `device_${message.usage}` : 'device_use'
dbapi.sendEvent(deviceUsage
, {}
, {deviceSerial: message.serial, userEmail: message.owner.email, groupId: message.owner.group}
, Date.now()
)
message.usage &&
dbapi.setDeviceUsage(message.serial, message.usage),

dbapi.sendEvent(`device_${message.usage || 'use'}`
, {}
, {deviceSerial: message.serial, userEmail: message.owner.email, groupId: message.owner.group}
, Date.now()
)
])
appDealer.send([channel, data])
})
.on(wire.LeaveGroupMessage, (channel, message, data) => {
dbapi.unsetDeviceOwner(message.serial)
dbapi.unsetDeviceUsage(message.serial)
dbapi.sendEvent('device_leave'
, {}
, {deviceSerial: message.serial, userEmail: message.owner.email, groupId: message.owner.group}
, Date.now()
)
.on(wire.LeaveGroupMessage, async(channel, message, data) => {
await Promise.all([
dbapi.unsetDeviceOwner(message.serial),
dbapi.unsetDeviceUsage(message.serial),
dbapi.sendEvent('device_leave'
, {}
, {deviceSerial: message.serial, userEmail: message.owner.email, groupId: message.owner.group}
, Date.now()
)
])
appDealer.send([channel, data])
})
.on(wire.DeviceIdentityMessage, (channel, message, data) => {
Expand Down
Loading