merge PR #909 (weblog send queue one by one, no json buffer needed #909)

This commit is contained in:
proddy
2023-01-19 16:05:43 +01:00
parent 9fe6b9d0e5
commit 4e783d414c
2 changed files with 17 additions and 39 deletions

View File

@@ -73,7 +73,6 @@ const SystemLog: FC = () => {
}); });
const [errorMessage, setErrorMessage] = useState<string>(); const [errorMessage, setErrorMessage] = useState<string>();
const [reconnectTimeout, setReconnectTimeout] = useState<NodeJS.Timeout>();
const [logEntries, setLogEntries] = useState<LogEntries>({ events: [] }); const [logEntries, setLogEntries] = useState<LogEntries>({ events: [] });
const [lastIndex, setLastIndex] = useState<number>(0); const [lastIndex, setLastIndex] = useState<number>(0);
@@ -162,7 +161,7 @@ const SystemLog: FC = () => {
const fetchLog = useCallback(async () => { const fetchLog = useCallback(async () => {
try { try {
setLogEntries((await SystemApi.readLogEntries()).data); await SystemApi.readLogEntries();
} catch (error) { } catch (error) {
setErrorMessage(extractErrorMessage(error, LL.PROBLEM_LOADING())); setErrorMessage(extractErrorMessage(error, LL.PROBLEM_LOADING()));
} }
@@ -176,20 +175,15 @@ const SystemLog: FC = () => {
const es = new EventSource(addAccessTokenParameter(LOG_EVENTSOURCE_URL)); const es = new EventSource(addAccessTokenParameter(LOG_EVENTSOURCE_URL));
es.onmessage = onMessage; es.onmessage = onMessage;
es.onerror = () => { es.onerror = () => {
if (reconnectTimeout) { es.close();
es.close(); reloadPage();
setReconnectTimeout(setTimeout(reloadPage, 1000));
}
}; };
return () => { return () => {
es.close(); es.close();
if (reconnectTimeout) {
clearTimeout(reconnectTimeout);
}
}; };
// eslint-disable-next-line // eslint-disable-next-line
}, [reconnectTimeout]); }, []);
const content = () => { const content = () => {
if (!data) { if (!data) {
@@ -210,6 +204,7 @@ const SystemLog: FC = () => {
margin="normal" margin="normal"
select select
> >
<MenuItem value={-1}>OFF</MenuItem>
<MenuItem value={3}>ERROR</MenuItem> <MenuItem value={3}>ERROR</MenuItem>
<MenuItem value={4}>WARNING</MenuItem> <MenuItem value={4}>WARNING</MenuItem>
<MenuItem value={5}>NOTICE</MenuItem> <MenuItem value={5}>NOTICE</MenuItem>

View File

@@ -57,6 +57,9 @@ void WebLogService::start() {
limit_log_messages_ = maximum_log_messages_; limit_log_messages_ = maximum_log_messages_;
compact_ = settings.weblog_compact; compact_ = settings.weblog_compact;
uuid::log::Logger::register_handler(this, (uuid::log::Level)settings.weblog_level); 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"); "local");
uuid::log::Logger::register_handler(this, level); uuid::log::Logger::register_handler(this, level);
if (level == uuid::log::Level::OFF) {
log_messages_.clear();
}
} }
size_t WebLogService::num_log_messages() const { size_t WebLogService::num_log_messages() const {
@@ -130,7 +136,7 @@ void WebLogService::operator<<(std::shared_ptr<uuid::log::Message> message) {
log_messages_.pop_front(); 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) { EMSESP::esp8266React.getNTPSettingsService()->read([&](NTPSettings & settings) {
if (!settings.enabled || (time(nullptr) < 1500000000L)) { 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 // send to web eventsource
void WebLogService::transmit(const QueuedLogMessage & message) { void WebLogService::transmit(const QueuedLogMessage & message) {
auto jsonDocument = DynamicJsonDocument(EMSESP_JSON_SIZE_MEDIUM); StaticJsonDocument<EMSESP_JSON_SIZE_MEDIUM> jsonDocument;
JsonObject logEvent = jsonDocument.to<JsonObject>(); JsonObject logEvent = jsonDocument.to<JsonObject>();
char time_string[25]; char time_string[25];
logEvent["t"] = messagetime(time_string, message.content_->uptime_ms, sizeof(time_string)); logEvent["t"] = messagetime(time_string, message.content_->uptime_ms, sizeof(time_string));
logEvent["l"] = message.content_->level; 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 // send the complete log buffer to the API, not filtering on log level
void WebLogService::fetchLog(AsyncWebServerRequest * request) { void WebLogService::fetchLog(AsyncWebServerRequest * request) {
size_t buffer = EMSESP_JSON_SIZE_XXLARGE + 192 * log_messages_.size(); log_message_id_tail_ = 0;
auto * response = new MsgpackAsyncJsonResponse(false, buffer); request->send(200);
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);
} }
// sets the values like level after a POST // sets the values like level after a POST