From bfe498758ce85329cdd9e2aacf4749bc5cb9d507 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 12 Feb 2023 17:27:23 +0100 Subject: [PATCH] weblog buffer without large json --- interface/src/framework/system/SystemLog.tsx | 15 +++----- src/web/WebLogService.cpp | 37 ++++---------------- 2 files changed, 11 insertions(+), 41 deletions(-) diff --git a/interface/src/framework/system/SystemLog.tsx b/interface/src/framework/system/SystemLog.tsx index a2f237405..e402bfa05 100644 --- a/interface/src/framework/system/SystemLog.tsx +++ b/interface/src/framework/system/SystemLog.tsx @@ -73,7 +73,6 @@ const SystemLog: FC = () => { }); const [errorMessage, setErrorMessage] = useState(); - const [reconnectTimeout, setReconnectTimeout] = useState(); const [logEntries, setLogEntries] = useState({ events: [] }); const [lastIndex, setLastIndex] = useState(0); @@ -162,7 +161,7 @@ const SystemLog: FC = () => { const fetchLog = useCallback(async () => { try { - setLogEntries((await SystemApi.readLogEntries()).data); + await SystemApi.readLogEntries(); } catch (error) { setErrorMessage(extractErrorMessage(error, LL.PROBLEM_LOADING())); } @@ -176,20 +175,14 @@ const SystemLog: FC = () => { const es = new EventSource(addAccessTokenParameter(LOG_EVENTSOURCE_URL)); es.onmessage = onMessage; es.onerror = () => { - if (reconnectTimeout) { - es.close(); - setReconnectTimeout(setTimeout(reloadPage, 1000)); - } + es.close(); + reloadPage(); }; - return () => { es.close(); - if (reconnectTimeout) { - clearTimeout(reconnectTimeout); - } }; // eslint-disable-next-line - }, [reconnectTimeout]); + }, []); const content = () => { if (!data) { diff --git a/src/web/WebLogService.cpp b/src/web/WebLogService.cpp index 74992cf05..168f1e366 100644 --- a/src/web/WebLogService.cpp +++ b/src/web/WebLogService.cpp @@ -136,7 +136,7 @@ void WebLogService::operator<<(std::shared_ptr message) { log_messages_.pop_front(); } - log_messages_.emplace_back(log_message_id_++, std::move(message)); + log_messages_.emplace_back(++log_message_id_, std::move(message)); EMSESP::esp8266React.getNTPSettingsService()->read([&](NTPSettings & settings) { if (!settings.enabled || (time(nullptr) < 1500000000L)) { @@ -191,9 +191,9 @@ char * WebLogService::messagetime(char * out, const uint64_t t, const size_t buf // send to web eventsource void WebLogService::transmit(const QueuedLogMessage & message) { - auto jsonDocument = DynamicJsonDocument(EMSESP_JSON_SIZE_MEDIUM); - JsonObject logEvent = jsonDocument.to(); - char time_string[25]; + StaticJsonDocument jsonDocument; + JsonObject logEvent = jsonDocument.to(); + char time_string[25]; logEvent["t"] = messagetime(time_string, message.content_->uptime_ms, sizeof(time_string)); logEvent["l"] = message.content_->level; @@ -212,34 +212,11 @@ void WebLogService::transmit(const QueuedLogMessage & message) { // send the complete log buffer to the API, not filtering on log level void WebLogService::fetchLog(AsyncWebServerRequest * request) { - // auto * response = new MsgpackAsyncJsonResponse(false, EMSESP_JSON_SIZE_LARGE_DYN + 192 * log_messages_.size()); - size_t buffer = EMSESP_JSON_SIZE_XLARGE_DYN + 192 * log_messages_.size(); - auto * response = new MsgpackAsyncJsonResponse(false, buffer); - while (!response->getSize()) { - delete response; - buffer -= 1024; - response = new MsgpackAsyncJsonResponse(false, buffer); - } - JsonObject root = response->getRoot(); - JsonArray log = root.createNestedArray("events"); - - log_message_id_tail_ = log_messages_.back().id_; - last_transmit_ = uuid::get_uptime_ms(); - for (const auto & message : log_messages_) { - JsonObject logEvent = log.createNestedObject(); - char time_string[25]; - - logEvent["t"] = messagetime(time_string, message.content_->uptime_ms, sizeof(time_string)); - logEvent["l"] = message.content_->level; - logEvent["i"] = message.id_; - logEvent["n"] = message.content_->name; - logEvent["m"] = message.content_->text; - } - log_message_id_tail_ = log_messages_.back().id_; - response->setLength(); - request->send(response); + log_message_id_tail_ = 0; + request->send(200); } + // sets the values like level after a POST void WebLogService::setValues(AsyncWebServerRequest * request, JsonVariant & json) { if (!json.is()) {