]> git.mxchange.org Git - fba.git/blobdiff - daemon.py
Continued:
[fba.git] / daemon.py
index 84d7832eee6cb48b98896a27ee57564eac40a46c..499ffc11602eb85eb54f51e603156e54305806fe 100755 (executable)
--- a/daemon.py
+++ b/daemon.py
@@ -30,8 +30,8 @@ from fastapi.responses import PlainTextResponse
 from fastapi.staticfiles import StaticFiles
 from fastapi.templating import Jinja2Templates
 
-import uvicorn
 import requests
+import uvicorn
 
 from fba import database
 from fba import utils
@@ -105,7 +105,7 @@ def api_scoreboard(mode: str, amount: int):
     return scores
 
 @router.get(config.get("base_url") + "/api/list.json", response_class=JSONResponse)
-def api_index(request: Request, mode: str, value: str, amount: int):
+def api_list(request: Request, mode: str, value: str, amount: int):
     if mode is None or value is None or amount is None:
         raise HTTPException(status_code=500, detail="No filter specified")
     elif amount > config.get("api_limit"):
@@ -113,9 +113,9 @@ def api_index(request: Request, mode: str, value: str, amount: int):
 
     domain = wildchar = punycode = reason = None
 
-    if mode in ("detection_mode", "software"):
+    if mode in ("detection_mode", "software", "command"):
         database.cursor.execute(
-            f"SELECT domain, origin, software, command, total_peers, total_blocks, first_seen, last_updated \
+            f"SELECT domain, origin, software, detection_mode, command, total_peers, total_blocks, first_seen, last_updated \
 FROM instances \
 WHERE {mode} = ? \
 ORDER BY domain \
@@ -326,7 +326,7 @@ def list_domains(request: Request, mode: str, value: str, amount: int = config.g
         format = config.get("timestamp_format")
         for row in domainlist:
             row["first_seen"]   = datetime.utcfromtimestamp(row["first_seen"]).strftime(format)
-            row["last_updated"] = datetime.utcfromtimestamp(row["last_updated"]).strftime(format)
+            row["last_updated"] = datetime.utcfromtimestamp(row["last_updated"]).strftime(format) if isinstance(row["last_updated"], float) else None
 
     return templates.TemplateResponse("views/list.html", {
         "request"   : request,
@@ -350,14 +350,14 @@ def top(request: Request, mode: str, value: str, amount: int = config.get("api_l
 
     found = 0
     blocklist = list()
-    if response is not None and response.ok:
+    if response.ok and response.status_code == 200 and len(response.text) > 0:
         blocklist = response.json()
 
         format = config.get("timestamp_format")
         for block_level in blocklist:
-            for block in blocklist[block_level]:
-                block["first_seen"] = datetime.utcfromtimestamp(block["first_seen"]).strftime(format)
-                block["last_seen"]  = datetime.utcfromtimestamp(block["last_seen"]).strftime(format)
+            for row in blocklist[block_level]:
+                row["first_seen"] = datetime.utcfromtimestamp(row["first_seen"]).strftime(format)
+                row["last_seen"]  = datetime.utcfromtimestamp(row["last_seen"]).strftime(format) if isinstance(row["last_seen"], float) else None
                 found = found + 1
 
     return templates.TemplateResponse("views/top.html", {
@@ -381,7 +381,7 @@ def rss(request: Request, domain: str):
 
     response = requests.get(f"http://{config.get('host')}:{config.get('port')}{config.get('base_url')}/api/domain.json?domain={domain}")
 
-    if not response.ok or response.status_code > 200 or response.text.strip() == "":
+    if not response.ok or response.status_code >= 300 or response.text.strip() == "":
         raise HTTPException(status_code=response.status_code, detail=response.reason)
 
     domain_data = response.json()
@@ -390,9 +390,9 @@ def rss(request: Request, domain: str):
     format = config.get("timestamp_format")
     instance = dict()
     for key in domain_data.keys():
-        if key in ["last_nodeinfo", "last_blocked", "first_seen", "last_updated", "last_instance_fetch"]:
+        if key in ["last_nodeinfo", "last_blocked", "first_seen", "last_updated", "last_instance_fetch"] and isinstance(domain_data[key], float):
             # Timestamps
-            instance[key] = datetime.utcfromtimestamp(domain_data[key]).strftime(format) if isinstance(domain_data[key], float) else "-"
+            instance[key] = datetime.utcfromtimestamp(domain_data[key]).strftime(format)
         else:
             # Generic
             instance[key] = domain_data[key]