mirror of
https://github.com/PreMiD/PreMiD.git
synced 2026-04-06 04:41:58 +02:00
Compare commits
8 Commits
api-master
...
api-master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b25880d4cd | ||
|
|
fb06227aeb | ||
|
|
ff3d00497b | ||
|
|
a06780f85a | ||
|
|
5b1969c7ab | ||
|
|
bedd34594c | ||
|
|
47feaa5c70 | ||
|
|
9fb32f53ae |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@premid/api-master",
|
||||
"type": "module",
|
||||
"version": "0.0.26",
|
||||
"version": "0.0.29",
|
||||
"private": true,
|
||||
"description": "PreMiD's api master",
|
||||
"license": "MPL-2.0",
|
||||
|
||||
@@ -23,8 +23,13 @@ export class ClearableGaugeMetric {
|
||||
this.data.set(key, { value, attributes });
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.data.clear();
|
||||
clear({ except }: { except?: string[] }) {
|
||||
for (const key of this.data.keys()) {
|
||||
if (except && except.includes(key))
|
||||
continue;
|
||||
|
||||
this.data.delete(key);
|
||||
}
|
||||
}
|
||||
|
||||
toMetricData(): GaugeMetricData {
|
||||
|
||||
@@ -2,7 +2,7 @@ import type { InferInsertModel } from "drizzle-orm";
|
||||
import { db, onlineUsersIpData } from "../db.js";
|
||||
import { lookupIp } from "./lookupIp.js";
|
||||
|
||||
const batchSize = 10000;
|
||||
const batchSize = 1000;
|
||||
|
||||
export async function insertIpData(
|
||||
data: Map<string, {
|
||||
@@ -11,13 +11,14 @@ export async function insertIpData(
|
||||
}>,
|
||||
) {
|
||||
const timestamp = new Date();
|
||||
const list = Array.from(data.entries());
|
||||
const list = [...data.keys()];
|
||||
//* Split into batches of batchSize
|
||||
for (let i = 0; i < list.length; i += batchSize) {
|
||||
const batch = list.slice(i, i + batchSize);
|
||||
const mapped = await Promise.all(batch.map(async ([ip, { presences, sessions }]) => {
|
||||
const mapped = await Promise.all(batch.map(async (ip) => {
|
||||
const parsed = await lookupIp(ip);
|
||||
if (parsed) {
|
||||
const { presences, sessions } = data.get(ip)!;
|
||||
return {
|
||||
ip,
|
||||
country: parsed.country,
|
||||
|
||||
@@ -23,7 +23,7 @@ export async function lookupIp(ip: string): Promise<{ latitude: number; longitud
|
||||
}
|
||||
}
|
||||
|
||||
let reloading: Promise<void> | undefined;
|
||||
let reloading: Promise<void> | undefined = Promise.resolve();
|
||||
let log: debug.Debugger | undefined;
|
||||
|
||||
export async function reloadIpLocationApi() {
|
||||
|
||||
@@ -37,7 +37,7 @@ export async function updateActivePresenceGauge() {
|
||||
} while (cursor !== "0");
|
||||
|
||||
// Clear previous data
|
||||
activePresenceGauge.clear();
|
||||
activePresenceGauge.clear({ except: [...serviceCounts.keys()] });
|
||||
|
||||
// Set new data
|
||||
for (const [serviceVersion, count] of serviceCounts.entries()) {
|
||||
|
||||
@@ -6,7 +6,7 @@ import createRedis from "./functions/createRedis.js";
|
||||
import { setSessionCounter } from "./functions/setSessionCounter.js";
|
||||
import "./tracing.js";
|
||||
import { updateActivePresenceGauge } from "./functions/updateActivePresenceGauge.js";
|
||||
import { reloadIpLocationApi } from "./functions/lookupIp.js";
|
||||
// import { reloadIpLocationApi } from "./functions/lookupIp.js";
|
||||
import { cleanupOldUserData } from "./functions/cleanupOldUserData.js";
|
||||
|
||||
export const redis = createRedis();
|
||||
@@ -45,18 +45,18 @@ void new CronJob(
|
||||
true,
|
||||
);
|
||||
|
||||
void new CronJob(
|
||||
// Every day at 9am
|
||||
"0 9 * * *",
|
||||
() => {
|
||||
reloadIpLocationApi();
|
||||
},
|
||||
undefined,
|
||||
true,
|
||||
undefined,
|
||||
undefined,
|
||||
true,
|
||||
);
|
||||
// void new CronJob(
|
||||
// // Every day at 9am
|
||||
// "0 9 * * *",
|
||||
// () => {
|
||||
// reloadIpLocationApi();
|
||||
// },
|
||||
// undefined,
|
||||
// true,
|
||||
// undefined,
|
||||
// undefined,
|
||||
// true,
|
||||
// );
|
||||
|
||||
void new CronJob(
|
||||
// Every day at 1am
|
||||
|
||||
Reference in New Issue
Block a user