38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
import fs from 'node:fs';
|
|
import { SvRtFileType } from '../../core/modules/Metrics/svRuntime/perfSchemas';
|
|
import * as d3 from 'd3';
|
|
|
|
type SourceFileDataType = {
|
|
ts: number;
|
|
players: number;
|
|
}
|
|
|
|
export default (sourceFileName: string, targetFileName: string) => {
|
|
const sourceFileData = JSON.parse(fs.readFileSync(sourceFileName, 'utf8')) as SourceFileDataType[];
|
|
const targetFileData = JSON.parse(fs.readFileSync(targetFileName, 'utf8')) as SvRtFileType;
|
|
|
|
const maxAllowedGap = 90 * 60 * 1000;//90mins
|
|
const timeBisector = d3.bisector((d: SourceFileDataType) => d.ts).center;
|
|
|
|
for (let i = 0; i < targetFileData.log.length; i++) {
|
|
const log = targetFileData.log[i];
|
|
if (log.type !== 'data') continue;
|
|
const indexFound = timeBisector(sourceFileData, log.ts);
|
|
if (indexFound === -1) continue;
|
|
if (log.players > 0 && log.players < 200) {
|
|
console.log('Skipped', log.players);
|
|
continue;
|
|
}
|
|
const sourceData = sourceFileData[indexFound];
|
|
if (Math.abs(sourceData.ts - log.ts) > maxAllowedGap) {
|
|
console.log('Replaced', 45);
|
|
log.players = 45;
|
|
} else {
|
|
console.log('Replaced', sourceData.players);
|
|
log.players = sourceData.players;
|
|
}
|
|
}
|
|
|
|
fs.writeFileSync(targetFileName, JSON.stringify(targetFileData));
|
|
}
|