diff --git a/src/common/core/cors/ui/actions.py b/src/common/core/cors/ui/actions.py index 9e1aed8ef..c5bf62b25 100644 --- a/src/common/core/cors/ui/actions.py +++ b/src/common/core/cors/ui/actions.py @@ -1,25 +1,26 @@ +from logging import getLogger from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "counter_failed_cors": { + "value": 0, + "title": "CORS", + "subtitle": "Request blocked", + "subtitle_color": "danger", + "svg_color": "danger", + }, + } try: - data = kwargs["bw_instances_utils"].get_metrics("cors") - return { - "counter_failed_cors": { - "value": data.get("counter_failed_cors", 0), - "title": "CORS", - "subtitle": "request blocked", - "subtitle_color": "error", - "svg_color": "red", - } - } + ret["counter_failed_cors"]["value"] = kwargs["bw_instances_utils"].get_metrics("cors").get("counter_failed_cors", 0) + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get cors metrics: {e}") + ret["error"] = str(e) - except BaseException: - print(format_exc(), flush=True) - return { - "counter_failed_cors": {"value": "unknown", "title": "CORS", "subtitle": "request blocked", "subtitle_color": "error", "svg_color": "red"}, - "error": format_exc(), - } + return ret def cors(**kwargs): diff --git a/src/common/core/cors/ui/template.html b/src/common/core/cors/ui/template.html deleted file mode 100644 index a4a058de7..000000000 --- a/src/common/core/cors/ui/template.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the cors plugin in the documentation.' %} - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/country/ui/actions.py b/src/common/core/country/ui/actions.py index b307bd17c..c3b2aee51 100644 --- a/src/common/core/country/ui/actions.py +++ b/src/common/core/country/ui/actions.py @@ -1,24 +1,26 @@ +from logging import getLogger from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "counter_failed_country": { + "value": 0, + "title": "Country", + "subtitle": "Request blocked", + "subtitle_color": "danger", + "svg_color": "danger", + }, + } try: - data = kwargs["bw_instances_utils"].get_metrics("country") - return { - "counter_failed_country": { - "value": data.get("counter_failed_country", 0), - "title": "Country", - "subtitle": "request blocked", - "subtitle_color": "error", - "svg_color": "red", - } - } - except BaseException: - print(format_exc(), flush=True) - return { - "counter_failed_country": {"value": "unknown", "title": "Country", "subtitle": "request blocked", "subtitle_color": "error", "svg_color": "red"}, - "error": format_exc(), - } + ret["counter_failed_country"]["value"] = kwargs["bw_instances_utils"].get_metrics("country").get("counter_failed_country", 0) + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get country metrics: {e}") + ret["error"] = str(e) + + return ret def country(**kwargs): diff --git a/src/common/core/country/ui/template.html b/src/common/core/country/ui/template.html deleted file mode 100644 index d7109bd00..000000000 --- a/src/common/core/country/ui/template.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the country plugin in the documentation.' %} - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/dnsbl/ui/actions.py b/src/common/core/dnsbl/ui/actions.py index 7e7eea49a..26c3422fc 100644 --- a/src/common/core/dnsbl/ui/actions.py +++ b/src/common/core/dnsbl/ui/actions.py @@ -1,24 +1,26 @@ +from logging import getLogger from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "counter_failed_dnsbl": { + "value": 0, + "title": "DNSBL", + "subtitle": "Request blocked", + "subtitle_color": "danger", + "svg_color": "danger", + }, + } try: - data = kwargs["bw_instances_utils"].get_metrics("dnsbl") - return { - "counter_failed_dnsbl": { - "value": data.get("counter_failed_dnsbl", 0), - "title": "DNSBL", - "subtitle": "request blocked", - "subtitle_color": "error", - "svg_color": "red", - } - } - except BaseException: - print(format_exc(), flush=True) - return { - "counter_failed_dnsbl": {"value": "unknown", "title": "DNSBL", "subtitle": "request blocked", "subtitle_color": "error", "svg_color": "red"}, - "error": format_exc(), - } + ret["counter_failed_dnsbl"]["value"] = kwargs["bw_instances_utils"].get_metrics("dnsbl").get("counter_failed_dnsbl", 0) + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get dnsbl metrics: {e}") + ret["error"] = str(e) + + return ret def dnsbl(**kwargs): diff --git a/src/common/core/dnsbl/ui/template.html b/src/common/core/dnsbl/ui/template.html deleted file mode 100644 index b4e3cbd96..000000000 --- a/src/common/core/dnsbl/ui/template.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the dnsbl plugin in the documentation.' %} - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/errors/ui/actions.py b/src/common/core/errors/ui/actions.py index 4d7619686..4d1e53d78 100644 --- a/src/common/core/errors/ui/actions.py +++ b/src/common/core/errors/ui/actions.py @@ -1,18 +1,40 @@ +from logging import getLogger from operator import itemgetter from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "top_errors": { + "data": {}, + "order": { + "column": 1, + "dir": "desc", + }, + "svg_color": "danger", + }, + } try: - # Here we will have a list { 'counter_403': X, 'counter_401': Y ... } - data = kwargs["bw_instances_utils"].get_metrics("errors") - # Format to fit [{code: 403, count: X}, {code: 401, count: Y} ...] - format_data = [{"code": int(key.split("_")[1]), "count": int(value)} for key, value in data.items()] + format_data = [ + { + "code": int(key.split("_")[1]), + "count": int(value), + } + for key, value in kwargs["bw_instances_utils"].get_metrics("errors").items() + ] format_data.sort(key=itemgetter("count"), reverse=True) - return {"top_errors": format_data} - except BaseException: - print(format_exc(), flush=True) - return {"top_errors": [], "error": format_exc()} + data = {"code": [], "count": []} + for item in format_data: + data["code"].append(item["code"]) + data["count"].append(item["count"]) + ret["top_errors"]["data"] = data + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get errors metrics: {e}") + ret["error"] = str(e) + + return ret def errors(**kwargs): diff --git a/src/common/core/errors/ui/template.html b/src/common/core/errors/ui/template.html deleted file mode 100644 index 3554a7634..000000000 --- a/src/common/core/errors/ui/template.html +++ /dev/null @@ -1,119 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the errors plugin in the documentation.' %} - -{% block content %} - -
-
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} -
-{% endblock %} diff --git a/src/common/core/greylist/ui/actions.py b/src/common/core/greylist/ui/actions.py index 35cf7639c..44bfa37e2 100644 --- a/src/common/core/greylist/ui/actions.py +++ b/src/common/core/greylist/ui/actions.py @@ -1,24 +1,26 @@ +from logging import getLogger from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "counter_failed_greylist": { + "value": 0, + "title": "GREYLIST", + "subtitle": "Request blocked", + "subtitle_color": "danger", + "svg_color": "danger", + }, + } try: - data = kwargs["bw_instances_utils"].get_metrics("greylist") - return { - "counter_failed_greylist": { - "value": data.get("counter_failed_greylist", 0), - "title": "GREYLIST", - "subtitle": "request blocked", - "subtitle_color": "error", - "svg_color": "red", - } - } - except BaseException: - print(format_exc(), flush=True) - return { - "counter_failed_greylist": {"value": "unknown", "title": "GREYLIST", "subtitle": "request blocked", "subtitle_color": "error", "svg_color": "red"}, - "error": format_exc(), - } + ret["counter_failed_greylist"]["value"] = kwargs["bw_instances_utils"].get_metrics("greylist").get("counter_failed_greylist", 0) + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get greylist metrics: {e}") + ret["error"] = str(e) + + return ret def greylist(**kwargs): diff --git a/src/common/core/greylist/ui/template.html b/src/common/core/greylist/ui/template.html deleted file mode 100644 index c8723296f..000000000 --- a/src/common/core/greylist/ui/template.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the greylist plugin in the documentation.' %} - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/limit/ui/actions.py b/src/common/core/limit/ui/actions.py index e44a966f4..f39d72d5e 100644 --- a/src/common/core/limit/ui/actions.py +++ b/src/common/core/limit/ui/actions.py @@ -1,25 +1,37 @@ +from logging import getLogger from operator import itemgetter from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "top_limit": { + "data": {}, + "order": { + "column": 1, + "dir": "desc", + }, + "svg_color": "amber", + }, + } try: - # Here we will have a list { 'limit_uri_url1': X, 'limit_uri_url2': Y ... } - data = kwargs["bw_instances_utils"].get_metrics("limit") - format_data = [] - # Format to fit [{url: "url1", count: X}, {url: "url2", count: Y} ...] - for key, value in data.items(): - key = key.split("/", 1) - if len(key) > 1: - key = key[1] - else: - key = "" - format_data.append({"url": f"/{key}", "count": int(value)}) + format_data = [ + {"URL": f"/{key.split('/', 1)[1] if '/' in key else ''}", "count": int(value)} + for key, value in kwargs["bw_instances_utils"].get_metrics("limit").items() + ] format_data.sort(key=itemgetter("count"), reverse=True) - return {"top_limit": format_data} - except BaseException: - print(format_exc(), flush=True) - return {"top_limit": [], "error": format_exc()} + data = {"URL": [], "count": []} + for item in format_data: + data["URL"].append(item["URL"]) + data["count"].append(item["count"]) + ret["top_limit"]["data"] = data + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get limit metrics: {e}") + ret["error"] = str(e) + + return ret def limit(**kwargs): diff --git a/src/common/core/limit/ui/template.html b/src/common/core/limit/ui/template.html deleted file mode 100644 index 65e7faf6d..000000000 --- a/src/common/core/limit/ui/template.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the limit plugin in the documentation.' %} - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/misc/ui/actions.py b/src/common/core/misc/ui/actions.py index 063845dbf..1b52f495a 100644 --- a/src/common/core/misc/ui/actions.py +++ b/src/common/core/misc/ui/actions.py @@ -1,39 +1,35 @@ +from logging import getLogger from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "counter_failed_default": { + "value": 0, + "title": "DEFAULT SERVER DISABLED", + "subtitle": "Total", + "subtitle_color": "danger", + "svg_color": "danger", + }, + "counter_failed_method": { + "value": 0, + "title": "DISALLOWED METHODS", + "subtitle": "Count", + "subtitle_color": "olive", + "svg_color": "olive", + }, + } try: data = kwargs["bw_instances_utils"].get_metrics("misc") + ret["counter_failed_default"]["value"] = data.get("counter_failed_default", 0) + ret["counter_failed_method"]["value"] = data.get("counter_failed_method", 0) + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get default metrics: {e}") + ret["error"] = str(e) - return { - "counter_failed_default": { - "value": data.get("counter_failed_default", 0), - "title": "DEFAULT SERVER DISABLED", - "subtitle": "total", - "subtitle_color": "info", - "svg_color": "sky", - }, - "counter_failed_method": { - "value": data.get("counter_failed_method", 0), - "title": "DISALLOWED METHODS", - "subtitle": "count", - "subtitle_color": "info", - "svg_color": "lime", - }, - } - except BaseException: - print(format_exc(), flush=True) - return { - "counter_failed_default": { - "value": "unknown", - "title": "DEFAULT SERVER DISABLED", - "subtitle": "total", - "subtitle_color": "info", - "svg_color": "sky", - }, - "counter_failed_method": {"value": "unknown", "title": "DISALLOWED METHODS", "subtitle": "count", "subtitle_color": "info", "svg_color": "lime"}, - "error": format_exc(), - } + return ret def misc(**kwargs): diff --git a/src/common/core/misc/ui/template.html b/src/common/core/misc/ui/template.html deleted file mode 100644 index 1c9c5f55f..000000000 --- a/src/common/core/misc/ui/template.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the misc plugin in the documentation.' %} - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} -
- - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/redis/ui/actions.py b/src/common/core/redis/ui/actions.py index 2a3371166..b457953a1 100644 --- a/src/common/core/redis/ui/actions.py +++ b/src/common/core/redis/ui/actions.py @@ -1,39 +1,45 @@ +from logging import getLogger from traceback import format_exc def pre_render(**kwargs): - ping = {} - data = {} - error = "" + logger = getLogger("UI") + ret = { + "ping_status": { + "title": "REDIS STATUS", + "value": "error", + "col-size": "col-12 col-md-6", + "card-classes": "h-100", + }, + "counter_redis_nb_keys": { + "value": 0, + "title": "REDIS KEYS", + "subtitle": "Keys number", + "subtitle_color": "maroon", + "svg_color": "maroon", + "col-size": "col-12 col-md-6", + "card-classes": "h-100", + }, + } try: ping_data = kwargs["bw_instances_utils"].get_ping("redis") - ping = {"ping_status": {"title": "REDIS STATUS", "value": ping_data["status"]}} - except BaseException: - print(format_exc(), flush=True) - error = format_exc() - ping = {"ping_status": {"title": "REDIS STATUS", "value": "error"}} + ret["ping_status"]["value"] = ping_data["status"] + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get redis ping: {e}") + ret["error"] = str(e) + + if "error" in ret: + return ret try: - metrics = kwargs["bw_instances_utils"].get_metrics("redis") - data = { - "counter_redis_nb_keys": { - "value": metrics.get("redis_nb_keys", 0), - "title": "REDIS KEYS", - "subtitle": "total number", - "subtitle_color": "info", - "svg_color": "sky", - } - } + ret["counter_redis_nb_keys"]["value"] = kwargs["bw_instances_utils"].get_metrics("redis").get("counter_redis_nb_keys", 0) + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get redis metrics: {e}") + ret["error"] = str(e) - except BaseException: - print(format_exc(), flush=True) - error += format_exc() - data = {"counter_redis_nb_keys": {"value": "unknown", "title": "REDIS KEYS", "subtitle": "total number", "subtitle_color": "info", "svg_color": "sky"}} - - if error: - return ping | data | {"error": error} - - return ping | data + return ret def redis(**kwargs): diff --git a/src/common/core/redis/ui/template.html b/src/common/core/redis/ui/template.html deleted file mode 100644 index ef4a58ac5..000000000 --- a/src/common/core/redis/ui/template.html +++ /dev/null @@ -1,144 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the redis plugin in the documentation.' %} - -{% block content %} - -
- {% if is_used %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/reversescan/ui/actions.py b/src/common/core/reversescan/ui/actions.py index 6d9752ebf..ad5e23e87 100644 --- a/src/common/core/reversescan/ui/actions.py +++ b/src/common/core/reversescan/ui/actions.py @@ -1,18 +1,40 @@ +from logging import getLogger from operator import itemgetter from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "top_reverse_scan": { + "data": {}, + "order": { + "column": 1, + "dir": "desc", + }, + "svg_color": "danger", + }, + } try: - # Here we will have a list { 'counter_403': X, 'counter_401': Y ... } - data = kwargs["bw_instances_utils"].get_metrics("reversescan") - # Format to fit [{code: 403, count: X}, {code: 401, count: Y} ...] - format_data = [{"port": int(key.split("_")[-1]), "count": value} for key, value in data.items()] + format_data = [ + { + "port": int(key.split("_")[-1]), + "count": int(value), + } + for key, value in kwargs["bw_instances_utils"].get_metrics("reversescan").items() + ] format_data.sort(key=itemgetter("count"), reverse=True) - return {"top_reverse_scan": format_data} - except BaseException: - print(format_exc(), flush=True) - return {"top_reverse_scan": [], "error": format_exc()} + data = {"port": [], "count": []} + for item in format_data: + data["port"].append(item["port"]) + data["count"].append(item["count"]) + ret["top_reverse_scan"]["data"] = data + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get reversescan metrics: {e}") + ret["error"] = str(e) + + return ret def reversescan(**kwargs): diff --git a/src/common/core/reversescan/ui/template.html b/src/common/core/reversescan/ui/template.html deleted file mode 100644 index 9f9b84975..000000000 --- a/src/common/core/reversescan/ui/template.html +++ /dev/null @@ -1,145 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the redis plugin in the documentation.' %} - - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/common/core/whitelist/ui/actions.py b/src/common/core/whitelist/ui/actions.py index 4e258ca43..24d839de9 100644 --- a/src/common/core/whitelist/ui/actions.py +++ b/src/common/core/whitelist/ui/actions.py @@ -1,31 +1,26 @@ +from logging import getLogger from traceback import format_exc def pre_render(**kwargs): + logger = getLogger("UI") + ret = { + "counter_passed_whitelist": { + "value": 0, + "title": "WHITELIST", + "subtitle": "Request passed", + "subtitle_color": "success", + "svg_color": "emerald", + }, + } try: - data = kwargs["bw_instances_utils"].get_metrics("whitelist") - return { - "counter_passed_whitelist": { - "value": data.get("counter_passed_whitelist", 0), - "title": "WHITELIST", - "subtitle": "request passed", - "subtitle_color": "success", - "svg_color": "green", - } - } + ret["counter_passed_whitelist"]["value"] = kwargs["bw_instances_utils"].get_metrics("whitelist").get("counter_passed_whitelist", 0) + except BaseException as e: + logger.debug(format_exc()) + logger.error(f"Failed to get whitelist metrics: {e}") + ret["error"] = str(e) - except BaseException: - print(format_exc(), flush=True) - return { - "counter_passed_whitelist": { - "value": "unknown", - "title": "WHITELIST", - "subtitle": "request passed", - "subtitle_color": "success", - "svg_color": "green", - }, - "error": format_exc(), - } + return ret def whitelist(**kwargs): diff --git a/src/common/core/whitelist/ui/template.html b/src/common/core/whitelist/ui/template.html deleted file mode 100644 index 94d00e226..000000000 --- a/src/common/core/whitelist/ui/template.html +++ /dev/null @@ -1,145 +0,0 @@ -{% extends "base.html" %} - -{% set read_doc_text = 'You will find more information about the whitelist plugin in the documentation.' %} - - -{% block content %} - -
- {% if is_used and is_metrics %} -
-
INFO
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ko" or "error" in pre_render.get("data", {}) or pre_render.get("data") is not mapping %}
-
-
- - - -
-

