Add more info to /.tokens endpoint
This commit is contained in:
		
							parent
							
								
									4d9fd1a6f8
								
							
						
					
					
						commit
						d4c6876bc9
					
				| 
						 | 
				
			
			@ -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()
 | 
			
		||||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue