mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
unit: record inactive enter/exit timestamps to facilitate syslog lookups
This commit is contained in:
parent
30de7d8520
commit
173e382182
@ -52,8 +52,10 @@
|
||||
" <property name=\"ActiveState\" type=\"s\" access=\"read\"/>" \
|
||||
" <property name=\"SubState\" type=\"s\" access=\"read\"/>" \
|
||||
" <property name=\"FragmentPath\" type=\"s\" access=\"read\"/>" \
|
||||
" <property name=\"InactiveExitTimestamp\" type=\"t\" access=\"read\"/>" \
|
||||
" <property name=\"ActiveEnterTimestamp\" type=\"t\" access=\"read\"/>" \
|
||||
" <property name=\"ActiveExitTimestamp\" type=\"t\" access=\"read\"/>" \
|
||||
" <property name=\"InactiveEnterTimestamp\" type=\"t\" access=\"read\"/>" \
|
||||
" <property name=\"CanReload\" type=\"b\" access=\"read\"/>" \
|
||||
" <property name=\"CanStart\" type=\"b\" access=\"read\"/>" \
|
||||
" <property name=\"Job\" type=\"(uo)\" access=\"read\"/>" \
|
||||
@ -71,8 +73,10 @@
|
||||
{ "org.freedesktop.systemd1.Unit", "ActiveState", bus_unit_append_active_state, "s", u }, \
|
||||
{ "org.freedesktop.systemd1.Unit", "SubState", bus_unit_append_sub_state, "s", u }, \
|
||||
{ "org.freedesktop.systemd1.Unit", "FragmentPath", bus_property_append_string, "s", u->meta.fragment_path }, \
|
||||
{ "org.freedesktop.systemd1.Unit", "InactiveExitTimestamp",bus_property_append_uint64, "t", &u->meta.inactive_exit_timestamp}, \
|
||||
{ "org.freedesktop.systemd1.Unit", "ActiveEnterTimestamp", bus_property_append_uint64, "t", &u->meta.active_enter_timestamp }, \
|
||||
{ "org.freedesktop.systemd1.Unit", "ActiveExitTimestamp", bus_property_append_uint64, "t", &u->meta.active_exit_timestamp }, \
|
||||
{ "org.freedesktop.systemd1.Unit", "InActiveEnterTimestamp",bus_property_append_uint64, "t", &u->meta.inactive_enter_timestamp}, \
|
||||
{ "org.freedesktop.systemd1.Unit", "CanStart", bus_unit_append_can_start, "b", u }, \
|
||||
{ "org.freedesktop.systemd1.Unit", "CanReload", bus_unit_append_can_reload, "b", u }, \
|
||||
{ "org.freedesktop.systemd1.Unit", "Job", bus_unit_append_job, "(uo)", u }, \
|
||||
|
@ -88,8 +88,10 @@ public interface Unit : DBus.Object {
|
||||
public abstract string active_state { owned get; }
|
||||
public abstract string sub_state { owned get; }
|
||||
public abstract string fragment_path { owned get; }
|
||||
public abstract uint64 inactive_exit_timestamp { owned get; }
|
||||
public abstract uint64 active_enter_timestamp { owned get; }
|
||||
public abstract uint64 active_exit_timestamp { owned get; }
|
||||
public abstract uint64 inactive_enter_timestamp { owned get; }
|
||||
public abstract bool can_start { owned get; }
|
||||
public abstract bool can_reload { owned get; }
|
||||
public abstract JobLink job { owned get; /* FIXME: this setter is a temporary fix to make valac not segfault */ set; }
|
||||
|
26
unit.c
26
unit.c
@ -558,7 +558,11 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
char *p2;
|
||||
const char *prefix2;
|
||||
CGroupBonding *b;
|
||||
char timestamp1[FORMAT_TIMESTAMP_MAX], timestamp2[FORMAT_TIMESTAMP_MAX];
|
||||
char
|
||||
timestamp1[FORMAT_TIMESTAMP_MAX],
|
||||
timestamp2[FORMAT_TIMESTAMP_MAX],
|
||||
timestamp3[FORMAT_TIMESTAMP_MAX],
|
||||
timestamp4[FORMAT_TIMESTAMP_MAX];
|
||||
|
||||
assert(u);
|
||||
assert(u->meta.type >= 0);
|
||||
@ -574,16 +578,20 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
"%s\tInstance: %s\n"
|
||||
"%s\tUnit Load State: %s\n"
|
||||
"%s\tUnit Active State: %s\n"
|
||||
"%s\tInactive Exit Timestamp: %s\n"
|
||||
"%s\tActive Enter Timestamp: %s\n"
|
||||
"%s\tActive Exit Timestamp: %s\n"
|
||||
"%s\tInactive Enter Timestamp: %s\n"
|
||||
"%s\tGC Check Good: %s\n",
|
||||
prefix, u->meta.id,
|
||||
prefix, unit_description(u),
|
||||
prefix, strna(u->meta.instance),
|
||||
prefix, unit_load_state_to_string(u->meta.load_state),
|
||||
prefix, unit_active_state_to_string(unit_active_state(u)),
|
||||
prefix, strna(format_timestamp(timestamp1, sizeof(timestamp1), u->meta.active_enter_timestamp)),
|
||||
prefix, strna(format_timestamp(timestamp2, sizeof(timestamp2), u->meta.active_exit_timestamp)),
|
||||
prefix, strna(format_timestamp(timestamp1, sizeof(timestamp1), u->meta.inactive_exit_timestamp)),
|
||||
prefix, strna(format_timestamp(timestamp2, sizeof(timestamp2), u->meta.active_enter_timestamp)),
|
||||
prefix, strna(format_timestamp(timestamp3, sizeof(timestamp3), u->meta.active_exit_timestamp)),
|
||||
prefix, strna(format_timestamp(timestamp4, sizeof(timestamp4), u->meta.inactive_enter_timestamp)),
|
||||
prefix, yes_no(unit_check_gc(u)));
|
||||
|
||||
SET_FOREACH(t, u->meta.names, i)
|
||||
@ -908,6 +916,7 @@ static void retroactively_stop_dependencies(Unit *u) {
|
||||
|
||||
void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
|
||||
bool unexpected = false;
|
||||
usec_t ts;
|
||||
|
||||
assert(u);
|
||||
assert(os < _UNIT_ACTIVE_STATE_MAX);
|
||||
@ -920,10 +929,17 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
|
||||
* this function will be called too and the utmp code below
|
||||
* relies on that! */
|
||||
|
||||
ts = now(CLOCK_REALTIME);
|
||||
|
||||
if (os == UNIT_INACTIVE && ns != UNIT_INACTIVE)
|
||||
u->meta.inactive_exit_timestamp = ts;
|
||||
else if (os != UNIT_INACTIVE && ns == UNIT_INACTIVE)
|
||||
u->meta.inactive_enter_timestamp = ts;
|
||||
|
||||
if (!UNIT_IS_ACTIVE_OR_RELOADING(os) && UNIT_IS_ACTIVE_OR_RELOADING(ns))
|
||||
u->meta.active_enter_timestamp = now(CLOCK_REALTIME);
|
||||
u->meta.active_enter_timestamp = ts;
|
||||
else if (UNIT_IS_ACTIVE_OR_RELOADING(os) && !UNIT_IS_ACTIVE_OR_RELOADING(ns))
|
||||
u->meta.active_exit_timestamp = now(CLOCK_REALTIME);
|
||||
u->meta.active_exit_timestamp = ts;
|
||||
|
||||
if (u->meta.job) {
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user