add api for getting statistics
This commit is contained in:
parent
57cae9c01f
commit
0006e66b16
|
@ -0,0 +1,11 @@
|
||||||
|
meta {
|
||||||
|
name: Bot Statistics
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: http://localhost:8166/api/stats
|
||||||
|
body: none
|
||||||
|
auth: inherit
|
||||||
|
}
|
|
@ -102,6 +102,9 @@ const start = () => {
|
||||||
case '/ping':
|
case '/ping':
|
||||||
case '/ping/':
|
case '/ping/':
|
||||||
return endpoints.get.apiPing();
|
return endpoints.get.apiPing();
|
||||||
|
case '/stats':
|
||||||
|
case '/stats/':
|
||||||
|
return endpoints.get.apiStats();
|
||||||
case '/key':
|
case '/key':
|
||||||
case '/key/':
|
case '/key/':
|
||||||
return endpoints.get.apiKeyAdmin(query, apiUserid);
|
return endpoints.get.apiKeyAdmin(query, apiUserid);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { apiKey } from 'endpoints/gets/apiKey.ts';
|
||||||
import { apiKeyAdmin } from 'endpoints/gets/apiKeyAdmin.ts';
|
import { apiKeyAdmin } from 'endpoints/gets/apiKeyAdmin.ts';
|
||||||
import { apiPing } from 'endpoints/gets/apiPing.ts';
|
import { apiPing } from 'endpoints/gets/apiPing.ts';
|
||||||
import { apiRoll } from 'endpoints/gets/apiRoll.ts';
|
import { apiRoll } from 'endpoints/gets/apiRoll.ts';
|
||||||
|
import { apiStats } from 'endpoints/gets/apiStats.ts';
|
||||||
import { generateWebView } from 'endpoints/gets/webView.ts';
|
import { generateWebView } from 'endpoints/gets/webView.ts';
|
||||||
import { heatmapPng } from 'endpoints/gets/heatmapPng.ts';
|
import { heatmapPng } from 'endpoints/gets/heatmapPng.ts';
|
||||||
|
|
||||||
|
@ -24,6 +25,7 @@ export default {
|
||||||
apiKeyAdmin,
|
apiKeyAdmin,
|
||||||
apiPing,
|
apiPing,
|
||||||
apiRoll,
|
apiRoll,
|
||||||
|
apiStats,
|
||||||
generateWebView,
|
generateWebView,
|
||||||
heatmapPng,
|
heatmapPng,
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
import { cache, cacheHandlers } from '@discordeno';
|
||||||
|
import { STATUS_CODE, STATUS_TEXT } from '@std/http/status';
|
||||||
|
|
||||||
|
import { basicReducer } from 'artigen/utils/reducers.ts';
|
||||||
|
|
||||||
|
import dbClient from 'db/client.ts';
|
||||||
|
|
||||||
|
import stdResponses from 'endpoints/stdResponses.ts';
|
||||||
|
|
||||||
|
import utils from 'utils/utils.ts';
|
||||||
|
|
||||||
|
export const apiStats = async (): Promise<Response> => {
|
||||||
|
const headers = new Headers();
|
||||||
|
headers.append('Content-Type', 'text/json');
|
||||||
|
|
||||||
|
const memberCount = cache.guilds
|
||||||
|
.array()
|
||||||
|
.map((guild) => guild.memberCount)
|
||||||
|
.reduce(basicReducer);
|
||||||
|
|
||||||
|
const cachedGuilds = await cacheHandlers.size('guilds');
|
||||||
|
|
||||||
|
const rollQuery = await dbClient
|
||||||
|
.query(`SELECT count, hourlyRate FROM command_cnt WHERE command = "roll";`)
|
||||||
|
.catch((e) => utils.commonLoggers.dbError('stats.ts:23', 'query', e));
|
||||||
|
const rollCount = BigInt(rollQuery[0].count ?? '0');
|
||||||
|
|
||||||
|
if (!rollCount) {
|
||||||
|
return stdResponses.InternalServerError('');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Response(
|
||||||
|
JSON.stringify({
|
||||||
|
guildCount: cachedGuilds + cache.dispatchedGuildIds.size,
|
||||||
|
memberCount,
|
||||||
|
rollCount,
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
status: STATUS_CODE.OK,
|
||||||
|
statusText: STATUS_TEXT[STATUS_CODE.OK],
|
||||||
|
headers,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
Loading…
Reference in New Issue