1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-22 19:07:54 +01:00
unleash.unleash/lib/db/client-instance-store.js
2020-02-20 08:30:41 +01:00

97 lines
2.5 KiB
JavaScript

/* eslint camelcase: "off" */
'use strict';
const logger = require('../logger');
const COLUMNS = ['app_name', 'instance_id', 'client_ip', 'last_seen', 'created_at'];
const TABLE = 'client_instances';
const mapRow = (row) => ({
appName: row.app_name,
instanceId: row.instance_id,
clientIp: row.client_ip,
lastSeen: row.last_seen,
createdAt: row.created_at,
});
// const mapAppsRow = (row) => ({
// appName: row.app_name,
// createdAt: row.created_at,
// });
class ClientInstanceStore {
constructor (db) {
this.db = db;
setTimeout(() => this._removeInstancesOlderThanTwoDays(), 10).unref();
setInterval(() => this._removeInstancesOlderThanTwoDays(), 24 * 61 * 60 * 1000).unref();
}
_removeInstancesOlderThanTwoDays () {
this.db(TABLE)
.whereRaw('created_at < now() - interval \'2 days\'')
.del()
.then((res) => res > 0 && logger.info(`Deleted ${res} instances`));
}
updateRow (details) {
return this.db(TABLE)
.where('app_name', details.appName)
.where('instance_id', details.instanceId)
.update({
last_seen: 'now()',
client_ip: details.clientIp,
});
}
insertNewRow (details) {
return this.db(TABLE).insert({
app_name: details.appName,
instance_id: details.instanceId,
client_ip: details.clientIp,
});
}
insert (details) {
return this.db(TABLE)
.count('*')
.where('app_name', details.appName)
.where('instance_id', details.instanceId)
.map(row => ({ count: row.count }))
.then(rows => {
if (rows[0].count > 0) {
return this.updateRow(details);
} else {
return this.insertNewRow(details);
}
});
}
getAll () {
return this.db
.select(COLUMNS)
.from(TABLE)
.orderBy('last_seen', 'desc')
.map(mapRow);
}
getByAppName (appName) {
return this.db
.select(COLUMNS)
.from(TABLE)
.where('app_name', appName)
.orderBy('last_seen', 'desc')
.map(mapRow);
}
getApplications () {
return this.db
.distinct('app_name')
.select(['app_name'])
.from(TABLE)
.orderBy('app_name', 'desc')
.map(mapRow);
}
};
module.exports = ClientInstanceStore;