Add more info to /.tokens endpoint

This commit is contained in:
Zed 2022-01-06 00:42:18 +01:00
parent 4d9fd1a6f8
commit d4c6876bc9
3 changed files with 40 additions and 6 deletions

10
src/routes/debug.nim Normal file
View File

@ -0,0 +1,10 @@
# SPDX-License-Identifier: AGPL-3.0-only
import jester
import router_utils
import ".."/[tokens, types]
proc createDebugRouter*(cfg: Config) =
router debug:
get "/.tokens":
cond cfg.enableDebug
respJson getPoolJson()

View File

@ -1,5 +1,5 @@
# SPDX-License-Identifier: AGPL-3.0-only
import strutils, sequtils, uri, tables
import strutils, sequtils, uri, tables, json
from jester import Request, cookies
import ../views/general
@ -43,5 +43,5 @@ template getCursor*(req: Request): string =
proc getNames*(name: string): seq[string] =
name.strip(chars={'/'}).split(",").filterIt(it.len > 0)
template respJson*(body: string) =
resp body, "application/json"
template respJson*(node: JsonNode) =
resp $node, "application/json"

View File

@ -15,9 +15,15 @@ var
tokenPool: seq[Token]
lastFailed: Time
proc getPoolJson*: string =
let list = newJObject()
proc getPoolJson*(): JsonNode =
var
list = newJObject()
totalReqs = 0
totalPending = 0
reqsPerApi: Table[string, int]
for token in tokenPool:
totalPending.inc(token.pending)
list[token.tok] = %*{
"apis": newJObject(),
"pending": token.pending,
@ -27,7 +33,25 @@ proc getPoolJson*: string =
for api in token.apis.keys:
list[token.tok]["apis"][$api] = %token.apis[api]
return $list
let
maxReqs =
case api
of Api.listBySlug, Api.list: 500
of Api.timeline: 187
else: 180
reqs = maxReqs - token.apis[api].remaining
reqsPerApi[$api] = reqsPerApi.getOrDefault($api, 0) + reqs
totalReqs.inc(reqs)
return %*{
"amount": tokenPool.len,
"requests": totalReqs,
"pending": totalPending,
"apis": reqsPerApi,
"tokens": list
}
proc rateLimitError*(): ref RateLimitError =
newException(RateLimitError, "rate limited")