46 lines
1.2 KiB
Text
46 lines
1.2 KiB
Text
|
#!/usr/bin/env python
|
||
|
|
||
|
from pathlib import Path
|
||
|
import subprocess
|
||
|
import sys
|
||
|
import yaml
|
||
|
|
||
|
|
||
|
def check_ping_reachable(ip):
|
||
|
try:
|
||
|
subprocess.check_call(['ping', '-c2', ip],
|
||
|
stdout=subprocess.DEVNULL,
|
||
|
stderr=subprocess.DEVNULL)
|
||
|
return True
|
||
|
except subprocess.CalledProcessError:
|
||
|
return False
|
||
|
|
||
|
|
||
|
def check_service_active(service):
|
||
|
try:
|
||
|
subprocess.check_call(['systemctl', 'status', service],
|
||
|
stdout=subprocess.DEVNULL,
|
||
|
stderr=subprocess.DEVNULL)
|
||
|
return True
|
||
|
except subprocess.CalledProcessError:
|
||
|
return False
|
||
|
|
||
|
|
||
|
def main():
|
||
|
config = yaml.load(open(Path('~/.config/i3-vpn.json').expanduser()))
|
||
|
results = [config['prefix']]
|
||
|
|
||
|
for check in config['checks']:
|
||
|
if check_service_active(check['service']) and check_ping_reachable(check['ip']):
|
||
|
check['color'] = config['colors']['success']
|
||
|
else:
|
||
|
check['color'] = config['colors']['failure']
|
||
|
|
||
|
results.append(config['template'].format(**check))
|
||
|
|
||
|
print(' '.join(results))
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sys.exit(main())
|