mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-10 01:39:54 +03:00
weblog buffer without large json
This commit is contained in:
@@ -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,14 @@ 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();
|
||||||
setReconnectTimeout(setTimeout(reloadPage, 1000));
|
reloadPage();
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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) {
|
||||||
|
|||||||
@@ -136,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)) {
|
||||||
@@ -191,7 +191,7 @@ 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];
|
||||||
|
|
||||||
@@ -212,34 +212,11 @@ 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) {
|
||||||
// auto * response = new MsgpackAsyncJsonResponse(false, EMSESP_JSON_SIZE_LARGE_DYN + 192 * log_messages_.size());
|
log_message_id_tail_ = 0;
|
||||||
size_t buffer = EMSESP_JSON_SIZE_XLARGE_DYN + 192 * log_messages_.size();
|
request->send(200);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// sets the values like level after a POST
|
// sets the values like level after a POST
|
||||||
void WebLogService::setValues(AsyncWebServerRequest * request, JsonVariant & json) {
|
void WebLogService::setValues(AsyncWebServerRequest * request, JsonVariant & json) {
|
||||||
if (!json.is<JsonObject>()) {
|
if (!json.is<JsonObject>()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user