mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2024-09-20 13:04:06 +02:00
Merge pull request #437 from mchangrh/redis-track-status
add redis status/min
This commit is contained in:
commit
dd900497f4
3 changed files with 38 additions and 2 deletions
|
@ -2,6 +2,7 @@ import { db } from "../databases/databases";
|
|||
import { Logger } from "../utils/logger";
|
||||
import { Request, Response } from "express";
|
||||
import os from "os";
|
||||
import redis from "../utils/redis";
|
||||
|
||||
export async function getStatus(req: Request, res: Response): Promise<Response> {
|
||||
const startTime = Date.now();
|
||||
|
@ -9,13 +10,16 @@ export async function getStatus(req: Request, res: Response): Promise<Response>
|
|||
value = Array.isArray(value) ? value[0] : value;
|
||||
try {
|
||||
const dbVersion = (await db.prepare("get", "SELECT key, value FROM config where key = ?", ["version"])).value;
|
||||
const numberRequests = await redis.increment("statusRequest");
|
||||
const statusRequests = numberRequests?.replies?.[0];
|
||||
const statusValues: Record<string, any> = {
|
||||
uptime: process.uptime(),
|
||||
commit: (global as any).HEADCOMMIT || "unknown",
|
||||
db: Number(dbVersion),
|
||||
startTime,
|
||||
processTime: Date.now() - startTime,
|
||||
loadavg: os.loadavg().slice(1) // only return 5 & 15 minute load average
|
||||
loadavg: os.loadavg().slice(1), // only return 5 & 15 minute load average
|
||||
statusRequests
|
||||
};
|
||||
return value ? res.send(JSON.stringify(statusValues[value])) : res.send(statusValues);
|
||||
} catch (err) {
|
||||
|
|
|
@ -9,6 +9,7 @@ interface RedisSB {
|
|||
setAsync?(key: string, value: string): Promise<{err: Error | null, reply: string | null}>;
|
||||
delAsync?(...keys: [string]): Promise<Error | null>;
|
||||
close?(flush?: boolean): void;
|
||||
increment?(key: string): Promise<{err: Error| null, replies: any[] | null}>;
|
||||
}
|
||||
|
||||
let exportObject: RedisSB = {
|
||||
|
@ -20,6 +21,8 @@ let exportObject: RedisSB = {
|
|||
new Promise((resolve) => resolve({ err: null, reply: undefined })),
|
||||
delAsync: () =>
|
||||
new Promise((resolve) => resolve(null)),
|
||||
increment: () =>
|
||||
new Promise((resolve) => resolve({ err: null, replies: undefined })),
|
||||
};
|
||||
|
||||
if (config.redis) {
|
||||
|
@ -31,7 +34,12 @@ if (config.redis) {
|
|||
exportObject.setAsync = (key, value) => new Promise((resolve) => client.set(key, value, (err, reply) => resolve({ err, reply })));
|
||||
exportObject.delAsync = (...keys) => new Promise((resolve) => client.del(keys, (err) => resolve(err)));
|
||||
exportObject.close = (flush) => client.end(flush);
|
||||
|
||||
exportObject.increment = (key) => new Promise((resolve) =>
|
||||
client.multi()
|
||||
.incr(key)
|
||||
.expire(key, 60)
|
||||
.exec((err, replies) => resolve({ err, replies }))
|
||||
);
|
||||
client.on("error", function(error) {
|
||||
Logger.error(error);
|
||||
});
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import assert from "assert";
|
||||
import { db } from "../../src/databases/databases";
|
||||
import { client } from "../utils/httpClient";
|
||||
import { config } from "../../src/config";
|
||||
let dbVersion: number;
|
||||
|
||||
describe("getStatus", () => {
|
||||
|
@ -86,4 +87,27 @@ describe("getStatus", () => {
|
|||
})
|
||||
.catch(err => done(err));
|
||||
});
|
||||
|
||||
it("Should be able to get statusRequests only", function (done) {
|
||||
if (!config.redis) this.skip();
|
||||
client.get(`${endpoint}/statusRequests`)
|
||||
.then(res => {
|
||||
assert.strictEqual(res.status, 200);
|
||||
assert.ok(Number(res.data) > 1);
|
||||
done();
|
||||
})
|
||||
.catch(err => done(err));
|
||||
});
|
||||
|
||||
it("Should be able to get status with statusRequests", function (done) {
|
||||
if (!config.redis) this.skip();
|
||||
client.get(endpoint)
|
||||
.then(res => {
|
||||
assert.strictEqual(res.status, 200);
|
||||
const data = res.data;
|
||||
assert.ok(data.statusRequests > 2);
|
||||
done();
|
||||
})
|
||||
.catch(err => done(err));
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue