diff --git a/interface/src/framework/system/SystemLog.tsx b/interface/src/framework/system/SystemLog.tsx index ace1cd31c..34602920c 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,15 @@ 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) { @@ -210,6 +204,7 @@ const SystemLog: FC = () => { margin="normal" select > + OFF ERROR WARNING NOTICE diff --git a/src/web/WebLogService.cpp b/src/web/WebLogService.cpp index e680e2899..6a3e6fc4f 100644 --- a/src/web/WebLogService.cpp +++ b/src/web/WebLogService.cpp @@ -57,6 +57,9 @@ void WebLogService::start() { limit_log_messages_ = maximum_log_messages_; compact_ = settings.weblog_compact; uuid::log::Logger::register_handler(this, (uuid::log::Level)settings.weblog_level); + if ((uuid::log::Level)settings.weblog_level == uuid::log::Level::OFF) { + log_messages_.clear(); + } }); } @@ -72,6 +75,9 @@ void WebLogService::log_level(uuid::log::Level level) { }, "local"); uuid::log::Logger::register_handler(this, level); + if (level == uuid::log::Level::OFF) { + log_messages_.clear(); + } } size_t WebLogService::num_log_messages() const { @@ -130,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)) { @@ -185,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; @@ -206,31 +212,8 @@ void WebLogService::transmit(const QueuedLogMessage & message) { // send the complete log buffer to the API, not filtering on log level void WebLogService::fetchLog(AsyncWebServerRequest * request) { - size_t buffer = EMSESP_JSON_SIZE_XXLARGE + 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