icmp ping #1
3 changed files with 35 additions and 9 deletions
|
|
@ -35,9 +35,9 @@ class Database():
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
return self.cur.fetchall()
|
return self.cur.fetchall()
|
||||||
|
|
||||||
def create_incident(self, *argv):
|
def create_incident(self, id):
|
||||||
self.cur.execute("""INSERT INTO incident (state_id, error)
|
self.cur.execute("""INSERT INTO incident (state_id)
|
||||||
VALUES (%s,%s) RETURNING *;""", *argv)
|
VALUES (%s) RETURNING *;""", (str(id),))
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
return self.cur.fetchall()
|
return self.cur.fetchall()
|
||||||
|
fil marked this conversation as resolved
|
|||||||
|
|
||||||
|
|
|
||||||
34
pingpong.py
34
pingpong.py
|
|
@ -1,5 +1,6 @@
|
||||||
from database import Database
|
from database import Database
|
||||||
from pythonping import ping
|
from pythonping import ping
|
||||||
|
from tcppinglib import tcpping
|
||||||
from config import Config
|
from config import Config
|
||||||
|
|
||||||
class PingPong:
|
class PingPong:
|
||||||
|
|
@ -7,6 +8,25 @@ class PingPong:
|
||||||
self.db = Database()
|
self.db = Database()
|
||||||
self.config = Config()
|
self.config = Config()
|
||||||
|
|
||||||
|
def icmp_ping(self, service):
|
||||||
|
r = {}
|
||||||
|
ping_data = ping(service)
|
||||||
|
avg_rtt = sum([e.time_elapsed_ms for e in ping_data])
|
||||||
|
best_effort = sorted(ping_data, key=lambda x: x.time_elapsed_ms)[0]
|
||||||
|
r['success'] = best_effort.success
|
||||||
|
r['ping'] = avg_rtt
|
||||||
|
return r
|
||||||
|
|
||||||
|
def tcp_ping(self, service):
|
||||||
|
r = {}
|
||||||
|
try:
|
||||||
|
ping_data = tcpping(service, port=80, timeout=2, count=3, interval=1)
|
||||||
|
r['success'] = ping_data.is_alive
|
||||||
|
r['ping'] = ping_data.avg_rtt
|
||||||
|
except:
|
||||||
|
r['success'] = False
|
||||||
|
return r
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
latency = {
|
latency = {
|
||||||
"location": self.config["LOCATION"]
|
"location": self.config["LOCATION"]
|
||||||
|
|
@ -14,10 +34,14 @@ class PingPong:
|
||||||
for el in self.db.get_all_services():
|
for el in self.db.get_all_services():
|
||||||
state = self.db.create_state(el['id'])[0]
|
state = self.db.create_state(el['id'])[0]
|
||||||
open_incident = self.db.get_open_incident(el['id'])
|
open_incident = self.db.get_open_incident(el['id'])
|
||||||
ping_data = ping(el['ipaddr'])
|
|
||||||
best_effort = sorted(ping_data, key=lambda x: x.time_elapsed_ms)[0]
|
if el['type'] == 'physical':
|
||||||
if best_effort.success:
|
ping_data = self.icmp_ping(el['ipaddr'])
|
||||||
latency['ping'] = best_effort.time_elapsed_ms
|
else:
|
||||||
|
ping_data = self.tcp_ping(el['domain'])
|
||||||
|
|
||||||
|
if ping_data['success']:
|
||||||
|
latency['ping'] = ping_data['ping']
|
||||||
self.db.add_latency([state['id'], *latency.values()])
|
self.db.add_latency([state['id'], *latency.values()])
|
||||||
if open_incident:
|
if open_incident:
|
||||||
self.db.close_incident(open_incident[0]['id'])
|
self.db.close_incident(open_incident[0]['id'])
|
||||||
|
|
@ -25,4 +49,4 @@ class PingPong:
|
||||||
latency['ping'] = 0
|
latency['ping'] = 0
|
||||||
self.db.add_latency([state['id'], *latency.values()])
|
self.db.add_latency([state['id'], *latency.values()])
|
||||||
if not open_incident:
|
if not open_incident:
|
||||||
self.db.create_incident([state['id'], best_effort.error_message])
|
self.db.create_incident(state['id'])
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
certifi==2024.2.2
|
certifi==2024.2.2
|
||||||
charset-normalizer==3.3.2
|
charset-normalizer==3.3.2
|
||||||
idna==3.7
|
idna==3.7
|
||||||
load-dotenv==0.1.0
|
pip-autoremove==0.10.0
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.9
|
||||||
python-dotenv==1.0.1
|
python-dotenv==1.0.1
|
||||||
pythonping==1.1.4
|
pythonping==1.1.4
|
||||||
requests==2.31.0
|
requests==2.31.0
|
||||||
|
setuptools==69.5.1
|
||||||
|
tcppinglib==2.0.3
|
||||||
urllib3==2.2.1
|
urllib3==2.2.1
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue
Don't you have a way here to just take the state you just created? It seems pointless to me to take them all since you're only interested in the latest created anyway