NTP time for weblog

This commit is contained in:
MichaelDvP
2021-07-06 07:35:39 +02:00
parent 7c71ed2dc6
commit 48cd12ec3d
2 changed files with 34 additions and 8 deletions

View File

@@ -80,6 +80,13 @@ void WebLogService::operator<<(std::shared_ptr<uuid::log::Message> message) {
log_messages_.pop_front();
}
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() {
@@ -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
void WebLogService::transmit(const QueuedLogMessage & message) {
DynamicJsonDocument jsonDocument = DynamicJsonDocument(EMSESP_JSON_SIZE_SMALL);
JsonObject logEvent = jsonDocument.to<JsonObject>();
logEvent["t"] = uuid::log::format_timestamp_ms(message.content_->uptime_ms, 3);
logEvent["l"] = message.content_->level;
logEvent["n"] = message.content_->name;
logEvent["m"] = message.content_->text;
char time_string[25];
logEvent["t"] = messagetime(time_string, message.content_->uptime_ms);
logEvent["l"] = message.content_->level;
logEvent["n"] = message.content_->name;
logEvent["m"] = message.content_->text;
size_t len = measureJson(jsonDocument);
char * buffer = new char[len + 1];
@@ -129,10 +148,11 @@ void WebLogService::fetchLog(AsyncWebServerRequest * request) {
for (const auto & msg : log_messages_) {
JsonObject logEvent = log.createNestedObject();
auto message = std::move(msg);
logEvent["t"] = uuid::log::format_timestamp_ms(message.content_->uptime_ms, 3);
logEvent["l"] = message.content_->level;
logEvent["n"] = message.content_->name;
logEvent["m"] = message.content_->text;
char time_string[25];
logEvent["t"] = messagetime(time_string, message.content_->uptime_ms);
logEvent["l"] = message.content_->level;
logEvent["n"] = message.content_->name;
logEvent["m"] = message.content_->text;
}
log_message_id_tail_ = log_messages_.back().id_;
@@ -149,6 +169,9 @@ void WebLogService::setLevel(AsyncWebServerRequest * request, JsonVariant & json
auto && body = json.as<JsonObject>();
uuid::log::Level level = body["level"];
log_level(level);
if (level == uuid::log::Level::OFF) {
log_messages_.clear();
}
// send the value back
AsyncJsonResponse * response = new AsyncJsonResponse(false, EMSESP_JSON_SIZE_SMALL);