Optimize machine pings query (#222)

* refactor recordPing method

* optimize queries

* migrate machine_pings

remove id, serial_number
add primary key on device_id
add unique constraint on device_id

* remove filelds from query, rename migration, delete duplicate migration

* truncate machine_pings in migration
This commit is contained in:
Zoran Joka 2018-11-21 11:08:19 +01:00 committed by Josh Harvey
parent e7bb29341d
commit 13040f41a1
3 changed files with 22 additions and 12 deletions

View file

@ -130,9 +130,7 @@ function checkStuckScreen (deviceEvents) {
function checkPing (deviceId) {
const sql = `select (EXTRACT(EPOCH FROM (now() - created))) * 1000 AS age from machine_pings
where device_id=$1
order by created desc
limit 1`
where device_id=$1`
return db.oneOrNone(sql, [deviceId])
.then(row => {

View file

@ -203,7 +203,7 @@ function plugins (settings, deviceId) {
const tickerPromises = cryptoCodes.map(c => ticker.getRates(settings, fiatCode, c))
const balancePromises = cryptoCodes.map(c => fiatBalance(fiatCode, c))
const testnetPromises = cryptoCodes.map(c => wallet.cryptoNetwork(settings, c))
const pingPromise = recordPing(serialNumber, deviceTime, deviceRec)
const pingPromise = recordPing(deviceTime)
const currentConfigVersionPromise = fetchCurrentConfigVersion()
const promises = [
@ -236,19 +236,14 @@ function plugins (settings, deviceId) {
return wallet.sendCoins(settings, tx.toAddress, tx.cryptoAtoms, tx.cryptoCode)
}
function recordPing (serialNumber, deviceTime, rec) {
const machinePings = {
id: uuid.v4(),
device_id: deviceId,
serial_number: serialNumber,
device_time: deviceTime
}
function recordPing (deviceTime) {
const devices = {
last_online: deviceTime
}
return Promise.all([
db.none(pgp.helpers.insert(machinePings, null, 'machine_pings')),
db.none(`insert into machine_pings(device_id, device_time) values($1, $2)
ON CONFLICT (device_id) DO UPDATE SET device_time = $2`, [deviceId, deviceTime]),
db.none(pgp.helpers.update(devices, null, 'devices') + 'WHERE device_id = ${deviceId}', { deviceId })
])
}

View file

@ -0,0 +1,17 @@
const db = require('./db')
exports.up = function(next) {
var sql = [
'TRUNCATE TABLE machine_pings',
'ALTER TABLE machine_pings DROP id',
'ALTER TABLE machine_pings DROP serial_number',
'ALTER TABLE machine_pings ADD CONSTRAINT PK_device_id PRIMARY KEY (device_id)',
'ALTER TABLE machine_pings ADD CONSTRAINT U_device_id UNIQUE(device_id)'
]
db.multi(sql, next)
};
exports.down = function(next) {
next();
};