From 037cd77d521d36ddcd061d305c05c2538af5716b Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Wed, 26 Dec 2018 10:21:13 +0100 Subject: Refactor systemd service status system --- home/.config/i3/i3blocks.conf | 5 +++- home/.config/i3/status/backup | 4 ++- home/.config/i3/status/services | 34 ++++++++++++++++++++++ home/.config/systemd/user/backup.service | 8 ----- home/.config/systemd/user/backup.timer | 12 -------- home/.config/systemd/user/dbusmonitor.service | 9 ------ .../.config/systemd/user/unmetered-internet.target | 2 -- home/.local/bin/dbusmonitor | 27 ----------------- home/.local/lib/dbusmonitor | 29 ++++++++++++++++++ home/.local/share/systemd/user/backup.service | 8 +++++ home/.local/share/systemd/user/backup.timer | 12 ++++++++ home/.local/share/systemd/user/dbusmonitor.service | 9 ++++++ .../share/systemd/user/internet-metered.target | 3 ++ .../share/systemd/user/internet-unmetered.target | 3 ++ 14 files changed, 105 insertions(+), 60 deletions(-) create mode 100755 home/.config/i3/status/services delete mode 100644 home/.config/systemd/user/backup.service delete mode 100644 home/.config/systemd/user/backup.timer delete mode 100644 home/.config/systemd/user/dbusmonitor.service delete mode 100644 home/.config/systemd/user/unmetered-internet.target delete mode 100755 home/.local/bin/dbusmonitor create mode 100755 home/.local/lib/dbusmonitor create mode 100644 home/.local/share/systemd/user/backup.service create mode 100644 home/.local/share/systemd/user/backup.timer create mode 100644 home/.local/share/systemd/user/dbusmonitor.service create mode 100644 home/.local/share/systemd/user/internet-metered.target create mode 100644 home/.local/share/systemd/user/internet-unmetered.target diff --git a/home/.config/i3/i3blocks.conf b/home/.config/i3/i3blocks.conf index 7a14ac7..ee0b4b7 100644 --- a/home/.config/i3/i3blocks.conf +++ b/home/.config/i3/i3blocks.conf @@ -28,7 +28,6 @@ command=/usr/share/i3blocks/$BLOCK_NAME separator_block_width=20 markup=pango - # Volume indicator # # The first parameter sets the step (and units to display) @@ -64,6 +63,10 @@ label= command=~/.config/i3/status/backup interval=30 +[services] +command=~/.config/i3/status/services +interval=30 + [disk] label= interval=30 diff --git a/home/.config/i3/status/backup b/home/.config/i3/status/backup index dd27225..c7297f3 100755 --- a/home/.config/i3/status/backup +++ b/home/.config/i3/status/backup @@ -16,10 +16,12 @@ function systemd_status() { fi } + status="" -status+="$(systemd_status unmetered-internet.target)" +status+="$(systemd_status internet-unmetered.target)" status+="$(systemd_status backup.timer)" status+="$(systemd_status backup.service)" echo "$status" echo "$status" + diff --git a/home/.config/i3/status/services b/home/.config/i3/status/services new file mode 100755 index 0000000..88502eb --- /dev/null +++ b/home/.config/i3/status/services @@ -0,0 +1,34 @@ +#!/bin/bash + +systemctl="systemctl --user" + +function systemd_status() { + unit="$1" + icon="$2" + if $systemctl --quiet is-active "$unit"; then + echo "$icon" + elif $systemctl --quiet is-failed "$unit"; then + echo "$icon" + elif ! $systemctl --quiet is-enabled "$unit"; then + # note that !enabled includes units that have not been found + true + else + # inactive units: found, not failed and not disabled + echo "$icon" + true + fi +} + + +status="" +#status='Blue text is cool!' +#status="      |" + +#status="" +status+="$(systemd_status internet-metered.target ) " +status+="$(systemd_status backup.timer ) " +status+="$(systemd_status backup.service ) " +status+="$(systemd_status backupz.service )" + +echo "$status" +echo "$status" diff --git a/home/.config/systemd/user/backup.service b/home/.config/systemd/user/backup.service deleted file mode 100644 index 3901d64..0000000 --- a/home/.config/systemd/user/backup.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=copy home data to remote storage -Requisite=unmetered-internet.target -After=unmetered-internet.target - -[Service] -Type=simple -ExecStart=%h/bin/backup diff --git a/home/.config/systemd/user/backup.timer b/home/.config/systemd/user/backup.timer deleted file mode 100644 index cd8c3c3..0000000 --- a/home/.config/systemd/user/backup.timer +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=run backup script periodically -Requisite=unmetered-internet.target -After=unmetered-internet.target - -[Timer] -OnCalendar=0/2:00:00 -RandomizedDelaySec=10min -Persistent=true - -[Install] -WantedBy=unmetered-internet.target diff --git a/home/.config/systemd/user/dbusmonitor.service b/home/.config/systemd/user/dbusmonitor.service deleted file mode 100644 index 0fdd942..0000000 --- a/home/.config/systemd/user/dbusmonitor.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=user service to listen to system dbus sevents - -[Service] -Type=simple -ExecStart=%h/.local/bin/dbusmonitor - -[Install] -WantedBy=default.target \ No newline at end of file diff --git a/home/.config/systemd/user/unmetered-internet.target b/home/.config/systemd/user/unmetered-internet.target deleted file mode 100644 index 4e7907c..0000000 --- a/home/.config/systemd/user/unmetered-internet.target +++ /dev/null @@ -1,2 +0,0 @@ -[Unit] -Description=current connection to the internet is not metered \ No newline at end of file diff --git a/home/.local/bin/dbusmonitor b/home/.local/bin/dbusmonitor deleted file mode 100755 index f3b3d4a..0000000 --- a/home/.local/bin/dbusmonitor +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/python3 -# dbus-monitor --system "path=/org/freedesktop/NetworkManager,interface=org.freedesktop.DBus.Properties,type=signal,member=PropertiesChanged" - -from gi.repository import GLib -import pydbus -loop = GLib.MainLoop() -systemd = pydbus.SessionBus().get(".systemd1") -nm = pydbus.SystemBus().get("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") - -# https://developer.gnome.org/NetworkManager/stable/nm-dbus-types.html#NMMetered -# 0 = The metered status is unknown -# 1 = Metered, the value was statically set -# 2 = Not metered, the value was statically set -# 3 = Metered, the value was guessed -# 4 = Not metered, the value was guessed -def check_metered(changed): - value=nm.Metered - if (value == 2 or value == 4): - # start unit (replace any conflicting requests that might have been - # enqueued to systemctl but not yet run) - systemd.StartUnit("unmetered-internet.target", "replace") - else: - systemd.StopUnit("unmetered-internet.target", "replace") - -nm.PropertiesChanged.connect(check_metered) -loop.run() - diff --git a/home/.local/lib/dbusmonitor b/home/.local/lib/dbusmonitor new file mode 100755 index 0000000..4e5713d --- /dev/null +++ b/home/.local/lib/dbusmonitor @@ -0,0 +1,29 @@ +#!/usr/bin/python3 +# dbus-monitor --system "path=/org/freedesktop/NetworkManager,interface=org.freedesktop.DBus.Properties,type=signal,member=PropertiesChanged" + +from gi.repository import GLib +import pydbus +loop = GLib.MainLoop() +systemd = pydbus.SessionBus().get(".systemd1") +nm = pydbus.SystemBus().get("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") + +# https://developer.gnome.org/NetworkManager/stable/nm-dbus-types.html#NMMetered +# 0 = The metered status is unknown +# 1 = Metered, the value was statically set +# 2 = Not metered, the value was statically set +# 3 = Metered, the value was guessed +# 4 = Not metered, the value was guessed +def check_metered(changed): + value=nm.Metered + if (value == 2 or value == 4): + # start unit (replace any conflicting requests that might have been + # enqueued to systemctl but not yet run) + systemd.StopUnit("internet-metered.target", "replace") + systemd.StartUnit("internet-unmetered.target", "replace") + else: + systemd.StopUnit("internet-unmetered.target", "replace") + systemd.StartUnit("internet-metered.target", "replace") + +nm.PropertiesChanged.connect(check_metered) +loop.run() + diff --git a/home/.local/share/systemd/user/backup.service b/home/.local/share/systemd/user/backup.service new file mode 100644 index 0000000..74e216e --- /dev/null +++ b/home/.local/share/systemd/user/backup.service @@ -0,0 +1,8 @@ +[Unit] +Description=copy home data to remote storage +Requisite=internet-unmetered.target +After=internet-unmetered.target + +[Service] +Type=simple +ExecStart=%h/bin/backup diff --git a/home/.local/share/systemd/user/backup.timer b/home/.local/share/systemd/user/backup.timer new file mode 100644 index 0000000..0843bd7 --- /dev/null +++ b/home/.local/share/systemd/user/backup.timer @@ -0,0 +1,12 @@ +[Unit] +Description=run backup script periodically +Requisite=internet-unmetered.target +After=internet-unmetered.target + +[Timer] +OnCalendar=0/2:00:00 +RandomizedDelaySec=10min +Persistent=true + +[Install] +WantedBy=internet-unmetered.target diff --git a/home/.local/share/systemd/user/dbusmonitor.service b/home/.local/share/systemd/user/dbusmonitor.service new file mode 100644 index 0000000..ff60d31 --- /dev/null +++ b/home/.local/share/systemd/user/dbusmonitor.service @@ -0,0 +1,9 @@ +[Unit] +Description=user service to listen to system dbus events + +[Service] +Type=simple +ExecStart=%h/.local/lib/dbusmonitor + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/home/.local/share/systemd/user/internet-metered.target b/home/.local/share/systemd/user/internet-metered.target new file mode 100644 index 0000000..8d840a5 --- /dev/null +++ b/home/.local/share/systemd/user/internet-metered.target @@ -0,0 +1,3 @@ +[Unit] +Description=current connection to the internet is metered +Conflicts=internet-unmetered.target \ No newline at end of file diff --git a/home/.local/share/systemd/user/internet-unmetered.target b/home/.local/share/systemd/user/internet-unmetered.target new file mode 100644 index 0000000..db8393f --- /dev/null +++ b/home/.local/share/systemd/user/internet-unmetered.target @@ -0,0 +1,3 @@ +[Unit] +Description=current connection to the internet is not metered +Conflicts=internet-metered.target \ No newline at end of file -- cgit v1.2.3