Start adding report data according to defined model

This commit is contained in:
Théophile Diot 2024-08-12 16:27:31 +01:00
parent 128ca47de0
commit fde8f93f32
No known key found for this signature in database
GPG key ID: FA995104A0BA376A
3 changed files with 198 additions and 28 deletions

View file

@ -0,0 +1,148 @@
# TODO : REMOVE operation by custom endpoint
reports_columns = [
{"title": "Date", "field": "date", "formatter": "fields"}, # datepicker
{"title": "IP", "field": "ip", "formatter": "text"},
{"title": "Country", "field": "country", "formatter": "text"},
{"title": "Server name", "field": "server_name", "formatter": "text"},
{"title": "Method", "field": "method", "formatter": "text"},
{"title": "URL", "field": "url", "formatter": "text"},
{"title": "Code", "field": "code", "formatter": "text"},
{"title": "User agent", "field": "user_agent", "formatter": "text"},
{"title": "Reason", "field": "reason", "formatter": "text"},
{"title": "Data", "field": "data", "formatter": "text"},
]
reports_filters = [
{
"type": "like",
"fields": ["ip"],
"setting": {
"id": "input-search-ip",
"name": "input-search-ip",
"label": "reports_search_ip", # keep it (a18n)
"value": "",
"inpType": "input",
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
},
},
{
"type": "=",
"fields": ["reason"],
"setting": {
"id": "select-reason",
"name": "select-reason",
"label": "reports_select_reason", # keep it (a18n)
"value": "all", # keep "all"
"values": {"all"}, # keep "all" and add your reasons
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
},
},
{
"type": "like",
"fields": ["url"],
"setting": {
"id": "input-search-url",
"name": "input-search-url",
"label": "reports_search_url", # keep it (a18n)
"value": "",
"inpType": "input",
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
},
},
{
"type": "like",
"fields": ["user_agent", "data"],
"setting": {
"id": "input-search-misc",
"name": "input-search-misc",
"label": "reports_search_misc", # keep it (a18n)
"value": "",
"inpType": "input",
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
},
},
{
"type": "=",
"fields": ["country"],
"setting": {
"id": "select-country",
"name": "select-country",
"label": "reports_select_country", # keep it (a18n)
"value": "all", # keep "all"
"values": {"all"}, # keep "all" and add your countries
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
},
},
{
"type": "=",
"fields": ["method"],
"setting": {
"id": "select-method",
"name": "select-method",
"label": "reports_select_method", # keep it (a18n)
"value": "all", # keep "all"
"values": {"all"}, # keep "all" and add your methods
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
},
},
{
"type": "=",
"fields": ["code"],
"setting": {
"id": "select-code",
"name": "select-code",
"label": "reports_select_code", # keep it (a18n)
"value": "all", # keep "all"
"values": {"all"}, # keep "all" and add your codes
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
},
},
]
# reports_items = [
# {
# "date": datepicker(
# id="datepicker-date-id", # replace id by unique id
# name="datepicker-date-id", # replace by unique id
# label="reports_date", # keep it (a18n)
# hideLabel=True,
# inputType="datepicker",
# value="my_date", # replace my_date by timestamp value
# disabled=True, # Readonly
# )["data"],
# "ip": text(text="IP")["data"],
# "country": text(text="Country")["data"],
# "method": text(text="Method")["data"],
# "url": text(text="URL")["data"],
# "code": text(text="Code")["data"],
# "user_agent": text(text="User agent")["data"],
# "reason": text(text="Reason")["data"],
# "data": text(text="Data")["data"],
# },
# ]
# builder = [
# {
# "type": "card",
# "display": ["main", 1],
# "widgets": [
# tabulator(
# id="table-core-plugins",
# columns=reports_columns,
# items=reports_items,
# filters=reports_filters,
# ),
# ],
# },
# ]

View file

