r = sd_varlink_connect_address(&vl, path);
if (r < 0)
- return log_debug_errno(r, "Unable to connect to %s: %m", path);
+ return log_error_errno(r, "Unable to connect to %s: %m", path);
(void) sd_varlink_set_userdata(vl, context);
r = sd_varlink_attach_event(vl, event, SD_EVENT_PRIORITY_NORMAL);
if (r < 0)
- return log_debug_errno(r, "Failed to attach varlink connection to event loop: %m");
+ return log_error_errno(r, "Failed to attach varlink connection to event loop: %m");
r = sd_varlink_bind_reply(vl, metrics_on_query_reply);
if (r < 0)
- return log_debug_errno(r, "Failed to bind reply callback: %m");
+ return log_error_errno(r, "Failed to bind reply callback: %m");
r = sd_varlink_observe(vl, "io.systemd.Metrics.List", /* parameters= */ NULL);
if (r < 0)
- return log_debug_errno(r, "Failed to issue io.systemd.Metrics.List call: %m");
+ return log_error_errno(r, "Failed to issue io.systemd.Metrics.List call: %m");
*ret = TAKE_PTR(vl);
SD_JSON_FORMAT_PRETTY_AUTO | SD_JSON_FORMAT_COLOR_AUTO | SD_JSON_FORMAT_FLUSH,
stdout,
NULL);
+
+ if (context->n_metrics == 0)
+ log_warning("No reporting sockets found.");
}
static int metrics_query(void) {
if (r < 0)
return log_error_errno(r, "Failed to determine metrics directory path: %m");
- _cleanup_closedir_ DIR *d = opendir(metrics_path);
- if (!d) {
- if (errno == ENOENT)
- return 0;
+ log_debug("Looking for reports in %s/", metrics_path);
- return log_error_errno(errno, "Failed to open directory %s: %m", metrics_path);
- }
+ _cleanup_closedir_ DIR *d = opendir(metrics_path);
+ if (!d)
+ return log_full_errno(errno == ENOENT ? LOG_WARNING : LOG_ERR, errno,
+ "Failed to open metrics directory %s: %m", metrics_path);
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
r = sd_event_default(&event);
size_t n_varlinks = MAX_CONCURRENT_METRICS_SOCKETS;
sd_varlink **varlinks = new0(sd_varlink *, n_varlinks);
if (!varlinks)
- return log_error_errno(ENOMEM, "Failed to allocate varlinks array: %m");
+ return log_oom();
CLEANUP_ARRAY(varlinks, n_varlinks, sd_varlink_unref_many);
_cleanup_(context_done) Context context = {};
- FOREACH_DIRENT(de, d, return -errno) {
+ FOREACH_DIRENT(de, d,
+ return log_warning_errno(errno, "Failed to read %s: %m", metrics_path)) {
if (!IN_SET(de->d_type, DT_SOCK, DT_UNKNOWN))
continue;
return log_oom();
r = metrics_call(p, event, &varlinks[context.n_open_connections], &context);
- if (r < 0) {
- log_error_errno(r, "Failed to connect to %s: %m", p);
+ if (r < 0)
continue;
- }
if (++context.n_open_connections >= MAX_CONCURRENT_METRICS_SOCKETS) {
log_warning("Too many concurrent metrics sockets, stop iterating");
}
}
- r = sd_event_loop(event);
- if (r < 0)
- return log_error_errno(r, "Failed to run event loop: %m");
+ if (context.n_open_connections > 0) {
+ r = sd_event_loop(event);
+ if (r < 0)
+ return log_error_errno(r, "Failed to run event loop: %m");
+ }
metrics_output_sorted(&context);