diff --git a/Software/src/devboard/webserver/events_html.cpp b/Software/src/devboard/webserver/events_html.cpp index fdc4f738..dc6ca02b 100644 --- a/Software/src/devboard/webserver/events_html.cpp +++ b/Software/src/devboard/webserver/events_html.cpp @@ -1,6 +1,4 @@ #include "events_html.h" -#include -#include "../utils/events.h" const char EVENTS_HTML_START[] = R"=====(
Event Type
Severity
Last Event
Count
Data
Message
@@ -12,6 +10,13 @@ const char EVENTS_HTML_END[] = R"=====( )====="; +static std::vector order_events; + +// Function to compare events by timestamp +static bool compareEventsByTimestamp(const EventData& a, const EventData& b) { + return a.event_pointer->timestamp > b.event_pointer->timestamp; +} + String events_processor(const String& var) { if (var == "X") { String content = ""; @@ -22,30 +27,45 @@ String events_processor(const String& var) { unsigned long timestamp_now = get_current_event_time_secs(); + //clear the vector + order_events.clear(); + // Collect all events for (int i = 0; i < EVENT_NOF_EVENTS; i++) { event_pointer = get_event_pointer((EVENTS_ENUM_TYPE)i); - EVENTS_ENUM_TYPE event_handle = static_cast(i); + if (event_pointer->occurences > 0) { + order_events.push_back({static_cast(i), event_pointer}); + } + } + + // Sort events by timestamp + std::sort(order_events.begin(), order_events.end(), compareEventsByTimestamp); + + // Generate HTML and debug output + for (const auto& event : order_events) { + EVENTS_ENUM_TYPE event_handle = event.event_handle; + event_pointer = event.event_pointer; #ifdef DEBUG_VIA_USB Serial.println("Event: " + String(get_event_enum_string(event_handle)) + " count: " + String(event_pointer->occurences) + " seconds: " + String(event_pointer->timestamp) + " data: " + String(event_pointer->data) + " level: " + String(get_event_level_string(event_handle))); #endif - if (event_pointer->occurences > 0) { - content.concat("
"); - content.concat("
" + String(get_event_enum_string(event_handle)) + "
"); - content.concat("
" + String(get_event_level_string(event_handle)) + "
"); - content.concat("
" + String(timestamp_now - event_pointer->timestamp) + "
"); - content.concat("
" + String(event_pointer->occurences) + "
"); - content.concat("
" + String(event_pointer->data) + "
"); - content.concat("
" + String(get_event_message_string(event_handle)) + "
"); - content.concat("
"); // End of event row - } + content.concat("
"); + content.concat("
" + String(get_event_enum_string(event_handle)) + "
"); + content.concat("
" + String(get_event_level_string(event_handle)) + "
"); + content.concat("
" + String(timestamp_now - event_pointer->timestamp) + "
"); + content.concat("
" + String(event_pointer->occurences) + "
"); + content.concat("
" + String(event_pointer->data) + "
"); + content.concat("
" + String(get_event_message_string(event_handle)) + "
"); + content.concat("
"); // End of event row } + + //clear the vector + order_events.clear(); content.concat(FPSTR(EVENTS_HTML_END)); return content; + return String(); } - return String(); } /* Script for displaying event log before it gets minified diff --git a/Software/src/devboard/webserver/events_html.h b/Software/src/devboard/webserver/events_html.h index 073e305a..debd2d99 100644 --- a/Software/src/devboard/webserver/events_html.h +++ b/Software/src/devboard/webserver/events_html.h @@ -2,6 +2,9 @@ #define EVENTS_H #include +#include +#include +#include "../utils/events.h" /** * @brief Replaces placeholder with content section in web page @@ -11,5 +14,10 @@ * @return String */ String events_processor(const String& var); +// Define a struct to hold event data +struct EventData { + EVENTS_ENUM_TYPE event_handle; + const EVENTS_STRUCT_TYPE* event_pointer; +}; #endif