void Initialize() { try { if (upower == null && Bus.System.NameHasOwner(UPowerName)) { upower = Bus.System.GetObject <IUPower> (UPowerName, new ObjectPath(UPowerPath)); upower.Changed += HandleCapabilitiesChanged; Log <SystemManager> .Debug("Using UPower dbus service"); } else if (devicekit == null && Bus.System.NameHasOwner(DeviceKitPowerName)) { devicekit = Bus.System.GetObject <IDeviceKitPower> (DeviceKitPowerName, new ObjectPath(DeviceKitPowerPath)); devicekit.Changed += HandleCapabilitiesChanged; Log <SystemManager> .Debug("Using DeviceKit.Power dbus service"); } if (systemd == null && Bus.System.NameHasOwner(SystemdName)) { systemd = Bus.System.GetObject <ISystemd> (SystemdName, new ObjectPath(SystemdPath)); Log <SystemManager> .Debug("Using login1.Manager dbus service"); } else if (consolekit == null && Bus.System.NameHasOwner(ConsoleKitName)) { consolekit = Bus.System.GetObject <IConsoleKit> (ConsoleKitName, new ObjectPath(ConsoleKitPath)); Log <SystemManager> .Debug("Using ConsoleKit.Manager dbus service"); } } catch (Exception e) { Log <SystemService> .Error("Could not initialize needed dbus service: '{0}'", e.Message); Log <SystemService> .Info(e.StackTrace); } }
public ServiceController(ILoggerFactory loggerFactory, ISystemd systemd, IOptions <ServiceControllerOptions> options) { logger = loggerFactory.CreateLogger(GetType()); var serviceOptions = options?.Value ?? throw new ArgumentNullException(nameof(options)); logger.LogDebug("Initialise ServiceController"); componentLastContact = new Dictionary <Guid, DateTimeOffset>(); try { systemd.NotifyReady(); var(watchdogEnabled, watchdogTimeout) = systemd.IsWatchdogEnabled(); logger.LogDebug($"watchdog enabled {watchdogEnabled} timeout :{watchdogTimeout}"); if (watchdogEnabled) { // Recommended behaviour is to use half the interval returned by sd_watchdog_enabled var resetInterval = TimeSpan.FromMilliseconds(watchdogTimeout.TotalMilliseconds / 2); Observable.Interval(resetInterval).Subscribe(x => { // Have all registered components made contact within the if (componentLastContact.Values.All(lastContact => DateTimeOffset.Now.Subtract(lastContact) < serviceOptions.StaleDuration)) { try { logger.LogDebug($"Reset Watchdog every {resetInterval}"); systemd.ResetWatchdog(); } catch (Exception e) { logger.LogError(e, "Failed to reset watchdog"); } } else { logger.LogWarning($"Watchdog not Reset as last contact > {serviceOptions.StaleDuration}"); } }); } } catch (Exception e) { logger.LogError(e, "Failed to get watchdog status"); } }
private SystemManager() { try { SystemBus = Bus.System.GetObject <IBus> ("org.freedesktop.DBus", new ObjectPath("/org/freedesktop/DBus")); SystemBus.NameOwnerChanged += delegate(string name, string old_owner, string new_owner) { if (name != UPowerName && name != DeviceKitPowerName && name != SystemdName && name != ConsoleKitName) { return; } Log <SystemManager> .Debug("DBus services changed, reconnecting now"); if (upower != null) { upower = null; } if (devicekit != null) { devicekit = null; } if (systemd != null) { systemd = null; } if (consolekit != null) { consolekit = null; } Initialize(); HandlePowerBusChanged(); HandleCapabilitiesChanged(); }; Initialize(); // Set up file monitor to watch for reboot_required file GLib.File reboot_required_file = FileFactory.NewForPath("/var/run/reboot-required"); reboot_required_monitor = reboot_required_file.Monitor(FileMonitorFlags.None, null); reboot_required_monitor.RateLimit = 10000; reboot_required_monitor.Changed += HandleRebootRequired; } catch (Exception e) { Log <SessionManagerItem> .Error(e.Message); } }
void Initialize () { try { if (upower == null && Bus.System.NameHasOwner (UPowerName)) { upower = Bus.System.GetObject<IUPower> (UPowerName, new ObjectPath (UPowerPath)); upower.Changed += HandleCapabilitiesChanged; Log<SystemManager>.Debug ("Using UPower dbus service"); } if (systemd == null && Bus.System.NameHasOwner (SystemdName)) { systemd = Bus.System.GetObject<ISystemd> (SystemdName, new ObjectPath (SystemdPath)); Log<SystemManager>.Debug ("Using login1.Manager dbus service"); } else if (consolekit == null && Bus.System.NameHasOwner (ConsoleKitName)) { consolekit = Bus.System.GetObject<IConsoleKit> (ConsoleKitName, new ObjectPath (ConsoleKitPath)); Log<SystemManager>.Debug ("Using ConsoleKit.Manager dbus service"); } } catch (Exception e) { Log<SystemService>.Error ("Could not initialize needed dbus service: '{0}'", e.Message); Log<SystemService>.Info (e.StackTrace); } }
private SystemManager () { try { SystemBus = Bus.System.GetObject<IBus> ("org.freedesktop.DBus", new ObjectPath ("/org/freedesktop/DBus")); SystemBus.NameOwnerChanged += delegate(string name, string old_owner, string new_owner) { if (name != UPowerName && name != SystemdName && name != ConsoleKitName) return; Log<SystemManager>.Debug ("DBus services changed, reconnecting now"); if (upower != null) upower = null; if (systemd != null) systemd = null; if (consolekit != null) consolekit = null; Initialize (); HandlePowerBusChanged (); HandleCapabilitiesChanged (); }; Initialize (); // Set up file monitor to watch for reboot_required file GLib.File reboot_required_file = FileFactory.NewForPath ("/var/run/reboot-required"); reboot_required_monitor = reboot_required_file.Monitor (FileMonitorFlags.None, null); reboot_required_monitor.RateLimit = 10000; reboot_required_monitor.Changed += HandleRebootRequired; } catch (Exception e) { Log<SessionManagerItem>.Error (e.Message); } }