mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Added cleaner script
This commit is contained in:
		
							parent
							
								
									dc5e459d3a
								
							
						
					
					
						commit
						83a443dbeb
					
				
							
								
								
									
										57
									
								
								packages/unleash-api/lib/db/client-metrics-store.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								packages/unleash-api/lib/db/client-metrics-store.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | |||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | const logger = require('../logger'); | ||||||
|  | const METRICS_COLUMNS = ['id', 'created_at', 'metrics']; | ||||||
|  | const TABLE = 'client_metrics'; | ||||||
|  | 
 | ||||||
|  | const mapRow = (row) => ({ | ||||||
|  |     id: row.id, | ||||||
|  |     createdAt: row.created_at, | ||||||
|  |     metrics: row.metrics, | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | class ClientMetricsStore { | ||||||
|  | 
 | ||||||
|  |     constructor (db) { | ||||||
|  |         this.db = db; | ||||||
|  |         this._removeMetricsOlderThanOneHour(); | ||||||
|  | 
 | ||||||
|  |         setInterval(() => this._removeMetricsOlderThanOneHour(), 60 * 60 * 1000).unref(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     _removeMetricsOlderThanOneHour () { | ||||||
|  |         this.db(TABLE) | ||||||
|  |             .whereRaw('created_at < now() - interval \'1 hour\'') | ||||||
|  |             .del() | ||||||
|  |             .then((res) => logger.info(`Delted ${res} metrics`)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Insert new client metrics
 | ||||||
|  |     insert (metrics) { | ||||||
|  |         return this.db(TABLE).insert({ metrics }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Used at startup to load all metrics last week into memory!
 | ||||||
|  |     getMetricsLastHour () { | ||||||
|  |         return this.db | ||||||
|  |             .select(METRICS_COLUMNS) | ||||||
|  |             .from(TABLE) | ||||||
|  |             .limit(2000) | ||||||
|  |             .whereRaw('created_at > now() - interval \'1 hour\'') | ||||||
|  |             .orderBy('created_at', 'asc') | ||||||
|  |             .map(mapRow); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Used to poll for new metrics
 | ||||||
|  |     getNewMetrics (lastKnownId) { | ||||||
|  |         return this.db | ||||||
|  |             .select(METRICS_COLUMNS) | ||||||
|  |             .from(TABLE) | ||||||
|  |             .limit(1000) | ||||||
|  |             .where('id', '>', lastKnownId) | ||||||
|  |             .orderBy('created_at', 'asc') | ||||||
|  |             .map(mapRow); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | module.exports = ClientMetricsStore; | ||||||
| @ -1,43 +0,0 @@ | |||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| const METRICS_COLUMNS = ['id', 'created_at', 'metrics']; |  | ||||||
| const TABLE = 'client_metrics'; |  | ||||||
| 
 |  | ||||||
| module.exports = function (db) { |  | ||||||
|     // Insert new client metrics
 |  | ||||||
|     function insert (metrics) { |  | ||||||
|         return db(TABLE).insert({ metrics }); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Used at startup to load all metrics last week into memory!
 |  | ||||||
|     function getMetricsLastHour () { |  | ||||||
|         return db |  | ||||||
|             .select(METRICS_COLUMNS) |  | ||||||
|             .from(TABLE) |  | ||||||
|             .limit(2000) |  | ||||||
|             .whereRaw('created_at > now() - interval \'1 hour\'') |  | ||||||
|             .orderBy('created_at', 'asc') |  | ||||||
|             .map(mapRow); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // Used to poll for new metrics
 |  | ||||||
|     function getNewMetrics (lastKnownId) { |  | ||||||
|         return db |  | ||||||
|             .select(METRICS_COLUMNS) |  | ||||||
|             .from(TABLE) |  | ||||||
|             .limit(1000) |  | ||||||
|             .where('id', '>', lastKnownId) |  | ||||||
|             .orderBy('created_at', 'asc') |  | ||||||
|             .map(mapRow); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function mapRow (row) { |  | ||||||
|         return { |  | ||||||
|             id: row.id, |  | ||||||
|             createdAt: row.created_at, |  | ||||||
|             metrics: row.metrics, |  | ||||||
|         }; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return { insert, getMetricsLastHour, getNewMetrics }; |  | ||||||
| }; |  | ||||||
| @ -4,7 +4,7 @@ const EventStore = require('./event-store'); | |||||||
| const FeatureToggleStore = require('./feature-toggle-store'); | const FeatureToggleStore = require('./feature-toggle-store'); | ||||||
| const StrategyStore = require('./strategy-store'); | const StrategyStore = require('./strategy-store'); | ||||||
| const clientInstancesDbCreator = require('./client-instances'); | const clientInstancesDbCreator = require('./client-instances'); | ||||||
| const clientMetricsDbCreator = require('./client-metrics'); | const ClientMetricsStore = require('./client-metrics-store'); | ||||||
| const clientStrategiesDbCreator = require('./client-strategies'); | const clientStrategiesDbCreator = require('./client-strategies'); | ||||||
| 
 | 
 | ||||||
| module.exports = (db) => { | module.exports = (db) => { | ||||||
| @ -15,7 +15,7 @@ module.exports = (db) => { | |||||||
|         featureToggleStore: new FeatureToggleStore(db, eventStore), |         featureToggleStore: new FeatureToggleStore(db, eventStore), | ||||||
|         strategyStore: new StrategyStore(db, eventStore), |         strategyStore: new StrategyStore(db, eventStore), | ||||||
|         clientInstancesDb: clientInstancesDbCreator(db), |         clientInstancesDb: clientInstancesDbCreator(db), | ||||||
|         clientMetricsDb: clientMetricsDbCreator(db), |         clientMetricsStore: new ClientMetricsStore(db), | ||||||
|         clientStrategiesDb: clientStrategiesDbCreator(db), |         clientStrategiesDb: clientStrategiesDbCreator(db), | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -6,12 +6,12 @@ const ClientMetricsService = require('../client-metrics/service'); | |||||||
| 
 | 
 | ||||||
| module.exports = function (app, config) { | module.exports = function (app, config) { | ||||||
|     const { |     const { | ||||||
|         clientMetricsDb, |         clientMetricsStore, | ||||||
|         clientStrategiesDb, |         clientStrategiesDb, | ||||||
|         clientInstancesDb, |         clientInstancesDb, | ||||||
|     } = config; |     } = config; | ||||||
|     const metrics = new ClientMetrics(); |     const metrics = new ClientMetrics(); | ||||||
|     const service = new ClientMetricsService(clientMetricsDb); |     const service = new ClientMetricsService(clientMetricsStore); | ||||||
| 
 | 
 | ||||||
|     service.on('metrics', (entries) => { |     service.on('metrics', (entries) => { | ||||||
|         entries.forEach((m) => { |         entries.forEach((m) => { | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ function createApp (options) { | |||||||
|         featureToggleStore, |         featureToggleStore, | ||||||
|         strategyStore, |         strategyStore, | ||||||
|         clientInstancesDb, |         clientInstancesDb, | ||||||
|         clientMetricsDb, |         clientMetricsStore, | ||||||
|         clientStrategiesDb, |         clientStrategiesDb, | ||||||
|     } = require('./lib/db')(db); |     } = require('./lib/db')(db); | ||||||
| 
 | 
 | ||||||
| @ -30,7 +30,7 @@ function createApp (options) { | |||||||
|         eventStore, |         eventStore, | ||||||
|         featureToggleStore, |         featureToggleStore, | ||||||
|         strategyStore, |         strategyStore, | ||||||
|         clientMetricsDb, |         clientMetricsStore, | ||||||
|         clientStrategiesDb, |         clientStrategiesDb, | ||||||
|         clientInstancesDb, |         clientInstancesDb, | ||||||
|     }; |     }; | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ const { | |||||||
|     strategyStore, |     strategyStore, | ||||||
|     clientInstancesDb, |     clientInstancesDb, | ||||||
|     clientStrategiesDb, |     clientStrategiesDb, | ||||||
|     clientMetricsDb, |     clientMetricsStore, | ||||||
| } = require('../../lib/db')(knex); | } = require('../../lib/db')(knex); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -24,7 +24,7 @@ const app = require('../../app')({ | |||||||
|     strategyStore, |     strategyStore, | ||||||
|     clientStrategiesDb, |     clientStrategiesDb, | ||||||
|     clientInstancesDb, |     clientInstancesDb, | ||||||
|     clientMetricsDb, |     clientMetricsStore, | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| BPromise.promisifyAll(request); | BPromise.promisifyAll(request); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user