2022-10-03 03:56:28 +00:00
|
|
|
from termios import TAB3
|
|
|
|
import threading
|
|
|
|
from prometheus_client import Counter
|
|
|
|
import json
|
|
|
|
from telnetlib import theNULL
|
|
|
|
import pingparsing
|
|
|
|
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
|
2022-10-03 04:05:13 +00:00
|
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
|
|
|
|
import os
|
|
|
|
from slack import WebClient
|
|
|
|
from slack.errors import SlackApiError
|
|
|
|
|
|
|
|
slack_token = 'xoxb-250697658007-4127858946773-gyM0PMGA5XPbh3ZEYot4Yy5Z'
|
|
|
|
def slack_message(message, channel):
|
|
|
|
client = WebClient(token=slack_token)
|
|
|
|
|
|
|
|
try:
|
|
|
|
response = client.chat_postMessage(
|
|
|
|
channel=channel,
|
|
|
|
text=message
|
|
|
|
)
|
|
|
|
except SlackApiError as e:
|
|
|
|
# You will get a SlackApiError if "ok" is False
|
|
|
|
assert e.response["error"] # str like 'invalid_auth', 'channel_not_found'
|
|
|
|
|
|
|
|
|
2022-10-04 05:31:16 +00:00
|
|
|
# tests={
|
|
|
|
# "1": {
|
|
|
|
# 'dest': "10.90.1.254",
|
|
|
|
# 'name': 'Runpod GW',
|
|
|
|
# 'packet_loss_rate_permitted': 100,
|
|
|
|
# 'rtt_max_permitted': 5,
|
|
|
|
# },
|
|
|
|
# "2": {
|
|
|
|
# 'dest': "149.36.0.254",
|
|
|
|
# 'name': 'Nexgen Fortigate',
|
|
|
|
# 'packet_loss_rate_permitted': 0,
|
|
|
|
# 'rtt_max_permitted': 5,
|
|
|
|
# },
|
|
|
|
# "3": {
|
|
|
|
# 'dest': "217.17.208.20",
|
|
|
|
# 'name': 'First Hop',
|
|
|
|
# 'packet_loss_rate_permitted': 0,
|
|
|
|
# 'rtt_max_permitted': 20,
|
|
|
|
# },
|
|
|
|
|
|
|
|
# }
|
2022-10-03 04:05:13 +00:00
|
|
|
|
2022-10-03 03:56:28 +00:00
|
|
|
|
|
|
|
tests={
|
|
|
|
"1": {
|
|
|
|
'dest': "66.29.128.140",
|
|
|
|
'name': 'African webserver',
|
|
|
|
'packet_loss_rate_permitted': 50,
|
|
|
|
'rtt_max_permitted': 150,
|
|
|
|
},
|
|
|
|
"2": {
|
|
|
|
'dest': "8.8.8.8",
|
|
|
|
'name': 'Google DNS',
|
|
|
|
'packet_loss_rate_permitted': 0,
|
|
|
|
'rtt_max_permitted': 150,
|
|
|
|
},
|
|
|
|
"3": {
|
|
|
|
'dest': "1.1.1.1",
|
|
|
|
'name': 'Cloudflare DNS',
|
|
|
|
'packet_loss_rate_permitted': 0,
|
|
|
|
'rtt_max_permitted': 150,
|
|
|
|
},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
def pinger(test_id):
|
|
|
|
print("Testing {} on IP {} with RTT threshold of {} and packet loss max of {}".format(
|
|
|
|
tests[test_id]['name'],tests[test_id]['dest'],
|
|
|
|
tests[test_id]['rtt_max_permitted'],tests[test_id]['packet_loss_rate_permitted']))
|
|
|
|
dest=tests[test_id]['dest']
|
|
|
|
name=tests[test_id]['name']
|
|
|
|
rtt_max_permitted=tests[test_id]['rtt_max_permitted']
|
|
|
|
packet_loss_rate_permitted=tests[test_id]['packet_loss_rate_permitted']
|
|
|
|
|
|
|
|
ping_parser = pingparsing.PingParsing()
|
|
|
|
transmitter = pingparsing.PingTransmitter()
|
|
|
|
transmitter.destination = dest
|
|
|
|
transmitter.count = 10
|
|
|
|
transmitter.timeout=2
|
|
|
|
# while 1:
|
|
|
|
|
|
|
|
result = transmitter.ping()
|
|
|
|
data=ping_parser.parse(result).as_dict()
|
|
|
|
packet_loss_rate=data["packet_loss_rate"]
|
|
|
|
rtt_max=data["rtt_max"]
|
|
|
|
notify=0
|
|
|
|
|
|
|
|
print("Dest: {} Loss: {}% RTT: {}ms".format(dest,packet_loss_rate,rtt_max))
|
|
|
|
if rtt_max>rtt_max_permitted:
|
2022-10-04 05:31:16 +00:00
|
|
|
error_msg="ERROR: rtt_max_permitted exceeded!"
|
2022-10-03 03:56:28 +00:00
|
|
|
notify=1
|
|
|
|
|
|
|
|
if packet_loss_rate>packet_loss_rate_permitted:
|
2022-10-04 05:31:16 +00:00
|
|
|
error_msg="ERROR: packet_loss_rate_permitted exceeded!"
|
2022-10-03 03:56:28 +00:00
|
|
|
notify=1
|
|
|
|
|
|
|
|
if notify:
|
2022-10-03 04:05:13 +00:00
|
|
|
issue_data=json.dumps(ping_parser.parse(result).as_dict(), indent=4)
|
2022-10-04 05:31:16 +00:00
|
|
|
slack_message(error_msg + " " + str(tests[test_id]) + issue_data,"ng-alerts")
|
2022-10-03 04:05:13 +00:00
|
|
|
print(issue_data)
|
2022-10-03 03:56:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
registry = CollectorRegistry()
|
|
|
|
g_pl = Gauge('packet_loss_rate', 'Amt of packet loss', ['destination_ip'],registry=registry )
|
|
|
|
g_pl.labels(dest).set(packet_loss_rate)
|
|
|
|
|
2022-10-04 05:31:16 +00:00
|
|
|
if not type(rtt_max)=="NoneType":
|
2022-10-03 03:56:28 +00:00
|
|
|
g_rtt = Gauge('rtt_max', 'Round trip time', ['destination_ip'],registry=registry )
|
|
|
|
g_rtt.labels(dest).set(rtt_max)
|
|
|
|
|
|
|
|
push_to_gateway('10.10.110.250:9091', job='cory_test_job1', registry=registry)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
while 1:
|
|
|
|
for _id,_item in tests.items():
|
|
|
|
pinger(_id)
|
|
|
|
# t = threading.Thread(target=pinger, args=(_id,))
|
|
|
|
# t.start()
|
|
|
|
|