(Pre rendering error) {{ pre_render.get("data", { "error" : "No log to show" }).get("error", "No log to show") }}

-
- {% endif %} - - {% if pre_render.get("status", False) and pre_render.get("status", False) == "ok" and pre_render.get("data") is mapping and "error" not in pre_render.get("data", {}) %} - - - {% for key, value in pre_render.get("data", {}).items() %} - - {% if key.startswith("ping_") %} -
-
-
{{ pre_render['data'][key].get('title', 'STATUS')}}
- - - -
-

{{ 'Active' if pre_render['data'][key].get('value') in ('up', 'yes', 'success', 'true') else 'Inactive' }}

-
- {% endif %} - - - {% if key.startswith("count_") or key.startswith("counter_") %} -
- -
-

{{pre_render['data'][key].get("title")}}

-
{{pre_render['data'][key].get("value")}}
-

- {{pre_render['data'][key].get("subtitle")}} -

-
- - - - -
- {% endif %} - - - {% if (key.startswith("top_") and pre_render['data'][key]|length > 0) or (key.startswith("list_") and pre_render['data'][key]|length > 0) %} -
-
-
{{ key.replace('_', ' ').upper()}}
-
-
- -
- - {% for val_key, val_value in pre_render['data'][key][0].items() %} - - -

