Skip to content

Instantly share code, notes, and snippets.

@DamianZaremba
Created September 26, 2011 21:40
Show Gist options
  • Save DamianZaremba/1243485 to your computer and use it in GitHub Desktop.
Save DamianZaremba/1243485 to your computer and use it in GitHub Desktop.
Anamon
#!/usr/bin/python
import os
import sys
import time
import base64
import urllib
import traceback
class watch_file:
def __init__(self, file_path, server_addr, server_port):
self.file_path = file_path
self.server_addr = server_addr
self.server_port = server_port
self.where = 0
self.size = 0
def changed(self):
if os.path.isfile(self.file_path):
size = os.stat(self.file_path)[6]
if size > self.size:
self.size = size
return True
return False
def notify(self):
fh = open(self.file_path, "r")
fh.seek(self.where)
data = base64.encodestring(fh.read())
self.where = fh.tell()
fh.close()
data = urllib.urlencode({'data': data, 'file': self.file_path})
# Try to notify 3 times!
t = 0
while t < 3:
try:
fh = urllib.urlopen("http://%s:%s/kickstarts/anamon.php" % (self.server_addr, self.server_port), data)
except Exception, e:
traceback.print_exc(file=sys.stdout)
t += 1
time.sleep(2)
else:
break
def update(self):
if not self.changed():
return
try:
self.notify()
except Exception, e:
traceback.print_exc(file=sys.stdout)
pass
def main(server_addr, server_port):
system_logs = []
system_logs.append(watch_file("/tmp/anaconda.log", server_addr, server_port))
system_logs.append(watch_file("/tmp/syslog", server_addr, server_port))
system_logs.append(watch_file("/tmp/lvmout", server_addr, server_port))
system_logs.append(watch_file("/tmp/storage.log", server_addr, server_port))
system_logs.append(watch_file("/tmp/program.log", server_addr, server_port))
system_logs.append(watch_file("/tmp/ks-script.log", server_addr, server_port))
system_logs.append(watch_file("/tmp/anacdump.txt", server_addr, server_port))
system_logs.append(watch_file("/tmp/modprobe.conf", server_addr, server_port))
system_logs.append(watch_file("/tmp/post_install.log", server_addr, server_port))
system_logs.append(watch_file("/tmp/pre_install.log", server_addr, server_port))
package_logs = []
package_logs.append(watch_file("/mnt/sysimage/root/install.log", server_addr, server_port))
package_logs.append(watch_file("/mnt/sysimage/tmp/install.log", server_addr, server_port))
package_logs.append(watch_file("/mnt/sysimage/root/upgrade.log", server_addr, server_port))
package_logs.append(watch_file("/mnt/sysimage/tmp/upgrade.log", server_addr, server_port))
watchlist = []
watchlist.extend(system_logs)
watchlist.extend(package_logs)
while 1:
for watch in watchlist:
watch.update()
time.sleep(2)
if __name__ == "__main__":
try:
server = sys.argv[1]
except IndexError:
print "Usage: %s <server ip>" % sys.argv[0]
sys.exit(2)
try:
port = int(sys.argv[2])
except (IndexError, ValueError):
port = 80
if not os.fork():
dev_null = getattr(os, "devnull", "/dev/null")
os.open(dev_null, os.O_RDWR)
os.dup2(0, 1)
os.dup2(0, 2)
main(server, port)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment