refactoting services and remove upload by timer

This commit is contained in:
vvzvlad 2023-04-21 22:05:54 +07:00
parent fe07f2d180
commit db872ae533
14 changed files with 68 additions and 112 deletions

View File

@ -1,9 +0,0 @@
[Unit]
Description=Pull git changes
[Service]
Type=oneshot
ExecStart=/usr/local/bin/pullgit.sh
[Install]
WantedBy=multi-user.target

View File

@ -1,6 +0,0 @@
#!/usr/bin/env sh
git config --global user.name vestasync_wb_$(hostname)
git config --global user.email "vestasync@fake.mail"
cd /mnt/data/etc/
git fetch > /dev/null 2>&1 || true
git pull > /dev/null 2>&1 || true

View File

@ -1,10 +0,0 @@
[Unit]
Description=Run pullgit.service every 10 min
[Timer]
OnCalendar=*:0/10
Persistent=true
Unit=pullgit.service
[Install]
WantedBy=timers.target

View File

@ -1,9 +0,0 @@
[Unit]
Description=Push git changes
[Service]
Type=oneshot
ExecStart=/usr/local/bin/pushgit.sh
[Install]
WantedBy=multi-user.target

View File

@ -1,11 +0,0 @@
#!/usr/bin/env sh
apt-mark showmanual > /mnt/data/etc/vestasync/packages
echo $(hostname) > /mnt/data/etc/vestasync/hostname
export GIT_AUTHOR_NAME="vestasync_wb_$(hostname)"
export GIT_COMMITTER_NAME="vestasync_wb_$(hostname)"
export LC_TIME=en_GB.UTF-8
cd /mnt/data/etc/ > /dev/null 2>&1 || true
git add . > /dev/null 2>&1 || true
git commit -m "$(date +"%Y-%m-%d %H:%M:%S %z %Z")" > /dev/null 2>&1 || true
git push -u origin master > /dev/null 2>&1 || true

View File

@ -1,10 +0,0 @@
[Unit]
Description=Run pushgit.service daily
[Timer]
OnCalendar=daily
Persistent=true
Unit=pushgit.service
[Install]
WantedBy=timers.target

7
files/pushgit/pushgit.sh Normal file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
apt-mark showmanual > /mnt/data/etc/vestasync/packages
echo $(hostname) > /mnt/data/etc/vestasync/hostname
cd /mnt/data/etc/
git add .
git commit -m "$(date +"%Y-%m-%d %H:%M:%S %z %Z")"
git push -u origin master

View File

@ -1,9 +1,9 @@
[Unit] [Unit]
Description=Script triggered by file changes in a folder (including subfolders) Description=Main pushgit
[Service] [Service]
Type=simple
ExecStart=/usr/local/bin/pushgit_inotify.sh ExecStart=/usr/local/bin/pushgit_inotify.sh
Restart=always
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
export GIT_AUTHOR_NAME="vestasync_wb_$(hostname)"
export GIT_COMMITTER_NAME="vestasync_wb_$(hostname)"
export LC_TIME=en_GB.UTF-8
EXCLUDE_PATTERN='(^|\/)(\.git|packages|hostname|wb-mqtt-mbgate\.conf|resolv\.conf)($|\/)'
inotifywait -m -r -e close_write,move,create,delete --exclude "$EXCLUDE_PATTERN" --format '%w%f' /mnt/data/etc | while read FILE
do
/usr/local/bin/pushgit.sh
done

View File

@ -0,0 +1,12 @@
[Unit]
Description=Script triggered by file changes in a folder (including subfolders)
[Service]
ExecStartPre=systemctl stop pushgit_inotify.service
ExecStart=systemctl start pushgit_inotify.service
ExecStop=systemctl stop pushgit_inotify.service
Type=oneshot
RemainAfterExit=true
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,9 @@
[Unit]
Description=Run pushgit.service on start
[Timer]
OnBootSec=180
Unit=pushgit_inotify_special.service
[Install]
WantedBy=timers.target

View File

@ -1,14 +0,0 @@
#!/usr/bin/env bash
EXCLUDE_PATTERN='(^|/)(\.git($|/)|wb-mqtt-mbgate\.conf$|resolv\.conf$)'
inotifywait -m -r -e close_write,move,create,delete --exclude "$EXCLUDE_PATTERN" --format '%w%f' /mnt/data/etc | while read FILE
do
echo $(hostname) > /mnt/data/etc/vestasync/hostname
export GIT_AUTHOR_NAME="vestasync_wb_$(hostname)_inotify"
export GIT_COMMITTER_NAME="vestasync_wb_$(hostname)_inotify"
export LC_TIME=en_GB.UTF-8
cd /mnt/data/etc/
git add .
git commit -m "$(date +"%Y-%m-%d %H:%M:%S %z %Z")" # > /dev/null 2>&1 || true
git push -u origin master
done

View File

