UNPKG

unleash-server

Version:

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

88 lines 3.22 kB
import { differenceInCalendarMonths, endOfDay, format, isSameMonth, parse, startOfDay, } from 'date-fns'; export class FakeTrafficDataUsageStore { constructor() { this.trafficData = []; } get(_key) { throw new Error('Method not implemented.'); } getAll(_query) { throw new Error('Method not implemented.'); } exists(_key) { throw new Error('Method not implemented.'); } delete(_key) { throw new Error('Method not implemented.'); } deleteAll() { throw new Error('Method not implemented.'); } destroy() { throw new Error('Method not implemented.'); } async upsert(trafficDataUsage) { const index = this.trafficData.findIndex((data) => data.day.getTime() === trafficDataUsage.day.getTime() && data.trafficGroup === trafficDataUsage.trafficGroup && data.statusCodeSeries === trafficDataUsage.statusCodeSeries); if (index >= 0) { this.trafficData[index].count += trafficDataUsage.count; } else { this.trafficData.push(trafficDataUsage); } } async getTrafficDataUsageForPeriod(period) { const periodDate = parse(period, 'yyyy-MM', new Date()); return this.trafficData.filter((data) => isSameMonth(data.day, periodDate)); } async getTrafficDataForMonthRange(monthsBack) { const now = new Date(); const data = this.trafficData .filter((entry) => differenceInCalendarMonths(now, entry.day) <= monthsBack) .reduce((acc, entry) => { const month = format(entry.day, 'yyyy-MM'); const key = `${month}-${entry.trafficGroup}-${entry.statusCodeSeries}`; if (acc[key]) { acc[key].count += entry.count; } else { acc[key] = { month, trafficGroup: entry.trafficGroup, statusCodeSeries: entry.statusCodeSeries, count: entry.count, }; } return acc; }, {}); return Object.values(data); } async getDailyTrafficDataUsageForPeriod(from, to) { return this.trafficData.filter((data) => data.day >= startOfDay(from) && data.day <= endOfDay(to)); } async getMonthlyTrafficDataUsageForPeriod(from, to) { const data = this.trafficData .filter((data) => data.day >= startOfDay(from) && data.day <= endOfDay(to)) .reduce((acc, entry) => { const month = format(entry.day, 'yyyy-MM'); const key = `${month}-${entry.trafficGroup}-${entry.statusCodeSeries}`; if (acc[key]) { acc[key].count += entry.count; } else { acc[key] = { month, trafficGroup: entry.trafficGroup, statusCodeSeries: entry.statusCodeSeries, count: entry.count, }; } return acc; }, {}); return Object.values(data); } } //# sourceMappingURL=fake-traffic-data-usage-store.js.map