mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
NTP time for weblog
This commit is contained in:
@@ -80,6 +80,13 @@ 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) {
|
||||||
|
if (!settings.enabled || (time(nullptr) < 1500000000UL)) {
|
||||||
|
time_offset_ = 0;
|
||||||
|
} else if (!time_offset_) {
|
||||||
|
time_offset_ = time(nullptr) - uuid::get_uptime_sec();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebLogService::loop() {
|
void WebLogService::loop() {
|
||||||
@@ -101,14 +108,26 @@ void WebLogService::loop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char * WebLogService::messagetime(char * out, const uint64_t t) {
|
||||||
|
if (!time_offset_) {
|
||||||
|
strcpy(out, uuid::log::format_timestamp_ms(t, 3).c_str());
|
||||||
|
} else {
|
||||||
|
time_t t1 = time_offset_ + t / 1000ULL;
|
||||||
|
strftime(out, 25, "%F %T", localtime(&t1));
|
||||||
|
snprintf_P(out, 25, "%s.%03d", out, (uint16_t)(t % 1000));
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
// send to web eventsource
|
// send to web eventsource
|
||||||
void WebLogService::transmit(const QueuedLogMessage & message) {
|
void WebLogService::transmit(const QueuedLogMessage & message) {
|
||||||
DynamicJsonDocument jsonDocument = DynamicJsonDocument(EMSESP_JSON_SIZE_SMALL);
|
DynamicJsonDocument jsonDocument = DynamicJsonDocument(EMSESP_JSON_SIZE_SMALL);
|
||||||
JsonObject logEvent = jsonDocument.to<JsonObject>();
|
JsonObject logEvent = jsonDocument.to<JsonObject>();
|
||||||
logEvent["t"] = uuid::log::format_timestamp_ms(message.content_->uptime_ms, 3);
|
char time_string[25];
|
||||||
logEvent["l"] = message.content_->level;
|
logEvent["t"] = messagetime(time_string, message.content_->uptime_ms);
|
||||||
logEvent["n"] = message.content_->name;
|
logEvent["l"] = message.content_->level;
|
||||||
logEvent["m"] = message.content_->text;
|
logEvent["n"] = message.content_->name;
|
||||||
|
logEvent["m"] = message.content_->text;
|
||||||
|
|
||||||
size_t len = measureJson(jsonDocument);
|
size_t len = measureJson(jsonDocument);
|
||||||
char * buffer = new char[len + 1];
|
char * buffer = new char[len + 1];
|
||||||
@@ -129,10 +148,11 @@ void WebLogService::fetchLog(AsyncWebServerRequest * request) {
|
|||||||
for (const auto & msg : log_messages_) {
|
for (const auto & msg : log_messages_) {
|
||||||
JsonObject logEvent = log.createNestedObject();
|
JsonObject logEvent = log.createNestedObject();
|
||||||
auto message = std::move(msg);
|
auto message = std::move(msg);
|
||||||
logEvent["t"] = uuid::log::format_timestamp_ms(message.content_->uptime_ms, 3);
|
char time_string[25];
|
||||||
logEvent["l"] = message.content_->level;
|
logEvent["t"] = messagetime(time_string, message.content_->uptime_ms);
|
||||||
logEvent["n"] = message.content_->name;
|
logEvent["l"] = message.content_->level;
|
||||||
logEvent["m"] = message.content_->text;
|
logEvent["n"] = message.content_->name;
|
||||||
|
logEvent["m"] = message.content_->text;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_message_id_tail_ = log_messages_.back().id_;
|
log_message_id_tail_ = log_messages_.back().id_;
|
||||||
@@ -149,6 +169,9 @@ void WebLogService::setLevel(AsyncWebServerRequest * request, JsonVariant & json
|
|||||||
auto && body = json.as<JsonObject>();
|
auto && body = json.as<JsonObject>();
|
||||||
uuid::log::Level level = body["level"];
|
uuid::log::Level level = body["level"];
|
||||||
log_level(level);
|
log_level(level);
|
||||||
|
if (level == uuid::log::Level::OFF) {
|
||||||
|
log_messages_.clear();
|
||||||
|
}
|
||||||
|
|
||||||
// send the value back
|
// send the value back
|
||||||
AsyncJsonResponse * response = new AsyncJsonResponse(false, EMSESP_JSON_SIZE_SMALL);
|
AsyncJsonResponse * response = new AsyncJsonResponse(false, EMSESP_JSON_SIZE_SMALL);
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ class WebLogService : public uuid::log::Handler {
|
|||||||
void fetchLog(AsyncWebServerRequest * request);
|
void fetchLog(AsyncWebServerRequest * request);
|
||||||
void getLevel(AsyncWebServerRequest * request);
|
void getLevel(AsyncWebServerRequest * request);
|
||||||
|
|
||||||
|
char * messagetime(char * out, const uint64_t t);
|
||||||
|
|
||||||
void setLevel(AsyncWebServerRequest * request, JsonVariant & json);
|
void setLevel(AsyncWebServerRequest * request, JsonVariant & json);
|
||||||
AsyncCallbackJsonWebHandler _setLevel; // for POSTs
|
AsyncCallbackJsonWebHandler _setLevel; // for POSTs
|
||||||
|
|
||||||
@@ -73,6 +75,7 @@ class WebLogService : public uuid::log::Handler {
|
|||||||
unsigned long log_message_id_ = 0; // The next identifier to use for queued log messages
|
unsigned long log_message_id_ = 0; // The next identifier to use for queued log messages
|
||||||
unsigned long log_message_id_tail_ = 0; // last event shown on the screen after fetch
|
unsigned long log_message_id_tail_ = 0; // last event shown on the screen after fetch
|
||||||
std::list<QueuedLogMessage> log_messages_; // Queued log messages, in the order they were received
|
std::list<QueuedLogMessage> log_messages_; // Queued log messages, in the order they were received
|
||||||
|
time_t time_offset_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
Reference in New Issue
Block a user