@ -16,11 +16,6 @@ defineVirtualDevice("vestasync", {
value: false, value: false,
title: "Auto push on files changed" title: "Auto push on files changed"
}, },
autopush_timer: {
type: "switch",
value: false,
title: "Auto push every day"
},
push_now: { push_now: {
type: "pushbutton", type: "pushbutton",
value: false, value: false,
@ -70,15 +65,7 @@ function _update_vestasync() {
} }
}); });
runShellCommand("systemctl is-active pushgit_inotify.service", { runShellCommand("systemctl is-active pushgit_inotify_special.service", {
captureOutput: true,
exitCallback: function (exitCode, capturedOutput) {
var isEnabled = capturedOutput.trim() === "active";
getControl("vestasync/autopush_inotify").setValue({ value: isEnabled, notify: false })
}
});
runShellCommand("systemctl is-active pushgit.timer", {
captureOutput: true, captureOutput: true,
exitCallback: function (exitCode, capturedOutput) { exitCallback: function (exitCode, capturedOutput) {
var isEnabled = capturedOutput.trim() === "active"; var isEnabled = capturedOutput.trim() === "active";
@ -100,28 +87,16 @@ function _update_vestasync() {
}; };
defineRule("_vestasync_autopush_timer", {
whenChanged: "vestasync/autopush_timer",
then: function (newValue, devName, cellName) {
if (dev.vestasync.autopush_timer) {
runShellCommand("systemctl stop pushgit.timer ; systemctl disable pushgit.timer ; systemctl daemon-reload ; systemctl enable pushgit.timer ; systemctl start pushgit.timer");
_update_vestasync();
} else {
runShellCommand("systemctl stop pushgit.timer ; systemctl disable pushgit.timer");
_update_vestasync();
}
}
});
defineRule("_vestasync_autopush_inotify", { defineRule("_vestasync_autopush_inotify", {
whenChanged: "vestasync/autopush_inotify", whenChanged: "vestasync/autopush_inotify",
then: function (newValue, devName, cellName) { then: function (newValue, devName, cellName) {
if (dev.vestasync.autopush_inotify) { if (dev.vestasync.autopush_inotify) {
runShellCommand("systemctl stop pushgit_inotify.service ; systemctl disable pushgit_inotify.service ; systemctl daemon-reload ; systemctl enable pushgit_inotify.service ; systemctl start pushgit_inotify.service"); runShellCommand("systemctl start pushgit_inotify_special.service");
_update_vestasync(); _update_vestasync();
} else { } else {
runShellCommand("systemctl stop pushgit_inotify.service ; systemctl disable pushgit_inotify.service"); runShellCommand("systemctl stop pushgit_inotify_special.service");
_update_vestasync(); _update_vestasync();
} }
} }
@ -133,9 +108,7 @@ defineRule("_vestasync_push", {
whenChanged: "vestasync/push_now", whenChanged: "vestasync/push_now",
then: function (newValue, devName, cellName) { then: function (newValue, devName, cellName) {
if (dev.vestasync.push_now) { if (dev.vestasync.push_now) {
runShellCommand("systemctl start pushgit.service"); runShellCommand("/usr/local/bin/pushgit.sh");
dev.vestasync.push_now = false;
_update_vestasync();
} }
} }
}); });

View File

@ -141,35 +141,47 @@ def create_automac_systemd(c):
def create_autogit_systemd(c): def create_autogit_systemd(c):
#disable #disable
for service in ['pushgit.timer', 'pushgit_inotify.service']: print("Autogit: stop and disable services")
for service in ['pushgit.timer',
'pushgit_inotify_special.service',
'pushgit_inotify.service',
'pushgit_run_on_start.timer' ]:
c.run(f'systemctl stop {service}', warn=True) c.run(f'systemctl stop {service}', warn=True)
c.run(f'systemctl disable {service}', warn=True) c.run(f'systemctl disable {service}', warn=True)
print("Autogit: Remove old files")
c.run(f'rm /etc/systemd/system/pushgit*', warn=True)
c.run(f'rm /usr/local/bin/pushgit*', warn=True)
#delete old files, copy new files, chmod +x
print("Autogit: copy new files, chmod +x")
file_paths = { #local path: remote path file_paths = { #local path: remote path
'./files/pushgit.sh': '/usr/local/bin/pushgit.sh', './files/pushgit/pushgit.sh': '/usr/local/bin/pushgit.sh',
'./files/pushgit_inotify.sh': '/usr/local/bin/pushgit_inotify.sh', './files/pushgit/pushgit_inotify.sh': '/usr/local/bin/pushgit_inotify.sh',
'./files/pushgit_inotify.service': '/etc/systemd/system/pushgit_inotify.service', './files/pushgit/pushgit_inotify.service': '/etc/systemd/system/pushgit_inotify.service',
'./files/pushgit.service': '/etc/systemd/system/pushgit.service', './files/pushgit/pushgit_run_on_start.timer': '/etc/systemd/system/pushgit_run_on_start.timer',
'./files/pushgit.timer': '/etc/systemd/system/pushgit.timer' './files/pushgit/pushgit_inotify_special.service': '/etc/systemd/system/pushgit_inotify_special.service',
} }
for local_path, remote_path in file_paths.items(): for local_path, remote_path in file_paths.items():
c.put(local_path, remote_path) c.put(local_path, remote_path)
c.run(f"chmod +x {remote_path}") c.run(f"chmod +x {remote_path}")
#reload print("Autogit: reload configs")
c.run("systemctl daemon-reload") c.run("systemctl daemon-reload")
#enable and start #enable and start
for service in ['pushgit.timer', 'pushgit_inotify.service']: print("Autogit: enable run on start")
for service in ['pushgit_run_on_start.timer']:
c.run(f'systemctl enable {service}') c.run(f'systemctl enable {service}')
print("Autogit: start inotify")
for service in ['pushgit_inotify_special.service']:
c.run(f'systemctl start {service}') c.run(f'systemctl start {service}')
#check statuses #check statuses
for service in ['pushgit.timer', 'pushgit_inotify.service']: for service in ['pushgit_run_on_start.timer', 'pushgit_inotify.service', 'pushgit_inotify_special.service']:
active = c.run(f'systemctl is-active {service} || true', hide=True).stdout.strip() active = c.run(f'systemctl is-active {service} || true', hide=True).stdout.strip()
enabled = c.run(f'systemctl is-enabled {service} || true', hide=True).stdout.strip() enabled = c.run(f'systemctl is-enabled {service} || true', hide=True).stdout.strip()
print(f"{service}: {active}, {enabled}") print(f"{service}: {active}, {enabled}")