mirror of
https://github.com/bunkerity/bunkerweb
synced 2026-05-24 09:28:37 +00:00
Start adding report data according to defined model
This commit is contained in:
parent
128ca47de0
commit
fde8f93f32
3 changed files with 198 additions and 28 deletions
148
src/ui/client/builder/pages/reports2.py
Normal file
148
src/ui/client/builder/pages/reports2.py
Normal 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,
|
||||
# ),
|
||||
# ],
|
||||
# },
|
||||
# ]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
Loading…
Reference in a new issue