Initial commit
This commit is contained in:
		
						commit
						4bf9a1d133
					
				
							
								
								
									
										76
									
								
								netwatch.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										76
									
								
								netwatch.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,76 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
# NetWatch.py -- A health dashboard for your network
 | 
			
		||||
# Copyright 2015 Will Bradley
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Command-line GUI
 | 
			
		||||
import curses
 | 
			
		||||
import curses.wrapper
 | 
			
		||||
# Timer
 | 
			
		||||
from gi.repository import GObject as gobject
 | 
			
		||||
# Pinging
 | 
			
		||||
import subprocess
 | 
			
		||||
# Regex
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
# Variables
 | 
			
		||||
host = "8.8.8.8"
 | 
			
		||||
ping_frequency = 5
 | 
			
		||||
ping_log_max_size = 40
 | 
			
		||||
 | 
			
		||||
class Pinger:
 | 
			
		||||
  ping_log = []
 | 
			
		||||
  paused = False
 | 
			
		||||
  autostart = False
 | 
			
		||||
  icon_height = 22
 | 
			
		||||
 | 
			
		||||
  def ping(self):
 | 
			
		||||
    ping = subprocess.Popen(
 | 
			
		||||
        ["ping", "-c", "1", host],
 | 
			
		||||
        stdout = subprocess.PIPE,
 | 
			
		||||
        stderr = subprocess.PIPE
 | 
			
		||||
    )
 | 
			
		||||
    out, error = ping.communicate()
 | 
			
		||||
    m = re.search('time=(.*) ms', out)
 | 
			
		||||
    if error or m == None:
 | 
			
		||||
      label = "PING FAIL"
 | 
			
		||||
      self.log_ping(-1)
 | 
			
		||||
    else:
 | 
			
		||||
      latency = "%.2f" % float(m.group(1))
 | 
			
		||||
      label = latency+" ms"
 | 
			
		||||
      self.log_ping(latency)
 | 
			
		||||
    self.stdscr.addstr(2,1,"Ping: "+label, curses.color_pair(2))
 | 
			
		||||
    self.stdscr.refresh()
 | 
			
		||||
    gobject.timeout_add_seconds(self.timeout, self.ping)
 | 
			
		||||
 | 
			
		||||
  def log_ping(self, value):
 | 
			
		||||
    self.ping_log.append(float(value))
 | 
			
		||||
    #self.update_log_menu()
 | 
			
		||||
    # limit the size of the log
 | 
			
		||||
    if len(self.ping_log) >= ping_log_max_size:
 | 
			
		||||
      # remove the earliest ping, not the latest
 | 
			
		||||
      self.ping_log.pop(0) 
 | 
			
		||||
 | 
			
		||||
  def __init__(self, stdscr):
 | 
			
		||||
 | 
			
		||||
    # start the ping process
 | 
			
		||||
    self.stdscr = stdscr
 | 
			
		||||
    self.timeout = ping_frequency
 | 
			
		||||
    self.ping()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main(stdscr):
 | 
			
		||||
 | 
			
		||||
  curses.init_pair(1, curses.COLOR_RED, curses.COLOR_BLACK);
 | 
			
		||||
  curses.init_pair(2, curses.COLOR_GREEN, curses.COLOR_BLACK);
 | 
			
		||||
 | 
			
		||||
  stdscr.addstr(1,1,"Hello, world.", curses.color_pair(1))
 | 
			
		||||
  pinger = Pinger(stdscr)
 | 
			
		||||
  stdscr.refresh()
 | 
			
		||||
  stdscr.getch()
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
  curses.wrapper(main)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user