import turbogears as tg
-from turbogears import controllers, expose, flash, exception_handler
+from turbogears import controllers, expose, flash, exception_handler, redirect
from turbogears import widgets
from cherrypy import request, response
import cherrypy
# import logging
# log = logging.getLogger("monitorweb.controllers")
import re
+import os
from monitor.database.info.model import *
#from monitor.database.zabbixapi.model import *
-#from monitor.database.dborm import zab_session as session
-#from monitor.database.dborm import zab_metadata as metadata
from monitor_xmlrpc import MonitorXmlrpcServer
+from monitor import util
from monitor import reboot
+from monitor import bootman
from monitor import scanapi
+from monitor import config
import time
from monitor.wrapper.plccache import plcdb_hn2lb as site_hn2lb
hostname = widgets.CheckBox(label="Hostname")
firewall = widgets.CheckBox(label="Firewall?")
+ fs_status = widgets.CheckBox(label="Filesystem Status")
+ ssh_status = widgets.CheckBox(label="SSH Status")
+ ssh_error = widgets.CheckBox(label="SSH Errors")
dns_status = widgets.CheckBox(label="DNS Status")
+ iptables_status = widgets.CheckBox(label="IP Tables Status")
+ nm_status = widgets.CheckBox(label="NM Status")
+ princeton_comon_dir = widgets.CheckBox(label="CoMon Dir")
+ princeton_comon_running = widgets.CheckBox(label="CoMon Running")
+ princeton_comon_procs = widgets.CheckBox(label="CoMon Processes")
external_dns_status = widgets.CheckBox(label="Hostname Resolves?")
kernel_version = widgets.CheckBox(label="Kernel")
+ bootcd_version = widgets.CheckBox(label="BootCD")
+ boot_server = widgets.CheckBox(label="Boot Server")
+ install_date = widgets.CheckBox(label="Installation Date")
observed_status = widgets.CheckBox(label="Observed Status")
+ uptime = widgets.CheckBox(label="Uptime")
+ traceroute = widgets.CheckBox(label="Traceroute")
port_status = widgets.CheckBox(label="Port Status")
rpms = widgets.CheckBox(label="RPM")
rpmvalue = widgets.TextField(label="RPM Pattern")
class QueryForm(widgets.TableForm):
template = """
<form xmlns:py="http://purl.org/kid/ns#"
+ id="queryform"
name="${name}"
action="${action}"
method="${method}"
agg.dns_short_status = 'Mismatch'
return agg
+class ActionListWidget(widgets.Widget):
+ pass
+
class NodeWidget(widgets.Widget):
pass
return dict(now=time.ctime(), query=rquery)
- @expose(template="monitorweb.templates.nodelist", allow_json=True)
- def node2(self, filter=None):
+ def node_query(self, filter):
nhquery = HistoryNodeRecord.query.all()
query = []
for nh in nhquery:
fb = FindbadNodeRecord.get_latest_by(hostname=q.hostname)
agg = prep_node_for_display(fb)
rquery.append(agg)
+ return rquery
+ @expose("cheetah:monitorweb.templates.nodelist_plain", as_format="plain",
+ accept_format="text/plain", content_type="text/plain")
+ @expose(template="monitorweb.templates.nodelist", allow_json=True)
+ def node2(self, filter=None):
+ rquery=self.node_query(filter)
widget = NodeWidget(template='monitorweb.templates.node_template')
return dict(now=time.ctime(), query=rquery, nodewidget=widget)
+ @expose("cheetah:monitorweb.templates.query_plain", as_format="plain",
+ accept_format="text/plain", content_type="text/plain")
@expose(template="monitorweb.templates.query", allow_json=True)
def query(self, **data):
query = []
else:
agg = node.to_dict()
agg.update(agg['plc_node_stats'])
+ if agg['install_date']:
+ agg['install_date'] = time.mktime(time.strptime(agg['install_date'], "%a %b %d %H:%M:%S %Y"))
+ if agg['kernel_version']:
+ agg['kernel_version'] = agg['kernel_version'].split()[2]
+ if 'traceroute' in data and agg['traceroute']:
+ agg['traceroute'] = "<pre>" + agg['traceroute'] + "</pre>"
if 'rpmvalue' in data and 'rpms' in data:
if agg['rpms']:
rpm_list = agg['rpms'].split()
def simpleview(self, **data):
return self.pre_view(**data)
+ @expose(template="monitorweb.templates.simpleview")
+ def pcuview(self, **data):
+ return self.pre_view(**data)
+
@expose(template="monitorweb.templates.detailview")
def detailview(self, **data):
return self.pre_view(**data)
+
def pre_view(self, **data):
session.flush(); session.clear()
for pcuid_key in pcus:
pcuquery += [pcus[pcuid_key]]
- return dict(sitequery=sitequery, pcuquery=pcuquery, nodequery=nodequery, actions=actions_list, since=since, exceptions=exceptions)
+ actionlist_widget = ActionListWidget(template='monitorweb.templates.actionlist_template')
+ return dict(sitequery=sitequery, pcuquery=pcuquery, nodequery=nodequery, actions=actions_list, actionlist_widget=actionlist_widget, since=since, exceptions=exceptions)
# TODO: add form validation
@expose(template="monitorweb.templates.pcuview")
@exception_handler(nodeaction_handler,"isinstance(tg_exceptions,RuntimeError)")
- def pcuview(self, loginbase=None, pcuid=None, hostname=None, since=20, **data):
+ def pcuviewold(self, loginbase=None, pcuid=None, hostname=None, since=20, **data):
session.flush(); session.clear()
sitequery=[]
pcuquery=[]
types = filter(lambda x: 'notice' in x, dir(mailtxt))
results = {}
+ print mon_metadata.bind
+ if session.bind is None:
+ #TODO: figure out why this value gets cleared out...
+ session.bind = mon_metadata.bind
+ result = session.execute("select distinct(action_type) from actionrecord;")
+
+ types = [r[0] for r in result]
+
try: since = int(since)
except: since = 7
return dict(results=results)
@expose(template="monitorweb.templates.actionlist")
- def actionlist(self, action_type='down_notice', since=7, loginbase=None):
+ def actionlist(self, since=7, action_type=None, loginbase=None):
try: since = int(since)
except: since = 7
+ acts_query = ActionRecord.query.filter(
+ ActionRecord.date_created >= datetime.now() - timedelta(since)
+ )
if loginbase:
- acts = ActionRecord.query.filter_by(loginbase=loginbase
- ).filter(ActionRecord.date_created >= datetime.now() - timedelta(since)
- ).order_by(ActionRecord.date_created.desc())
- else:
- acts = ActionRecord.query.filter(ActionRecord.action_type==action_type
- ).filter(ActionRecord.date_created >= datetime.now() - timedelta(since)
- ).order_by(ActionRecord.date_created.desc())
+ acts_query = acts_query.filter_by(loginbase=loginbase)
+
+ if action_type:
+ acts_query = acts_query.filter(ActionRecord.action_type==action_type)
+
+ acts = acts_query.order_by(ActionRecord.date_created.desc())
+
query = [ a for a in acts ]
return dict(actions=query, action_type=action_type, since=since)
+
+ @cherrypy.expose()
+ def upload(self, log, **keywords):
+ hostname = None
+ logtype = None
+ logtype_list = ['bm.log', ]
+
+ if 'hostname' in keywords:
+ hostname = keywords['hostname']
+ if 'type' in keywords and keywords['type'] in logtype_list:
+ logtype = keywords['type']
+
+ if not hostname: return ""
+ if not logtype: return "unknown logtype: %s" % logtype
+
+ short_target_filename = bootman.bootmanager_log_name(hostname)
+ abs_target_filename = os.path.join(config.MONITOR_BOOTMANAGER_LOG, short_target_filename)
+ print "write data: %s" % abs_target_filename
+ util.file.dumpFile(abs_target_filename, log.file.read())
+ bootman.bootmanager_log_action(hostname, short_target_filename, logtype)
+ session.flush()
+
+ print "redirecting 3"
+
+ return dict()