Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
kcenon::monitoring::simple_http_client Class Reference

Simple HTTP client using basic socket operations. More...

#include <http_transport.h>

Inheritance diagram for kcenon::monitoring::simple_http_client:
Inheritance graph
Collaboration diagram for kcenon::monitoring::simple_http_client:
Collaboration graph

Classes

struct  url_parts
 

Public Member Functions

 simple_http_client (std::chrono::milliseconds timeout=std::chrono::milliseconds(30000))
 
common::Result< http_responsesend (const http_request &request) override
 Send HTTP request and receive response.
 
bool is_available () const override
 Check if transport is available.
 
std::string name () const override
 Get transport name.
 
- Public Member Functions inherited from kcenon::monitoring::http_transport
virtual ~http_transport ()=default
 

Private Member Functions

url_parts parse_url (const std::string &url)
 

Private Attributes

std::chrono::milliseconds default_timeout_ {30000}
 
bool use_tls_ {false}
 

Detailed Description

Simple HTTP client using basic socket operations.

This implementation provides basic HTTP functionality without external dependencies. For production use, consider integrating a full HTTP library like libcurl or cpp-httplib.

Definition at line 141 of file http_transport.h.

Constructor & Destructor Documentation

◆ simple_http_client()

kcenon::monitoring::simple_http_client::simple_http_client ( std::chrono::milliseconds timeout = std::chrono::milliseconds(30000))
inlineexplicit

Definition at line 147 of file http_transport.h.

148 : default_timeout_(timeout) {}
std::chrono::milliseconds default_timeout_

Member Function Documentation

◆ is_available()

bool kcenon::monitoring::simple_http_client::is_available ( ) const
inlineoverridevirtual

Check if transport is available.

Implements kcenon::monitoring::http_transport.

Definition at line 179 of file http_transport.h.

179 {
180 // Stub transport cannot actually send data
181 return false;
182 }

◆ name()

std::string kcenon::monitoring::simple_http_client::name ( ) const
inlineoverridevirtual

Get transport name.

Implements kcenon::monitoring::http_transport.

Definition at line 184 of file http_transport.h.

184 {
185 return "stub";
186 }

◆ parse_url()

url_parts kcenon::monitoring::simple_http_client::parse_url ( const std::string & url)
inlineprivate

Definition at line 197 of file http_transport.h.

197 {
198 url_parts parts;
199
200 // Find scheme
201 auto scheme_end = url.find("://");
202 if (scheme_end == std::string::npos) {
203 return parts;
204 }
205 parts.scheme = url.substr(0, scheme_end);
206
207 // Find host and port
208 auto host_start = scheme_end + 3;
209 auto path_start = url.find('/', host_start);
210 if (path_start == std::string::npos) {
211 path_start = url.length();
212 }
213
214 auto host_port = url.substr(host_start, path_start - host_start);
215 auto colon_pos = host_port.find(':');
216 if (colon_pos != std::string::npos) {
217 parts.host = host_port.substr(0, colon_pos);
218 try {
219 parts.port = std::stoi(host_port.substr(colon_pos + 1));
220 } catch (...) {
221 return parts;
222 }
223 } else {
224 parts.host = host_port;
225 parts.port = (parts.scheme == "https") ? 443 : 80;
226 }
227
228 // Extract path
229 if (path_start < url.length()) {
230 parts.path = url.substr(path_start);
231 } else {
232 parts.path = "/";
233 }
234
235 parts.valid = !parts.host.empty();
236 return parts;
237 }

References kcenon::monitoring::simple_http_client::url_parts::host, kcenon::monitoring::simple_http_client::url_parts::path, kcenon::monitoring::simple_http_client::url_parts::port, kcenon::monitoring::simple_http_client::url_parts::scheme, and kcenon::monitoring::simple_http_client::url_parts::valid.

Referenced by send().

Here is the caller graph for this function:

◆ send()

common::Result< http_response > kcenon::monitoring::simple_http_client::send ( const http_request & request)
inlineoverridevirtual

Send HTTP request and receive response.

Implements kcenon::monitoring::http_transport.

Definition at line 150 of file http_transport.h.

150 {
151 // Parse URL to extract host, port, and path
152 auto url_parts = parse_url(request.url);
153 if (!url_parts.valid) {
155 "Invalid URL: " + request.url);
156 return common::Result<http_response>::err(err.to_common_error());
157 }
158
159 use_tls_ = url_parts.scheme == "https";
160
161 // No real HTTP transport available. Return error instead of
162 // fake 202 success, so callers know data was NOT sent.
163 // Build with MONITORING_WITH_NETWORK_SYSTEM=ON for real transport.
164 static bool warned = false;
165 if (!warned)
166 {
167 std::cerr << "[monitoring_system] WARNING: Trace export configured but no HTTP "
168 << "transport available. Build with MONITORING_WITH_NETWORK_SYSTEM=ON "
169 << "or provide a real http_transport implementation. "
170 << "Trace data is NOT being exported.\n";
171 warned = true;
172 }
173
175 "No HTTP transport available (stub mode)");
176 return common::Result<http_response>::err(err.to_common_error());
177 }
url_parts parse_url(const std::string &url)

References kcenon::monitoring::invalid_configuration, parse_url(), kcenon::monitoring::simple_http_client::url_parts::scheme, kcenon::monitoring::error_info::to_common_error(), kcenon::monitoring::http_request::url, use_tls_, and kcenon::monitoring::simple_http_client::url_parts::valid.

Here is the call graph for this function:

Member Data Documentation

◆ default_timeout_

std::chrono::milliseconds kcenon::monitoring::simple_http_client::default_timeout_ {30000}
private

Definition at line 143 of file http_transport.h.

143{30000};

◆ use_tls_

bool kcenon::monitoring::simple_http_client::use_tls_ {false}
private

Definition at line 144 of file http_transport.h.

144{false};

Referenced by send().


The documentation for this class was generated from the following file: