Filter:   InfoImg
download report_server.py
Language: Python
LOC: 150
Project Info
QOS
Server: SourceForge
Type: cvs
[Show Code]






[Show Code]
...ge\q\qos\qos\qos\qosserver\
   auth_handler.py
   BaseObject.py
   collector.py
   ConfData.db.orig
   config_server.py
   counter.py
   DataLogFile.py
   default_handler.py
   downtimer.py
   englishUnits.py
   entityHeaders.py
   entityProps.py
   event_loop.py
   http_date.py
   http_server.py
   log.py
   logger.py
   m_syslog.py
   medusa_gif.py
   monitor.py
   normalDate.py
   pop.py
   Process.py
   producers.py
   qos.db.seed
   qos_server.py
   qosreport.py
   qosserver.init
   rangefind.py
   report_server.py
   reportData.py
   reportDowntime.py
   reportMultiDowntime.py
   reportMultiplot.py
   rpc_server.py
   sendmail.py
   StateDb.py
   status_handler.py

#!/usr/bin/python
#
# QOS Report Server
# Doug White
#
# Code mercilessly stolen from qos_server.py

import sys
import os
import string
import re
import time
import asyncore
import event_loop
import http_server
import monitor
import auth_handler
import urllib
import StateDb
import HtmlKit
import downtimer
import entityHeaders
import reportDowntime
import reportData
import reportMultiplot
import reportMultiDowntime
from englishUnits import *
# from reportData import *

global ConfigurationData

http_server_port = 9994
monitor_server_port = 9999

path_regex = re.compile (
#        path        params        query       fragment
        '\\([^;?#]*\\)\\(;[^?#]*\\)?\\(\\?[^#]*\)?\(#.*\)?'
        )

# top level report system page, listing available reports
class ReportHomePage:
    def display(self, request):
        request['Content-Type'] = 'text/html'

        p = HtmlKit.Page()
        p.title_('QOS: Reports')

        p.append('<H1>QOS: Reports</H1>\n<HR>\n')

        t1 = HtmlKit.Panel() # root
        t1.title_('Available Reports')

        t1t1 = HtmlKit.Table() # subtable
        l1 = HtmlKit.Link('/downtime', 'Downtime Report') # link

        t1t1r1 = t1t1.newRow() # subtable row
        t1t1r1.newColumn(l1)
        t1t1r1.newColumn('Calculates downtime over a period')
        t1t1r2 = t1t1.newRow()
        t1t1r2.newColumn(HtmlKit.Link('/data', 'Data Report'))
        t1t1r2.newColumn('Graphs and displays data readings from an entity')
        t1t1r3 = t1t1.newRow()
        t1t1r3.newColumn(HtmlKit.Link('/multip', 'Multiplot Report'))
        t1t1r3.newColumn('Graphs one or more entities')
        t1t1r4 = t1t1.newRow()
        t1t1r4.newColumn(HtmlKit.Link('/multidt', 'MultiDowntime Report'))
        t1t1r4.newColumn('Plot downtime of multiple entities')

        t1r1 = t1.content().append(t1t1) # root table row

        # insert panel
        p.append(t1)

        # Notes to our friends
        p.append("Entites not showing up?")
        p.append(HtmlKit.Link('/reload', 'Reload state database'))

        # finish up
        request.push(str(p))
        request.done()


###########################################################

class ReloadPage:
    def display (self, request, url):
        SystemState.close()
        SystemState.open()
        f = open('ConfData.db', 'r')
        RawConfigurationData = f.read();
        f.close()
        p = HtmlKit.Page()
        p.title_('QOS: Reports: Database reloaded')
        t1 = HtmlKit.Panel()
        t1.title_('Database reloaded')
        t1.content().append(HtmlKit.Center(HtmlKit.Link('/', 'Return to Reports Main')))
        p.append(t1)
        request.push(str(p))
        request.done()

class rc_handler:

    def __init__ (self, root):
        self.urlRoot = root
        self.last_match = None

    # we handle everything
    def match (self, request):
        return 1

    def split_path (self, path):
        m = path_regex.match(path)
        if not m:
            raise ValueError, "bad path"
        else:
            x = []
            for i in range(1,5):
               x.append(m.group(i))
            return x

    # do the hard work
    def handle_request (self, request):
        if request.uri == '/':
        # display static home page...
            page = ReportHomePage()
            page.display(request)
        else:
            print 'cgi hit looks like.. [%s]' % request.uri
            url = HtmlKit.Url() # Url class doesn't support keywords
            url.url_(request.uri)
            print 'uri: %s' % url.url()
            if url.path() == '/downtime':
                rp = reportDowntime.reportDowntime('/downtime', 'Downtime', SystemState, ConfigurationData)
                if url.argumentsDict().has_key('dograph'):
                    rp.displayGraph(request, url)
                elif not url.argumentsDict().has_key('agent'):
                    rp.displayAgent(request, url)
                elif not url.argumentsDict().has_key('entity'):
                    rp.displayEntity(request, url)
                elif not url.argumentsDict().has_key('fromdate'):
                    rp.displayDateRange(request, url)
                elif not url.argumentsDict().has_key('summary') and not url.argumentsDict().has_key('detail') and not url.argumentsDict().has_key('reportparams'):
                    rp.displayOptionsInfo(request, url)
                else:
                    rp.displayReport(request, url)
            elif url.path() == '/data':
                rp = reportData.reportData('/data', 'Data', SystemState, ConfigurationData)
                if not url.argumentsDict().has_key('agent'):
                    rp.displayAgent(request, url)
                elif not url.argumentsDict().has_key('entity'):
                    rp.displayEntity(request, url)
                elif not url.argumentsDict().has_key('column'):
                    rp.displayColumn(request, url)
                elif not url.argumentsDict().has_key('fromdate'):
                    rp.displayDateRange(request, url)
                elif not url.argumentsDict().has_key('summary') and not url.argumentsDict().has_key('detail') and not url.argumentsDict().has_key('reportparams') and not url.argumentsDict().has_key('graph'):
                    rp.displayOptionsInfo(request, url)
                elif url.argumentsDict().has_key('dograph'):
                    rp.displayGraph(request, url)
                else:
                    rp.displayReport(request, url)
            elif url.path() == '/multip':
                rp = reportMultiplot.reportMultiplot('/multip', 'Multiplot', SystemState, ConfigurationData)
                rp.displayPage(request, url)
            elif url.path() == '/multidt':
                rp = reportMultiDowntime.reportMultiDowntime('/multidt', 'MultiDowntime', SystemState, ConfigurationData)
                rp.displayPage(request, url)
            elif url.path() == '/reload':
                ReloadPage().display(request, url)
            else:
                print 'eek! [%s]' % url.path()

if __name__ == '__main__':

    try:
        f = open('ConfData.db', 'r')
        RawConfigurationData = f.read();
        f.close()
        # Use SystemState DB for entity info
        SystemState = StateDb.StateDb()
        SystemState.open()

    except IOError:
        print "The Entities file could not be opened. Exiting."
        sys.exit(1)
    ConfigurationData = eval(RawConfigurationData)


    ms = monitor.monitor_server('127.0.0.1', (monitor_server_port))
    hs = http_server.http_server('', http_server_port)

    ah = auth_handler.auth_handler(ConfigurationData['Qos']['userpass'], rc_handler('/'))
    hs.install_handler(ah)

    el = event_loop.event_loop()
    el.go(timeout=30.0)