Filter:   InfoImg
download qosreport.py
Language: Python
LOC: 184
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

#
# qosreport.py: Base class for QOS reports.
#
# Doug White

import string
import time
import urllib
import HtmlKit
import normalDate
import entityHeaders
from englishUnits import *

class QOSReport:

    # Init: Store the CGI prefix ('/data') and the type name ('Data')
    def __init__(self, prefix, typename, SystemState, ConfigFile):
        self.prefix = prefix
        self.typename = typename
        self.SystemState = SystemState
        self.ConfigFile = ConfigFile

### Stock query pages

    # displayAgent: Display agent requester.
    def displayAgent(self, request, url):
        request['Content-Type'] = 'text/html'
        groups = []

        p = HtmlKit.Page()
        p.title_('QOS: Reports: %s: Agent' % self.typename)
        p.append('<H1>QOS: <a href="/">Reports</a>: <a href="%s">%s</a>: Agent</H1>\n' % (self.prefix, self.typename))

        f = HtmlKit.Form(method='GET', action=self.prefix)
        p.append(f)

        self.preserveState(url.argumentsDict(), f)

        t1 = HtmlKit.Panel()
        t1.title_('Agent')
        if self.ConfigFile.has_key('Groups'):
            if self.ConfigFile['Groups'].has_key(self.typename):
                groups = self.ConfigFile['Groups'][self.typename].keys()
                groups.sort()
            ms1 = HtmlKit.Select(name='agent', size=min(20, len(self.SystemState.state.keys())+len(groups)))
            for group in groups:
                ms1.newOption('QOS_Group_%s' % group)
        else:
            ms1 = HtmlKit.Select(name='agent', size=20)
            ms1.newOption('No Group')

        k = self.SystemState.state.keys()
        k.sort()
        for agent in k:
            ms1.newOption(agent)
        t1.content().append(ms1)
        t1.table().newRow().newColumn(HtmlKit.Button(value="Next &gt;"))

        f.append(t1)
        # finish up
        request.push(str(p))
        request.done()

    # displayEntity: Display entity requester
    def displayEntity(self, request, url):

        # agent = url.argumentsDict()['agent']
        agent = self.loadVar(url.argumentsDict(), 'agent')
        request['Content-Type'] = 'text/html'

        #if not agent:
        #    page = self.displayAgent(request, url)
        #    return

        p = HtmlKit.Page()
        p.title_('QOS: Reports: %s: Entity' % self.typename)
        p.append('<H1>QOS: <a href="/">Reports</a>: <a href="%s">%s</a>: Entity</H1>\n' % (self.prefix, self.typename) )
        f = HtmlKit.Form(method='GET', action=self.prefix)
        p.append(f)

        self.preserveState(url.argumentsDict(), f)
        # hf1 = HtmlKit.Input(type='hidden', name='agent', value=self.loadVar(url.argumentsDict(), 'agent')
        # f.append(hf1)
        t1 = HtmlKit.Panel()
        t1.title_('Entity')

        ms1 = HtmlKit.Select(name='entity', size=20)
        ek = self.SystemState.state[agent].keys()
        ek.sort()
        for entity in ek:
            sk = self.SystemState.state[agent][entity].keys()
            sk.sort()
            for subent in sk:
                ms1.newOption("%s_%s" % (entity, subent))
        t1.content().append(ms1)
        t1.table().newRow().newColumn(HtmlKit.Button(value='Next &gt;'))
        f.append(t1)

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

    #displayColumn: Display column requestor.
    def displayColumn(self, request, url):

        agent = self.loadVar(url.argumentsDict(), 'agent')
        entity = self.loadVar(url.argumentsDict(), 'entity')
        request['Content-Type'] = 'text/html'

        # Split off the entity name and lookup in the entityHeaders table to
        # get the column list.

        ( entname, subent ) = string.split(entity, '_', 1)
        collist = entityHeaders.EntityHeaders[entname][:]
        collist.sort()
        # print collist

        p = HtmlKit.Page()
        p.title_('QOS: Reports: %s: Column' % self.typename)
        p.append('<H1>QOS: <a href="/">Reports</a>: <a href="%s">%s</a>: Column</H1>\n' % (self.prefix, self.typename) )
        f = HtmlKit.Form(method='GET', action=self.prefix)
        p.append(f)
        # hf1 = HtmlKit.Input(type='hidden', name='agent', value=agent)
        # hf2 = HtmlKit.Input(type='hidden', name='entity', value=entity)
        # f.append(hf1)
        # f.append(hf2)
        self.preserveState(url.argumentsDict(), f)
        t1 = HtmlKit.Panel()
        t1.title_('Column')
        ms1 = HtmlKit.Select(name='column', size=min(10, len(collist)))
        for col in collist:
            ms1.newOption(col)
        t1.content().append(ms1)
        t1.table().newRow().newColumn(HtmlKit.Button(value='Next &gt;'))
        f.append(t1)

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

    # displayDateRange: Date range requester.
    def displayDateRange(self, request, url):

        # print "DateRange: starting page"
        #agent = self.loadVar(url.argumentsDict(), 'agent')
        #entity = self.loadVar(url.argumentsDict(), 'entity')
        #column = self.loadVar(url.argumentsDict(), 'column')
        request['Content-Type'] = 'text/html'

        #if not agent or not entity:
        #    page = ReportDowntimeAgentPage()
        #    page.display(request)
        #    return


        p = HtmlKit.Page()
        p.title_('QOS: Reports: %s: Date Range' % self.typename)
        p.append('<H1>QOS: <a href="/">Reports</a>: <a href="%s">%s</a>: Date Range</H1>\n' % (self.prefix, self.typename) )
        f = HtmlKit.Form(method='GET', action=self.prefix)
        p.append(f)
        #hf1 = HtmlKit.Input(type='hidden', name='agent', value=agent)
        #hf2 = HtmlKit.Input(type='hidden', name='entity', value=entity)
        #hf3 = HtmlKit.Input(type='hidden', name='column', value=column)
        #f.append(hf1)
        #f.append(hf2)
        #f.append(hf3)
        self.preserveState(url.argumentsDict(), f)
        t1 = HtmlKit.Panel()
        t1.title_('Date Range')

        st1 = HtmlKit.Table()
        st1r1 = st1.newRow()
        st1r1c1 = st1r1.newColumn(bgcolor='#eeeeee')
        in1 = HtmlKit.Input(type='text', name='fromdate', size='10')
        st1r1c1.append('From Date:')
        st1r1c1.append(in1)
        st1r1c2 = st1r1.newColumn(bgcolor='#eeeeee')
        st1r1c2.append('From Time:')
        in2 = HtmlKit.Input(type='text', name='fromtime', size='6')
        st1r1c2.append(in2)

        st1r2 = st1.newRow()
        st1r2c1 = st1r2.newColumn(bgcolor='#eeeeee')
        st1r2c1.append('To Date:')
        in3 = HtmlKit.Input(type='text', name='todate', size='10')
        st1r2c1.append(in3)
        st1r2c2 = st1r2.newColumn(bgcolor='#eeeeee')
        st1r2c2.append('To Time:')
        in4 = HtmlKit.Input(type='text', name='totime', size='6')
        st1r2c2.append(in4)

        t1.content().append(st1)
        t1.table().newRow().newColumn(HtmlKit.Button(value='Next &gt;'))
        f.append(t1)

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

    # displayOptions: Display an options page. Options are passed in
    # via a dictionary of sections with CGIname/description/defaulted
    # triplets.

    def displayOptions(self, request, url, optslist):
        request['Content-Type'] = 'text/html'

        p = HtmlKit.Page()
        p.title_('QOS: Reports: %s: Options' % self.typename)
        p.append('<H1>QOS: <a href="/">Reports</a>: <a href="%s">%s</a>: Options</H1>\n' % (self.prefix, self.typename))
        f = HtmlKit.Form(method='GET', action=self.prefix)
        p.append(f)
        self.preserveState(url.argumentsDict(), f)

        p1 = HtmlKit.Panel()
        p1.title_('Options')

        # Loop over the list and generate # elements for each.
        # line = (CGIname, 'Label text', Boolean(defaulted))
        for section in optslist:
            t1 = HtmlKit.Table()
            t1.newRow().newHeader(section[0])
            for line in section[1]:
                t1c = t1.newRow().newColumn()

                if line[2]:
                    t1c.append(HtmlKit.Input(type='checkbox', name=line[0], checked='1', value='1'))
                else:
                    t1c.append(HtmlKit.Input(type='checkbox', name=line[0], value='1'))
                t1c.append(line[1])
            p1.content().append(t1)

        f.append(p1)
        p1.table().newRow().newColumn(HtmlKit.Button(value='Next &gt;'))

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

    # displayReport: Override this with the actual report body.
    def displayReport(self, request, url):
        p = HtmlKit.Page()
        p.title_('QOS: Reports: %s: Report' % self.typename)
        p.append('<H1>QOS: Reports: %s: Report</H1>\n' % self.typename)
        p.append('<HR>')
        p.append('Insert your report body here.<p>')

        request.push(str(p))
        request.done()


