You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.9 KiB

import requests
import arkevars
import json
import logging
import os
import time
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%Y/%m/%d %I:%M:%S %p',level=logging.INFO,filename='arke.log')
logger = logging.getLogger("arke")
def monitor_AllTargets(monitoringtargets):
responseTable = {}
for target in monitoringtargets:
try:
statuscode = requests.get(target).status_code
logger.info(f"target: {target} statuscode: {statuscode}")
responseTable[target] = statuscode
except requests.ConnectionError:
logger.warn(f"target: {target} ERROR: Failure to connect.")
responseTable[target] = "Failed to connect."
return responseTable
is_on = True
while is_on:
datastore = monitor_AllTargets(arkevars.httpTargets)
json_string = json.dumps(datastore)
# write new results to file
file = open("/shared/results.json", "a+")
file.write(json_string)
file.write("\n")
file.close()
# track state
file = open("/shared/results.json", "r")
stateFile = open("/shared/state.log", "r")
oldData = stateFile.read()
if oldData != json_string:
stateChanged = True
else:
stateChanged = False
# old file removal must happen after state tracking:
os.remove("/shared/state.log")
results = []
with open("/shared/results.json", "r") as json_File:
for line in json_File:
results.append(json.loads(line))
for item in results:
for key, value in item.items():
if stateChanged is True:
errorFile = open("/shared/alerts.log", "a+")
errorText = key + " returned with status " + str(value) + "\n"
errorFile.write(errorText)
# track state
errorFile = open("/shared/state.log", "a+")
errorText = json_string
errorFile.write(errorText)
errorFile.close()
os.remove("/shared/results.json")
time.sleep(60)