@ -40,7 +40,7 @@ reports_filters = [
"name": "select-reason",
"label": "reports_select_reason", # keep it (a18n)
"value": "all", # keep "all"
"values": ["all", "antibot"], # keep "all" and add your reasons
"values": {"all"}, # keep "all" and add your reasons
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
@ -78,7 +78,7 @@ reports_filters = [
"name": "select-country",
"label": "reports_select_country", # keep it (a18n)
"value": "all", # keep "all"
"values": ["all", "antibot"], # keep "all" and add your countries
"values": {"all"}, # keep "all" and add your countries
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
@ -92,7 +92,7 @@ reports_filters = [
"name": "select-method",
"label": "reports_select_method", # keep it (a18n)
"value": "all", # keep "all"
"values": ["all", "antibot"], # keep "all" and add your methods
"values": {"all"}, # keep "all" and add your methods
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
@ -106,7 +106,7 @@ reports_filters = [
"name": "select-code",
"label": "reports_select_code", # keep it (a18n)
"value": "all", # keep "all"
"values": ["all", "antibot"], # keep "all" and add your codes
"values": {"all"}, # keep "all" and add your codes
"inpType": "select",
"onlyDown": True,
"columns": {"pc": 3, "tablet": 4, " mobile": 12},
@ -116,7 +116,7 @@ reports_filters = [
reports_items = [
{
"data": datepicker(
"date": datepicker(
id="datepicker-date-id", # replace id by unique id
name="datepicker-date-id", # replace by unique id
label="reports_date", # keep it (a18n)

View file

@ -49,6 +49,10 @@ from src.ui_data import UIData
# TODO: rename to bans
from builder.bans2 import bans_builder # type: ignore
# TODO: rename to reports
from builder.reports2 import reports_columns, reports_filters # type: ignore
from builder.home import home_builder # type: ignore
from builder.instances import instances_builder # type: ignore
from builder.global_config import global_config_builder # type: ignore
@ -59,6 +63,8 @@ from builder.advanced_mode import advanced_mode_builder # type: ignore
from builder.easy_mode import easy_mode_builder # type: ignore
from builder.logs import logs_builder # type: ignore
from builder.utils.widgets import tabulator, datepicker # type: ignore
from common_utils import get_version # type: ignore
from logger import setup_logger # type: ignore
@ -2034,33 +2040,49 @@ def logs():
@login_required
def reports():
reports = app.bw_instances_utils.get_reports()
total_reports = len(reports)
reports = reports[:100]
tmp_reports_filters = reports_filters.copy()
# Prepare data
reasons = {}
codes = {}
for i, report in enumerate(deepcopy(reports)):
reports[i]["date"] = datetime.fromtimestamp(floor(reports[i]["date"])).strftime("%d/%m/%Y %H:%M:%S")
# Get top reasons
if not report["reason"] in reasons:
reasons[report["reason"]] = 0
reasons[report["reason"]] = reasons[report["reason"]] + 1
# Get top status code
if not report["status"] in codes:
codes[report["status"]] = 0
codes[report["status"]] = codes[report["status"]] + 1
reports_items = []
for i, report in enumerate(reports):
report_item = {
"date": datepicker(
id=f"datepicker-date-{i}",
name=f"datepicker-date-{i}",
label="reports_date", # keep it (a18n)
hideLabel=True,
inputType="datepicker",
value=str(floor(report.pop("date"))), # replace my_date by timestamp value
disabled=True, # Readonly
),
} | report
reports_items.append(report_item)
top_reason = ([k for k, v in reasons.items() if v == max(reasons.values())] or [""])[0]
top_code = ([k for k, v in codes.items() if v == max(codes.values())] or [""])[0]
tmp_reports_filters[1]["setting"]["values"].add(report["reason"])
tmp_reports_filters[4]["setting"]["values"].add(report["country"])
tmp_reports_filters[5]["setting"]["values"].add(report["method"])
tmp_reports_filters[6]["setting"]["values"].add(report["code"])
return render_template(
"reports.html",
reports=reports,
total_reports=total_reports,
top_code=top_code,
top_reason=top_reason,
)
tmp_reports_filters[1]["setting"]["values"] = list(tmp_reports_filters[1]["setting"]["values"])
tmp_reports_filters[4]["setting"]["values"] = list(tmp_reports_filters[4]["setting"]["values"])
tmp_reports_filters[5]["setting"]["values"] = list(tmp_reports_filters[5]["setting"]["values"])
tmp_reports_filters[6]["setting"]["values"] = list(tmp_reports_filters[6]["setting"]["values"])
builder = [
{
"type": "card",
"display": ["main", 1],
"widgets": [
tabulator(
id="table-core-plugins",
columns=reports_columns,
items=reports_items,
filters=tmp_reports_filters,
),
],
},
]
return render_template("reports.html", data_server_builder=b64encode(dumps(builder).encode("utf-8")).decode("ascii"))
@app.route("/bans", methods=["GET", "POST"])