Compare commits

...

8 Commits

Author SHA1 Message Date
Florian Metz
3258179040 chore: release v0.0.24 2024-09-15 03:09:13 +02:00
Florian Metz
086d476af2 chore: update hash 2024-09-15 03:09:04 +02:00
Florian Metz
146bf9e270 chore: release v0.0.23 2024-09-15 02:48:56 +02:00
Florian Metz
a02f25ba29 chore: test 2024-09-15 02:48:41 +02:00
Florian Metz
416b65f0d4 chore: release v0.0.12 2024-09-15 02:41:31 +02:00
Florian Metz
f8e9fc832d chore: test 2024-09-15 02:41:16 +02:00
Florian Metz
86b0f07216 chore: test 2024-09-15 02:31:38 +02:00
Florian Metz
9eb5c03877 chore: release v0.0.11 2024-09-15 02:25:50 +02:00
4 changed files with 12 additions and 15 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "@premid/api-master",
"type": "module",
"version": "0.0.22",
"version": "0.0.24",
"private": true,
"description": "PreMiD's api master",
"license": "MPL-2.0",

View File

@@ -6,7 +6,7 @@ const previousServices = new Set<string>();
//* Function to update the gauge with per-service counts
export async function updateActivePresenceGauge() {
const pattern = "pmd-api.heartbeatUpdates.*.*";
const pattern = "pmd-api.heartbeatUpdates.*";
let cursor: string = "0";
const serviceCounts = new Map<string, number>();
@@ -14,9 +14,8 @@ export async function updateActivePresenceGauge() {
const [newCursor, keys] = await redis.scan(cursor, "MATCH", pattern, "COUNT", 1000); //* Use SCAN with COUNT for memory efficiency
cursor = newCursor;
for (const key of keys) {
const parts = key.split(".");
const service = parts[parts.length - 1]!;
const hash = await redis.hgetall(key);
const service = hash.service;
const version = hash.version; //* Get version from hash
serviceCounts.set(`${service}:${version}`, (serviceCounts.get(`${service}:${version}`) || 0) + 1);
}
@@ -24,15 +23,15 @@ export async function updateActivePresenceGauge() {
// Set current counts and remove from previousServices
serviceCounts.forEach((count, serviceVersion) => {
const [service, version] = serviceVersion.split(":");
activePresenceGauge.record(count, { service, version }); //* Include version in labels
const [presence_name, version] = serviceVersion.split(":");
activePresenceGauge.record(count, { presence_name, version });
previousServices.delete(serviceVersion);
});
// Set gauge to 0 for services that are no longer active
previousServices.forEach((serviceVersion) => {
const [service, version] = serviceVersion.split(":");
activePresenceGauge.record(0, { service, version });
const [presence_name, version] = serviceVersion.split(":");
activePresenceGauge.record(0, { presence_name, version });
});
// Update the set of previous services

View File

@@ -1,7 +1,7 @@
{
"name": "@premid/api-worker",
"type": "module",
"version": "0.0.10",
"version": "0.0.12",
"private": true,
"description": "PreMiD's api",
"license": "MPL-2.0",

View File

@@ -27,7 +27,7 @@ const mutation: MutationResolvers["heartbeat"] = async (_parent, input) => {
throw new Error(out.summary);
// * Use Redis Hash with 'service' in the key to store heartbeat data
const redisKey = `pmd-api.heartbeatUpdates.${out.identifier}.${out.presence.service}`;
const redisKey = `pmd-api.heartbeatUpdates.${out.identifier}`;
await redis.hset(redisKey, {
service: out.presence.service,
version: out.presence.version,
@@ -35,12 +35,10 @@ const mutation: MutationResolvers["heartbeat"] = async (_parent, input) => {
since: out.presence.since.toString(),
extension_version: out.extension.version,
extension_language: out.extension.language,
extension_connected_app: out.extension.connected?.app?.toString() || "",
extension_connected_discord: out.extension.connected?.discord?.toString() || "",
extension_connected_app: out.extension.connected?.app?.toString(),
extension_connected_discord: out.extension.connected?.discord?.toString(),
});
await redis.expire(redisKey, 5);
// * End the custom metric or adjust as needed
await redis.expire(redisKey, 300);
return {
__typename: "HeartbeatResult",