import wx
import os
import re
import time

def pingup(host='localhost'):
	try:
		ping = os.popen('ping -i .2 -c 5 -w 3 -W 3 %s' % host)
	except:
		return False
	
	res = ping.read()

	if re.match('.*100% packet loss.*(?s)', res) == None:
		return True
	

	return False
	


class statusPane(wx.Frame):
	def __init__(self, app):
		self.App = app
		wx.Frame.__init__(self, None, -1, 'pingup')
		timerid = wx.NewId()
		self.timer = wx.Timer(self, timerid)
		
		wx.EVT_TIMER(self, timerid, lambda event: self.Update())

		self.panel = wx.Panel(self, -1)
		
		siz = wx.BoxSizer(wx.VERTICAL)

		self.status = wx.StaticText(self.panel, -1, '')
		self.status.SetFont(wx.Font(60, wx.SWISS, wx.NORMAL, wx.BOLD))
		siz.Add(self.status, 1, wx.CENTRE|wx.ALL, 0)
		self.since = wx.StaticText(self.panel, -1, '')
		siz.Add(self.since, 1, wx.CENTRE|wx.ALL,30)

		self.sincelast = wx.StaticText(self.panel, -1, '')
		siz.Add(self.sincelast, 1, wx.CENTRE|wx.ALL,30)


		self.panel.SetSizer(siz)
		self.state = None

		self.siz = siz
		
		self.Update()

		self.timer.Start(5000)



	def Update(self):
		state = pingup(self.App.targ)
		if self.state != state:
			self.sincelast.SetLabel('Last %s: %s' % (self.status.GetLabel(),  self.since.GetLabel()))
			self.since.SetLabel('Since: %s' % time.ctime())
			self.state = state
			if self.state:
				self.status.SetLabel('UP!')
				self.panel.SetBackgroundColour(wx.GREEN)
			else:
				self.status.SetLabel('DOWN!')
				self.panel.SetBackgroundColour(wx.RED)
			self.Refresh()
			self.siz.Layout()

class pingupper(wx.App):
	def OnInit(self):
		self.targ = 'magenta.zorcat.com'
		sp = statusPane(self)
		sp.Show(True)
		return True


if __name__ == '__main__':
	pu = pingupper(None)
	pu.MainLoop()

