finish up and chain it all together - v0.0.1 🎉
This commit is contained in:
parent
53eaee5971
commit
9972957176
5 changed files with 42 additions and 7 deletions
16
.vscode/launch.json
vendored
Normal file
16
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Python: Current File",
|
||||||
|
"type": "python",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "updog.py",
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"justMyCode": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -32,4 +32,4 @@ There are none yet, so consider this secret a placeholder
|
||||||
|
|
||||||
### Alerts
|
### Alerts
|
||||||
|
|
||||||
## Logging
|
### Logging
|
16
helpers.py
16
helpers.py
|
@ -6,6 +6,8 @@ import time
|
||||||
# It shouldn't drift, but that's untested
|
# It shouldn't drift, but that's untested
|
||||||
# Keep in mind you can't catch Exceptions for this, it just crashes the thread.
|
# Keep in mind you can't catch Exceptions for this, it just crashes the thread.
|
||||||
# Some more scheduling stuff: https://www.redwood.com/article/python-job-scheduling/
|
# Some more scheduling stuff: https://www.redwood.com/article/python-job-scheduling/
|
||||||
|
|
||||||
|
|
||||||
class RepeatedTimer(object):
|
class RepeatedTimer(object):
|
||||||
'''
|
'''
|
||||||
Run stuff repeatedly every x seconds
|
Run stuff repeatedly every x seconds
|
||||||
|
@ -13,13 +15,13 @@ class RepeatedTimer(object):
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
def hello(name):
|
def hello(name):
|
||||||
print "Hello %s!" % name
|
print(f'Hello {name}!')
|
||||||
|
|
||||||
print()"starting...")
|
print()"starting...")
|
||||||
rt = RepeatedTimer(1, hello, "World") # it auto-starts, no need of rt.start()
|
rt = RepeatedTimer(1, hello, "World") # it auto-starts, no need of rt.start()
|
||||||
try:
|
try:
|
||||||
sleep(5) # your long-running job goes here...
|
sleep(5) # your long-running job goes here...
|
||||||
catch:
|
except:
|
||||||
rt.stop() # better in a try/catch block to make sure the program ends!
|
rt.stop() # better in a try/catch block to make sure the program ends!
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
@ -53,6 +55,7 @@ class RepeatedTimer(object):
|
||||||
self._timer.cancel()
|
self._timer.cancel()
|
||||||
self.is_running = False
|
self.is_running = False
|
||||||
|
|
||||||
|
|
||||||
def create_instances(config, checkers, alerts, logging):
|
def create_instances(config, checkers, alerts, logging):
|
||||||
'''
|
'''
|
||||||
Creates instances of all the extensions according to config
|
Creates instances of all the extensions according to config
|
||||||
|
@ -75,8 +78,13 @@ def create_instances(config, checkers, alerts, logging):
|
||||||
|
|
||||||
return instances
|
return instances
|
||||||
|
|
||||||
def run_check(checker, alerts, logging):
|
|
||||||
|
def run_check(service_name, checker, alerts, logging):
|
||||||
'''
|
'''
|
||||||
Does the logic and stuff for running the checker, calling alerts/logging, and so on
|
Does the logic and stuff for running the checker, calling alerts/logging, and so on
|
||||||
'''
|
'''
|
||||||
pass
|
status = checker.get_status()
|
||||||
|
return_codes = checker.get_return_codes()
|
||||||
|
status_message = return_codes[status]
|
||||||
|
logging.log(service_name, status, status_message)
|
||||||
|
alerts.alert(service_name, status, status_message)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"port": 443,
|
"port": 443,
|
||||||
"lol": "CheckerTemplate ignores these options lol"
|
"lol": "CheckerTemplate ignores these options lol"
|
||||||
},
|
},
|
||||||
"rate": 60,
|
"rate": 1,
|
||||||
"alerts": "AlertsTemplate",
|
"alerts": "AlertsTemplate",
|
||||||
"alerts-args": {
|
"alerts-args": {
|
||||||
"url": "https://example.com/webhook-url-or-whatever-goes-here",
|
"url": "https://example.com/webhook-url-or-whatever-goes-here",
|
||||||
|
|
13
updog.py
13
updog.py
|
@ -73,4 +73,15 @@ elif 'services-example.json' in os.listdir():
|
||||||
with open(config_filename, 'rt') as config_file:
|
with open(config_filename, 'rt') as config_file:
|
||||||
config = json.loads(''.join(config_file.readlines()))
|
config = json.loads(''.join(config_file.readlines()))
|
||||||
|
|
||||||
print(create_instances(config, checkers, alerts, logging))
|
instances = create_instances(config, checkers, alerts, logging)
|
||||||
|
timers = {}
|
||||||
|
|
||||||
|
try:
|
||||||
|
for service in config.keys():
|
||||||
|
timers[service] = RepeatedTimer(config[service]['rate'], run_check,
|
||||||
|
service, instances[service]['checker'], instances[service]['alerts'], instances[service]['logging'])
|
||||||
|
except:
|
||||||
|
# Stops all RepeatedTimers since they're threaded
|
||||||
|
# Doesn't actually stop the threads, just stops repeating it
|
||||||
|
for service in timers.keys():
|
||||||
|
timers[service].stop()
|
||||||
|
|
Loading…
Reference in a new issue