{{ val_key }}

- {% endfor%} - - -
    - {% for item in pre_render['data'][key] %} -
  • - {% for top_key, top_value in item.items() %} -

    {{ top_value }}

    - {% endfor %} -
  • - {% endfor %} -
- - -
- -
-
- {% endif %} - - - {% endfor %} - {% endif %} - {% else %} -
-
-
Plugin deactivated
- - - -
-
-

{{plugin.get('description')}}

-
-

{{ read_doc_text|safe }}

-
- - {% endif %} -
-{% endblock %} diff --git a/src/ui/app/routes/plugins.py b/src/ui/app/routes/plugins.py index 92cb484c9..d4afcc09f 100644 --- a/src/ui/app/routes/plugins.py +++ b/src/ui/app/routes/plugins.py @@ -30,11 +30,11 @@ plugins = Blueprint("plugins", __name__) ALWAYS_USED_PLUGINS = ("errors", "headers", "misc", "php", "pro", "sessions") PLUGINS_SPECIFICS = { - "country": {"BLACKLIST_COUNTRY": "", "WHITELIST_COUNTRY": ""}, - "customcert": {"USE_CUSTOM_SSL": "no"}, - "letsencrypt": {"AUTO_LETS_ENCRYPT": "no"}, - "limit": {"USE_LIMIT_REQ": "no", "USE_LIMIT_CONN": "no"}, - "selfsigned": {"GENERATE_SELF_SIGNED_SSL": "no"}, + "COUNTRY": {"BLACKLIST_COUNTRY": "", "WHITELIST_COUNTRY": ""}, + "CUSTOMCERT": {"USE_CUSTOM_SSL": "no"}, + "LETSENCRYPT": {"AUTO_LETS_ENCRYPT": "no"}, + "LIMIT": {"USE_LIMIT_REQ": "no", "USE_LIMIT_CONN": "no"}, + "SELFSIGNED": {"GENERATE_SELF_SIGNED_SSL": "no"}, }