mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	client-instances WIP
This commit is contained in:
		
							parent
							
								
									bc707f3bc0
								
							
						
					
					
						commit
						7f452d1366
					
				
							
								
								
									
										60
									
								
								packages/unleash-api/lib/db/client-instances.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								packages/unleash-api/lib/db/client-instances.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
/* eslint camelcase: "off" */
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const COLUMNS = ['app_name', 'instance_id', 'client_ip', 'last_seen', 'created_at'];
 | 
			
		||||
const TABLE = 'client_instances';
 | 
			
		||||
 | 
			
		||||
module.exports = function (db) {
 | 
			
		||||
    function updateRow (details) {
 | 
			
		||||
        return db(TABLE)
 | 
			
		||||
            .where('app_name', details.appName)
 | 
			
		||||
            .where('instance_id', details.instanceId)
 | 
			
		||||
            .where('client_ip', details.clientIp)
 | 
			
		||||
            .update({
 | 
			
		||||
                last_seen: 'now()',
 | 
			
		||||
            });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function insertNewRow (details) {
 | 
			
		||||
        return db(TABLE).insert({
 | 
			
		||||
            app_name: details.appName,
 | 
			
		||||
            instance_id: details.instanceId,
 | 
			
		||||
            client_ip: details.clientIp,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function insert (details) {
 | 
			
		||||
        return db(TABLE)
 | 
			
		||||
            .count('*')
 | 
			
		||||
            .where('app_name', details.appName)
 | 
			
		||||
            .where('instance_id', details.instanceId)
 | 
			
		||||
            .where('client_ip', details.clientIp)
 | 
			
		||||
            .map(row => ({ count: row.count }))
 | 
			
		||||
            .then(rows => {
 | 
			
		||||
                if (rows[0].count > 0) {
 | 
			
		||||
                    return updateRow(details);
 | 
			
		||||
                } else {
 | 
			
		||||
                    return insertNewRow(details);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function getAll () {
 | 
			
		||||
        return db
 | 
			
		||||
            .select(COLUMNS)
 | 
			
		||||
            .from(TABLE)
 | 
			
		||||
            .map(mapRow);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function mapRow (row) {
 | 
			
		||||
        return {
 | 
			
		||||
            appName: row.app_name,
 | 
			
		||||
            instanceId: row.instance_id,
 | 
			
		||||
            clientIp: row.client_ip,
 | 
			
		||||
            lastSeen: row.last_seen,
 | 
			
		||||
            createdAt: row.created_at,
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return { insert, getAll };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										10
									
								
								packages/unleash-api/lib/db/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								packages/unleash-api/lib/db/index.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
const clientInstancesDbCreator = require('./client-instances');
 | 
			
		||||
const clientMetricsDbCreator = require('./client-metrics');
 | 
			
		||||
const clientStrategiesDbCreator = require('./client-strategies');
 | 
			
		||||
 | 
			
		||||
module.exports = (db) => ({
 | 
			
		||||
    clientInstancesDb: clientInstancesDbCreator(db),
 | 
			
		||||
    clientMetricsDb: clientMetricsDbCreator(db),
 | 
			
		||||
    clientStrategiesDb: clientStrategiesDbCreator(db),
 | 
			
		||||
});
 | 
			
		||||
@ -5,9 +5,9 @@ const ClientMetrics = require('../client-metrics');
 | 
			
		||||
const ClientMetricsService = require('../client-metrics-service');
 | 
			
		||||
 | 
			
		||||
module.exports = function (app, config) {
 | 
			
		||||
    const { metricsDb, clientStrategiesDb } = config;
 | 
			
		||||
    const { clientMetricsDb, clientStrategiesDb } = config;
 | 
			
		||||
    const metrics = new ClientMetrics();
 | 
			
		||||
    const service = new ClientMetricsService(metricsDb);
 | 
			
		||||
    const service = new ClientMetricsService(clientMetricsDb);
 | 
			
		||||
 | 
			
		||||
    // Just som dummo demo data
 | 
			
		||||
    clientStrategiesDb.insertOrUpdate('demo-app', ['default', 'test']).then(() => console.log('inserted client_strategies'));
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,3 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
module.exports = require('../scripts/migration-runner').create('010-create-client-instances');
 | 
			
		||||
@ -0,0 +1 @@
 | 
			
		||||
DROP TABLE client_instances;
 | 
			
		||||
@ -0,0 +1,7 @@
 | 
			
		||||
CREATE TABLE client_instances (
 | 
			
		||||
  app_name varchar(255),
 | 
			
		||||
  instance_id varchar(255),
 | 
			
		||||
  client_ip varchar(255),
 | 
			
		||||
  last_seen timestamp default now(),
 | 
			
		||||
  created_at timestamp default now()
 | 
			
		||||
);
 | 
			
		||||
@ -18,8 +18,7 @@ function createApp (options) {
 | 
			
		||||
    const eventStore = new EventStore(eventDb);
 | 
			
		||||
    const featureDb = require('./lib/db/feature')(db, eventStore);
 | 
			
		||||
    const strategyDb = require('./lib/db/strategy')(db, eventStore);
 | 
			
		||||
    const metricsDb = require('./lib/db/metrics')(db);
 | 
			
		||||
    const clientStrategiesDb = require('./lib/db/client-strategies')(db);
 | 
			
		||||
    const { clientInstancesDb, clientMetricsDb, clientStrategiesDb } = require('./lib/db')(db);
 | 
			
		||||
 | 
			
		||||
    const config = {
 | 
			
		||||
        baseUriPath: options.baseUriPath,
 | 
			
		||||
@ -30,8 +29,9 @@ function createApp (options) {
 | 
			
		||||
        eventStore,
 | 
			
		||||
        featureDb,
 | 
			
		||||
        strategyDb,
 | 
			
		||||
        metricsDb,
 | 
			
		||||
        clientMetricsDb,
 | 
			
		||||
        clientStrategiesDb,
 | 
			
		||||
        clientInstancesDb,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const app = require('./app')(config);
 | 
			
		||||
 | 
			
		||||
@ -11,8 +11,7 @@ const EventStore = require('../../lib/event-store');
 | 
			
		||||
const eventStore = new EventStore(eventDb);
 | 
			
		||||
const featureDb = require('../../lib/db/feature')(knex, eventStore);
 | 
			
		||||
const strategyDb = require('../../lib/db/strategy')(knex, eventStore);
 | 
			
		||||
const metricsDb = require('../../lib/db/metrics')(knex);
 | 
			
		||||
const clientStrategiesDb = require('../../lib/db/client-strategies')(knex);
 | 
			
		||||
const { clientInstancesDb, clientStrategiesDb, clientMetricsDb } = require('../../lib/db')(knex);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const app = require('../../app')({
 | 
			
		||||
@ -22,8 +21,9 @@ const app = require('../../app')({
 | 
			
		||||
    eventStore,
 | 
			
		||||
    featureDb,
 | 
			
		||||
    strategyDb,
 | 
			
		||||
    metricsDb,
 | 
			
		||||
    clientStrategiesDb,
 | 
			
		||||
    clientInstancesDb,
 | 
			
		||||
    clientMetricsDb,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
BPromise.promisifyAll(request);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user