http_request: add request duration logging (#4272)

This commit is contained in:
Stas 2023-01-10 07:40:42 +03:00 committed by GitHub
parent 74556b28a8
commit c16c0b11cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 8 deletions

View file

@ -195,6 +195,8 @@ async def http_request_action_to_code(config, action_id, template_arg, args):
for conf in config.get(CONF_ON_RESPONSE, []): for conf in config.get(CONF_ON_RESPONSE, []):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID]) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID])
cg.add(var.register_response_trigger(trigger)) cg.add(var.register_response_trigger(trigger))
await automation.build_automation(trigger, [(int, "status_code")], conf) await automation.build_automation(
trigger, [(int, "status_code"), (cg.uint32, "duration_ms")], conf
)
return var return var

View file

@ -66,6 +66,9 @@ void HttpRequestComponent::send(const std::vector<HttpRequestResponseTrigger *>
} }
this->client_.setTimeout(this->timeout_); this->client_.setTimeout(this->timeout_);
#if defined(USE_ESP32)
this->client_.setConnectTimeout(this->timeout_);
#endif
if (this->useragent_ != nullptr) { if (this->useragent_ != nullptr) {
this->client_.setUserAgent(this->useragent_); this->client_.setUserAgent(this->useragent_);
} }
@ -73,25 +76,27 @@ void HttpRequestComponent::send(const std::vector<HttpRequestResponseTrigger *>
this->client_.addHeader(header.name, header.value, false, true); this->client_.addHeader(header.name, header.value, false, true);
} }
uint32_t start_time = millis();
int http_code = this->client_.sendRequest(this->method_, this->body_.c_str()); int http_code = this->client_.sendRequest(this->method_, this->body_.c_str());
uint32_t duration = millis() - start_time;
for (auto *trigger : response_triggers) for (auto *trigger : response_triggers)
trigger->process(http_code); trigger->process(http_code, duration);
if (http_code < 0) { if (http_code < 0) {
ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Error: %s", this->url_.c_str(), ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Error: %s; Duration: %u ms", this->url_.c_str(),
HTTPClient::errorToString(http_code).c_str()); HTTPClient::errorToString(http_code).c_str(), duration);
this->status_set_warning(); this->status_set_warning();
return; return;
} }
if (http_code < 200 || http_code >= 300) { if (http_code < 200 || http_code >= 300) {
ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Code: %d", this->url_.c_str(), http_code); ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Code: %d; Duration: %u ms", this->url_.c_str(), http_code, duration);
this->status_set_warning(); this->status_set_warning();
return; return;
} }
this->status_clear_warning(); this->status_clear_warning();
ESP_LOGD(TAG, "HTTP Request completed; URL: %s; Code: %d", this->url_.c_str(), http_code); ESP_LOGD(TAG, "HTTP Request completed; URL: %s; Code: %d; Duration: %u ms", this->url_.c_str(), http_code, duration);
} }
#ifdef USE_ESP8266 #ifdef USE_ESP8266

View file

@ -138,9 +138,9 @@ template<typename... Ts> class HttpRequestSendAction : public Action<Ts...> {
std::vector<HttpRequestResponseTrigger *> response_triggers_; std::vector<HttpRequestResponseTrigger *> response_triggers_;
}; };
class HttpRequestResponseTrigger : public Trigger<int> { class HttpRequestResponseTrigger : public Trigger<int, uint32_t> {
public: public:
void process(int status_code) { this->trigger(status_code); } void process(int status_code, uint32_t duration_ms) { this->trigger(status_code, duration_ms); }
}; };
} // namespace http_request } // namespace http_request