incorporated some of the findings of pylint
This commit is contained in:
parent
cd2bd27711
commit
17ecea90fa
1 changed files with 41 additions and 23 deletions
64
httping.py
64
httping.py
|
@ -22,35 +22,52 @@ __license__ = "MIT"
|
|||
__version__ = "0.0.1"
|
||||
__maintainer__ = "Tobias Schmidl"
|
||||
|
||||
max_ping = datetime.timedelta(milliseconds=1000) # in seconds
|
||||
targets = ["https://www.google.de", "https://www.bing.com", "https://www.wikipedia.org"]
|
||||
MAX_PING = datetime.timedelta(milliseconds=1000) # in seconds
|
||||
TARGETS = ["https://www.google.de", "https://www.bing.com", "https://www.wikipedia.org"]
|
||||
|
||||
max_ping_in_ms = max_ping.total_seconds() * 1000
|
||||
in_bin = lambda x, bin: x >= bin[0] and x <= bin[1]
|
||||
MAX_PING_IN_MS = MAX_PING.total_seconds() * 1000
|
||||
|
||||
|
||||
def in_bucket(element, bucket):
|
||||
""" Returns True if element is in bucket """
|
||||
return bucket[0] <= element <= bucket[1]
|
||||
|
||||
|
||||
def generate_buckets(min_val, max_val, step_width=2):
|
||||
""" Generates a list of partitioned lists between min_val and max_val."""
|
||||
return [[x, x + step_width - 1] for x in range(min_val, max_val, step_width)]
|
||||
|
||||
|
||||
class Themes:
|
||||
"""Maintains a list of themes and generates buckets between 0 and MAX_PING_IN_MS based on the selected theme."""
|
||||
# Themes are from http://colorbrewer2.org/
|
||||
purple_green = ["#762a83", "#9970ab", "#c2a5cf", "#a6dba0", "#5aae61", "#1b7837"]
|
||||
red_green = ["#d73027", "#fc8d59", "#fee08b", "#d9ef8b", "#91cf60", "#1a9850"]
|
||||
original = ["#acacac", "#ff0101", "#cc673b", "#ce8458", "#6bbb15", "#0ed812"]
|
||||
selected_colors = red_green
|
||||
generate_bins = lambda min_val, max_val, step_width=2: [[x, x + step_width - 1] for x in range(
|
||||
min_val, max_val, step_width)]
|
||||
bins = generate_bins(0, int(max_ping_in_ms), int(max_ping_in_ms / (len(selected_colors) - 1)))
|
||||
selected_colors = None
|
||||
buckets = None
|
||||
|
||||
def colorize(response_time):
|
||||
for index, bin in enumerate(Themes.bins):
|
||||
if in_bin(response_time, bin):
|
||||
return Themes.selected_colors[len(Themes.selected_colors) - 1 - index]
|
||||
return Themes.selected_colors[0]
|
||||
def __init__(self, selected_colors):
|
||||
self.selected_colors = selected_colors
|
||||
self.buckets = generate_buckets(0, int(MAX_PING_IN_MS), int(MAX_PING_IN_MS / (len(selected_colors) - 1)))
|
||||
|
||||
def colorize(self, input_text):
|
||||
"""Colorized the current input according to the selected theme."""
|
||||
for index, current_bucket in enumerate(self.buckets):
|
||||
if in_bucket(input_text, current_bucket):
|
||||
return self.selected_colors[len(self.selected_colors) - 1 - index]
|
||||
return self.selected_colors[0]
|
||||
|
||||
|
||||
CURRENT_THEME = Themes(Themes.red_green)
|
||||
|
||||
|
||||
def httping(targets):
|
||||
"""Pings the supplied targets and returns a mean and a std deviation over all target responses."""
|
||||
responses = {}
|
||||
for target in targets:
|
||||
try:
|
||||
responses[target] = requests.head(target, timeout=max_ping.total_seconds()).elapsed.total_seconds() * 1000
|
||||
responses[target] = requests.head(target, timeout=MAX_PING.total_seconds()).elapsed.total_seconds() * 1000
|
||||
except requests.exceptions.RequestException as ex:
|
||||
print(str(ex), file=sys.stderr)
|
||||
responses[target] = None
|
||||
|
@ -58,21 +75,22 @@ def httping(targets):
|
|||
|
||||
if len(response_times) > 1:
|
||||
return responses, statistics.median(response_times), statistics.stdev(response_times)
|
||||
elif len(response_times) > 0:
|
||||
elif response_times:
|
||||
return responses, response_times[0], 0
|
||||
else:
|
||||
return responses, None, None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
response_times, median, stddev = httping(targets)
|
||||
if isinstance(median, float) and median != max_ping_in_ms:
|
||||
print("⦿ " + str(round(median, 2)) + "±" + str(round(stddev, 2)) + " | color=" + Themes.colorize(median))
|
||||
responses, median, stddev = httping(TARGETS)
|
||||
if isinstance(median, float) and median != MAX_PING_IN_MS:
|
||||
print("⦿ " + str(round(median, 2)) + "±" + str(round(stddev, 2)) + " | color=" + CURRENT_THEME.colorize(median))
|
||||
else:
|
||||
print("☠ | color=" + Themes.selected_colors[0])
|
||||
print("☠ | color=" + CURRENT_THEME.selected_colors[0])
|
||||
print("---")
|
||||
for target, response_time in response_times.items():
|
||||
if isinstance(response_time, float):
|
||||
print(target + ": " + str(round(response_time, 2)) + " | color=" + Themes.colorize(response_time))
|
||||
for current_host, current_response in responses.items():
|
||||
if isinstance(current_response, float):
|
||||
print(current_host + ": " + str(round(current_response, 2)) + " | color=" +
|
||||
CURRENT_THEME.colorize(current_response))
|
||||
else:
|
||||
print(target + ": ☠ | color=" + Themes.selected_colors[0])
|
||||
print(current_host + ": ☠ | color=" + CURRENT_THEME.selected_colors[0])
|
||||
|
|
Loading…
Reference in a new issue