#include "util.h"
#include "sd-journal.h"
#include "sd-daemon.h"
+#include "sd-bus.h"
+#include "bus-util.h"
#include "logs-show.h"
#include "microhttpd-util.h"
-#include "virt.h"
#include "build.h"
#include "fileio.h"
if (m->journal)
return 0;
- return sd_journal_open(&m->journal, SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_SYSTEM_ONLY);
+ return sd_journal_open(&m->journal, SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_SYSTEM);
}
-
static int respond_oom_internal(struct MHD_Connection *connection) {
struct MHD_Response *response;
const char m[] = "Out of memory.\n";
}
}
- r = output_journal(m->tmp, m->journal, m->mode, 0, OUTPUT_FULL_WIDTH);
+ r = output_journal(m->tmp, m->journal, m->mode, 0, OUTPUT_FULL_WIDTH, NULL);
if (r < 0) {
log_error("Failed to serialize item: %s", strerror(-r));
return MHD_CONTENT_READER_END_WITH_ERROR;
colon2 = strchr(colon + 1, ':');
if (colon2) {
- char _cleanup_free_ *t;
+ _cleanup_free_ char *t;
t = strndup(colon + 1, colon2 - colon - 1);
if (!t)
return ret;
}
+static int get_virtualization(char **v) {
+ _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
+ _cleanup_bus_unref_ sd_bus *bus = NULL;
+ const char *t;
+ char *b;
+ int r;
+
+ r = sd_bus_open_system(&bus);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_call_method(
+ bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ NULL,
+ &reply,
+ "ss",
+ "org.freedesktop.systemd1.Manager",
+ "Virtualization");
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_read(reply, "v", "s", &t);
+ if (r < 0)
+ return r;
+
+ if (isempty(t)) {
+ *v = NULL;
+ return 0;
+ }
+
+ b = strdup(t);
+ if (!b)
+ return -ENOMEM;
+
+ *v = b;
+ return 1;
+}
+
static int request_handler_machine(
struct MHD_Connection *connection,
void *connection_cls) {
uint64_t cutoff_from, cutoff_to, usage;
char *json;
sd_id128_t mid, bid;
- const char *v = "bare";
+ _cleanup_free_ char *v = NULL;
assert(connection);
assert(m);
parse_env_file("/etc/os-release", NEWLINE, "PRETTY_NAME", &os_name, NULL);
- detect_virtualization(&v);
+ get_virtualization(&v);
r = asprintf(&json,
"{ \"machine_id\" : \"" SD_ID128_FORMAT_STR "\","
"\"hostname\" : \"%s\","
"\"os_pretty_name\" : \"%s\","
"\"virtualization\" : \"%s\","
- "\"usage\" : \"%llu\","
- "\"cutoff_from_realtime\" : \"%llu\","
- "\"cutoff_to_realtime\" : \"%llu\" }\n",
+ "\"usage\" : \"%"PRIu64"\","
+ "\"cutoff_from_realtime\" : \"%"PRIu64"\","
+ "\"cutoff_to_realtime\" : \"%"PRIu64"\" }\n",
SD_ID128_FORMAT_VAL(mid),
SD_ID128_FORMAT_VAL(bid),
- hostname_cleanup(hostname),
+ hostname_cleanup(hostname, false),
os_name ? os_name : "Linux",
- v,
- (unsigned long long) usage,
- (unsigned long long) cutoff_from,
- (unsigned long long) cutoff_to);
+ v ? v : "bare",
+ usage,
+ cutoff_from,
+ cutoff_to);
if (r < 0)
return respond_oom(connection);