UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

48 lines 2.48 kB
const TABLE = 'edge_node_presence'; export const createGetEdgeInstances = (db) => async () => { const rows = await db .with('months', (qb) => qb.fromRaw('generate_series(0, 11) AS gs').select(db.raw("(date_trunc('month', NOW()) - (gs * INTERVAL '1 month'))::timestamptz AS mon_start"), db.raw(` ( CASE WHEN gs = 0 THEN NOW() ELSE (date_trunc('month', NOW()) - ((gs - 1) * INTERVAL '1 month')) END )::timestamptz AS mon_end `), db.raw("to_char((date_trunc('month', NOW()) - (gs * INTERVAL '1 month')),'YYYY-MM') AS key"), db.raw(` FLOOR(EXTRACT(EPOCH FROM ( ( CASE WHEN gs = 0 THEN NOW() ELSE (date_trunc('month', NOW()) - ((gs - 1) * INTERVAL '1 month')) END ) - (date_trunc('month', NOW()) - (gs * INTERVAL '1 month')) )) / 300)::int AS expected `))) .with('range', (qb) => qb .from('months') .select(db.raw('MIN(mon_start) AS min_start'), db.raw('MAX(mon_end) AS max_end'))) .with('buckets', (qb) => qb .from(TABLE) .joinRaw('CROSS JOIN range') .whereRaw('bucket_ts >= range.min_start AND bucket_ts < range.max_end') .groupBy('bucket_ts') .select(db.raw('bucket_ts'), db.raw('COUNT(DISTINCT node_ephem_id)::int AS active_nodes'))) .from('months as m') .joinRaw('LEFT JOIN buckets b ON b.bucket_ts >= m.mon_start AND b.bucket_ts < m.mon_end') .groupBy('m.key', 'm.expected') .orderBy('m.key', 'desc') .select(db.raw('m.key'), db.raw(` COALESCE( ROUND((SUM(b.active_nodes)::numeric) / NULLIF(m.expected, 0), 3), 0 ) AS value `)); const series = {}; for (const r of rows) { series[r.key] = Number(r.value ?? 0); } return series; }; export const createFakeGetEdgeInstances = (edgeInstances = {}) => () => Promise.resolve(edgeInstances); //# sourceMappingURL=getEdgeInstances.js.map