### Some useful utility functions.

    # preserve_state: Copies CGI query variables into HtmlKit HIDDEN
    # input fields.
    # parent: HtmlKit object to append INPUT objects to.
    # vars: Dictionary of CGI vars to append.

    def preserveState(self, qvars, parent):
        vars = self.unquoteDict(qvars)
        for key in vars.keys():
            parent.append(HtmlKit.Input(type='hidden',
                                        name=key,
                                        value=vars[key]
                                        )
                          )

    # load_var: Returns unquoted variable from dictionary.

    def loadVar(self, vars, key):
        if vars.has_key(key):
            return urllib.unquote(vars[key])
        else:
            return None

    # unquoteDict: Run urllib.unquote() against a CGI var dictionary.
    def unquoteDict(self, vars):
        output = {}
        for key in vars.keys():
            output[key] = urllib.unquote(vars[key])
        return output

    # convertDateAndTime: Creates NormalDate objects for rangefinder.
    # ripped out of downtimer. Returns a tuple with a NormalDate
    # and a UNIX timestamp.
    def convertDateAndTime(self, date, btime):
        # This is a butt-ugly hack but is due to a bug in FreeBSD libc.
        # This feeds the timezone to interpret to strptime so it handles
        # daylight/standard time properly.  tm->isdst is fed directly into
        # the tuple returned by strptime and must be set otherwise all the
        # times are interpreted 1 hour off by mktime().
        #line = '%s %s %s' % (btime, date, time.strftime("%Z", time.localtime(time.time())))
        line = '%s %s' % (btime, date)
        #print line
        #datetuple = time.strptime(line, "%H:%M %m/%d/%Y %Z")
        datetuple = time.strptime(line, "%H:%M %m/%d/%Y")
        return (normalDate.ND(datetuple), time.mktime(datetuple))

    def entityIsGroup(self, entity):
        if entity[0:10] == 'QOS_Group_' and self.ConfigFile['Groups'][self.typename].has_key(string.split(entity, '_', 3)[2]):
            return 1
        else:
            return 0