update
This commit is contained in:
parent
8ac3ac49a8
commit
d4553107a2
@ -3,10 +3,7 @@ import time
|
|||||||
import requests
|
import requests
|
||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
ups_ip = "10.31.41.46"
|
|
||||||
time_threshold = 4
|
|
||||||
interval = 20
|
|
||||||
|
|
||||||
def parse_time(time_str):
|
def parse_time(time_str):
|
||||||
try:
|
try:
|
||||||
@ -38,26 +35,39 @@ def run_command(command):
|
|||||||
result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||||||
return result.stdout.strip()
|
return result.stdout.strip()
|
||||||
|
|
||||||
while True:
|
def main(ups_ip, time_threshold, interval):
|
||||||
oid_on_battery_time = "1.3.6.1.4.1.318.1.1.1.2.2.3.0"
|
print("Starting UPS monitoring...")
|
||||||
result = run_command(f'/usr/bin/snmpget -v2c -O v -O q -c public {ups_ip} {oid_on_battery_time}')
|
while True:
|
||||||
time_on_battery = parse_time(result)
|
oid_on_battery_time = "1.3.6.1.4.1.318.1.1.1.2.2.3.0"
|
||||||
|
result = run_command(f'/usr/bin/snmpget -v2c -O v -O q -c public {ups_ip} {oid_on_battery_time}')
|
||||||
|
time_on_battery = parse_time(result)
|
||||||
|
|
||||||
oid_states = "1.3.6.1.4.1.318.1.1.1.11.1.1.0"
|
oid_states = "1.3.6.1.4.1.318.1.1.1.11.1.1.0"
|
||||||
result = run_command(f'/usr/bin/snmpget -v2c -O v -O q -c public {ups_ip} {oid_states}')
|
result = run_command(f'/usr/bin/snmpget -v2c -O v -O q -c public {ups_ip} {oid_states}')
|
||||||
state = parse_states(result.strip('"'))
|
state = parse_states(result.strip('"'))
|
||||||
|
|
||||||
print(f"Time on battery: {time_on_battery} minutes, State: {state}")
|
print(f"Time on battery: {time_on_battery} minutes, State: {state}")
|
||||||
|
|
||||||
|
if time_on_battery != False and time_on_battery < time_threshold:
|
||||||
|
if state == "on-battery":
|
||||||
|
shutdown_status = run_command('shutdown --show 2>&1')
|
||||||
|
if "No scheduled shutdown" in shutdown_status:
|
||||||
|
print("UPS is failing, shutting down in 60 seconds...")
|
||||||
|
send_email(f"{socket.gethostname()}@vvzvlad.xyz", "UPS is failing, shutting down in 60 seconds...", f"Proxmox node '{socket.gethostname()}': UPS is failing, shutting down in 60 seconds...", f"{socket.gethostname()}@vvzvlad.xyz")
|
||||||
|
run_command('sudo shutdown -h 1 "Shutting down due to UPS failure"')
|
||||||
|
|
||||||
if time_on_battery != False and time_on_battery < time_threshold:
|
|
||||||
if state == "on-battery":
|
if state == "on-battery":
|
||||||
shutdown_status = run_command('shutdown --show 2>&1')
|
time.sleep(5)
|
||||||
if "No scheduled shutdown" in shutdown_status:
|
else:
|
||||||
print("UPS is failing, shutting down in 60 seconds...")
|
time.sleep(interval)
|
||||||
send_email(f"{socket.gethostname()}@vvzvlad.xyz", "UPS is failing, shutting down in 60 seconds...", f"Proxmox node '{socket.gethostname()}': UPS is failing, shutting down in 60 seconds...", f"{socket.gethostname()}@vvzvlad.xyz")
|
|
||||||
run_command('sudo shutdown -h 1 "Shutting down due to UPS failure"')
|
|
||||||
|
|
||||||
if state == "on-battery":
|
if __name__ == "__main__":
|
||||||
time.sleep(5)
|
if len(sys.argv) != 4:
|
||||||
else:
|
print("Usage: script.py <ups_ip> <time_threshold> <interval>")
|
||||||
time.sleep(interval)
|
sys.exit(1)
|
||||||
|
|
||||||
|
ups_ip = sys.argv[1]
|
||||||
|
time_threshold = int(sys.argv[2])
|
||||||
|
interval = int(sys.argv[3])
|
||||||
|
|
||||||
|
main(ups_ip, time_threshold, interval)
|
||||||
|
@ -3,7 +3,7 @@ Description=Service to manage UPS shutdown script
|
|||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=/usr/bin/python3 /usr/local/bin/shutdown_ups.py
|
ExecStart=/usr/bin/python3 /usr/local/bin/shutdown_ups.py 10.31.41.46 4 20
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=5s
|
RestartSec=5s
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user