예제 #1
0
 def render(self, data):
     r = []
     i = 0
     notpresent = T.td(_class="notpresent")[T.acronym(
         title="Unable to get IP from ARP tables")["N/A"]]
     for row in data:
         mac = T.td[T.span(data=row[0], render=T.directive("mac"))]
         if row[1] is not None:
             r.append(
                 T.tr(_class=(i % 2) and "odd" or "even")
                 [mac,
                  T.td[T.invisible(data=row[1], render=T.directive("ip"))]])
         else:
             r.append(
                 T.tr(_class=(i % 2) and "odd" or "even")[mac, notpresent])
         i += 1
     if len(r) == 1:
         return [('FDB', [
             T.span(data=data[0][0],
                    render=T.directive("mac")), data[0][1] and
             [", ", T.span(data=data[0][1], render=T.directive("ip"))] or ""
         ], 1)]
     return [('FDB', [
         len(r) == 20 and "20+" or len(r),
         T.span(render=T.directive("tooltip"),
                data=T.table(_class="mac")[T.thead[T.td["MAC"], T.td["IP"]],
                                           r])
     ], len(r) == 20 and 21 or len(r))]
예제 #2
0
def format_desc_list(singular, descs, plural=None):
    if plural is None:
        plural = singular + 's'
    if not descs:
        return ''
    if len(descs) > 1:
        label = plural
    else:
        label = singular
    r = []
    first = True
    for d in descs:
        if first:
            row = tags.tr(class_="fieldStart")
            row[tags.td(class_="fieldName")[label]]
            first = False
        else:
            row = tags.tr()
            row[tags.td()]
        if d.name is None:
            row[tags.td(colspan=2)[d.format()]]
        else:
            row[tags.td(class_="fieldArg")[d.name], tags.td[d.format()]]
        r.append(row)
    return r
예제 #3
0
 def render(self, data):
     r = []
     i = 0
     vlanlist = []
     notpresent = T.td(_class="notpresent")[T.acronym(
         title="Not present or no information from remote")["N/A"]]
     for row in data:
         if row[1] is not None:
             vlanlist.append(str(row[0]))
         vid = T.td[T.span(data=row[0], render=T.directive("vlan"))]
         if row[1] is None:
             r.append(
                 T.tr(_class=(i % 2) and "odd" or "even")[vid, notpresent,
                                                          T.td[row[2]]])
         elif row[2] is None:
             r.append(
                 T.tr(_class=(i % 2) and "odd" or "even")[vid, T.td[row[1]],
                                                          notpresent])
         elif row[1] == row[2]:
             r.append(
                 T.tr(_class=(i % 2) and "odd" or "even")[
                     vid, T.td(colspan=2)[row[1]]])
         else:
             r.append(
                 T.tr(_class=(i % 2) and "odd" or "even")[vid, T.td[row[1]],
                                                          T.td[row[2]]])
         i += 1
     vlantable = T.table(_class="vlan")[T.thead[T.td["VID"], T.td["Local"],
                                                T.td["Remote"]], r]
     return [('VLAN', [[[T.span(data=v, render=T.directive("vlan")), " "]
                        for v in vlanlist],
                       T.span(render=T.directive("tooltip"),
                              data=vlantable)], ", ".join(vlanlist))]
예제 #4
0
 def render(self, data):
     r = []
     i = 0
     notpresent = T.td(_class="notpresent")[
         T.acronym(title="Unable to get IP from ARP tables")["N/A"]]
     for row in data:
         mac = T.td[T.span(data=row[0], render=T.directive("mac"))]
         if row[1] is not None:
             r.append(T.tr(_class=(i%2) and "odd" or "even")
                      [mac, T.td[T.invisible(data=row[1],
                                             render=T.directive("ip"))]])
         else:
             r.append(T.tr(_class=(i%2) and "odd" or "even")
                      [mac, notpresent])
         i += 1
     if len(r) == 1:
         return [('FDB',
                  [T.span(data=data[0][0], render=T.directive("mac")),
                   data[0][1] and [", ", T.span(data=data[0][1],
                                                render=T.directive("ip"))] or ""],
                  1)]
     return [('FDB',
              [len(r) == 20 and "20+" or len(r),
               T.span(render=T.directive("tooltip"),
                      data=T.table(_class="mac")[
                     T.thead[T.td["MAC"], T.td["IP"]], r])],
              len(r) == 20 and 21 or len(r))]
예제 #5
0
 def render(self, data):
     r = []
     i = 0
     vlanlist = []
     notpresent = T.td(_class="notpresent")[
         T.acronym(title="Not present or no information from remote")["N/A"]]
     for row in data:
         if row[1] is not None:
             vlanlist.append(str(row[0]))
         vid = T.td[T.span(data=row[0], render=T.directive("vlan"))]
         if row[1] is None:
             r.append(T.tr(_class=(i%2) and "odd" or "even")[
                     vid, notpresent,
                     T.td[row[2]]])
         elif row[2] is None:
             r.append(T.tr(_class=(i%2) and "odd" or "even")
                      [vid, T.td[row[1]], notpresent])
         elif row[1] == row[2]:
             r.append(T.tr(_class=(i%2) and "odd" or "even")
                      [vid, T.td(colspan=2)[row[1]]])
         else:
             r.append(T.tr(_class=(i%2) and "odd" or "even")
                      [vid, T.td[row[1]], T.td[row[2]]])
         i += 1
     vlantable = T.table(_class="vlan")[
         T.thead[T.td["VID"], T.td["Local"], T.td["Remote"]], r]
     return [('VLAN',
              [[ [T.span(data=v, render=T.directive("vlan")), " "]
                 for v in vlanlist ],
               T.span(render=T.directive("tooltip"),
                      data=vlantable)],
              ", ".join(vlanlist))]
예제 #6
0
def format_desc_list(singular, descs, plural=None):
    if plural is None:
        plural = singular + 's'
    if not descs:
        return ''
    if len(descs) > 1:
        label = plural
    else:
        label = singular
    r = []
    first = True
    for d in descs:
        if first:
            row = tags.tr(class_="fieldStart")
            row[tags.td(class_="fieldName")[label]]
            first = False
        else:
            row = tags.tr()
            row[tags.td()]
        if d.name is None:
            row[tags.td(colspan=2)[d.format()]]
        else:
            row[tags.td(class_="fieldArg")[d.name], tags.td[d.format()]]
        r.append(row)
    return r
예제 #7
0
파일: handler.py 프로젝트: 2mf/pyicqt
    def render_roster(self, ctx, data):
        request = inevow.IRequest(ctx)
        username = request.getUser()

        ret = tags.table(border=0, cellspacing=5, cellpadding=2)
        row = tags.tr(height=25)[
            tags.th["UIN/Screen Name"],
            tags.th["Nickname"],
            tags.th["Network"],
            tags.th["Avatar"],
            tags.th["Status"]
        ]
        ret[row]
        roster = self.pytrans.xdb.getList("roster", username)
        if not roster:
            return ret
        for item in roster:
            if item[0][0].isdigit():
                network = "ICQ"
            else:
                network = "AIM"
            avatar = "-"
            if not config.disableAvatars and item[1].has_key("shahash"):
                avatar = tags.a(href=("/avatars/%s" % item[1]["shahash"]))[
                    tags.img(
                        border=0, height=25, src=("/avatars/%s" % item[1]["shahash"]))
                ]
            nickname = "-"
            if "nickname" in item[1]:
                nickname = item[1]["nickname"]
            else:
                if username in self.pytrans.sessions and \
                        self.pytrans.sessions[username].ready:
                    c = self.pytrans.sessions[username].contactList.getContact(
                        "%s@%s" % (item[0], config.jid))
                    if c.nickname and c.nickname != "":
                        nickname = c.nickname
            status = "-"
            if username in self.pytrans.sessions and \
                    self.pytrans.sessions[username].ready:
                c = self.pytrans.sessions[username].contactList.getContact(
                    "%s@%s" % (item[0], config.jid))
                status = c.ptype
                if not status:
                    status = c.show
                    if not status:
                        status = "available"
            row = tags.tr(height=25)[
                tags.td(height=25, align="middle")[item[0]],
                tags.td(height=25, align="middle")[nickname],
                tags.td(height=25, align="middle")[network],
                tags.td(height=25, align="middle")[avatar],
                tags.td(height=25, align="middle")[status]
            ]
            ret[row]
        return ret
예제 #8
0
 def render_bayeux_environments(self):
     return [
         tags.h3()['Bayeux Environmerts'],
         tags.table()[
             tags.tr()[
                 tags.th()['Port'],
                 tags.td()[lumen.config['port']],
             ],
             tags.tr()[
                 tags.th()['Engine'],
                 tags.td()[lumen.config['engine']],
             ]
         ],
     ]
예제 #9
0
    def render_roster(self, ctx, data):
        request = inevow.IRequest(ctx)
        username = request.getUser()

        ret = T.table(border=0, cellspacing=5, cellpadding=2)
        row = T.tr(height=25)[T.th["UIN/Screen Name"], T.th["Nickname"],
                              T.th["Network"], T.th["Avatar"], T.th["Status"]]
        ret[row]
        roster = self.pytrans.xdb.getList("roster", username)
        if not roster:
            return ret
        for item in roster:
            if item[0][0].isdigit():
                network = "ICQ"
            else:
                network = "AIM"
            avatar = "-"
            if not config.disableAvatars and item[1].has_key("shahash"):
                avatar = T.a(href=("/avatars/%s" % item[1]["shahash"]))[T.img(
                    border=0,
                    height=25,
                    src=("/avatars/%s" % item[1]["shahash"]))]
            nickname = "-"
            if item[1].has_key("nickname"):
                nickname = item[1]["nickname"]
            else:
                if self.pytrans.sessions.has_key(
                        username) and self.pytrans.sessions[username].ready:
                    c = self.pytrans.sessions[username].contactList.getContact(
                        "%s@%s" % (item[0], config.jid))
                    if c.nickname and c.nickname != "":
                        nickname = c.nickname
            status = "-"
            if self.pytrans.sessions.has_key(
                    username) and self.pytrans.sessions[username].ready:
                c = self.pytrans.sessions[username].contactList.getContact(
                    "%s@%s" % (item[0], config.jid))
                status = c.ptype
                if not status:
                    status = c.show
                    if not status:
                        status = "available"
            row = T.tr(height=25)[T.td(height=25, align="middle")[item[0]],
                                  T.td(height=25, align="middle")[nickname],
                                  T.td(height=25, align="middle")[network],
                                  T.td(height=25, align="middle")[avatar],
                                  T.td(height=25, align="middle")[status]]
            ret[row]
        return ret
예제 #10
0
파일: handler.py 프로젝트: 2mf/pyicqt
    def render_menu(self, ctx, data):
        request = inevow.IRequest(ctx)
        username = request.getUser()

        ret = tags.table(border=0, cellspacing=3, cellpadding=3)
        row = tags.tr(valign="middle")
        row[tags.td(_class="menuentry", width="150", align="center",
                    onclick="self.location='/account/'",
                    onmouseover="this.className='menuentrypressed';",
                    onmouseout="this.className='menuentry';")
            [tags.a(_class="menuentry", href="/account/")["Account"]]]

        if config.admins.count(username) > 0:
            row[tags.td(_class="menuentry", width="150", align="center",
                        onclick="self.location='/status/'",
                        onmouseover="this.className='menuentrypressed';",
                        onmouseout="this.className='menuentry';")
                [tags.a(_class="menuentry", href="/status/")["Status"]]]
            row[tags.td(_class="menuentry", width="150", align="center",
                        onclick="self.location='/config/'",
                        onmouseover="this.className='menuentrypressed';",
                        onmouseout="this.className='menuentry';")
                [tags.a(_class="menuentry", href="/config/")["Configuration"]]]
            row[tags.td(_class="menuentry", width="150", align="center",
                        onclick="self.location='/controls/'",
                        onmouseover="this.className='menuentrypressed';",
                        onmouseout="this.className='menuentry';")
                [tags.a(_class="menuentry", href="/controls/")["Controls"]]]

        return ret
예제 #11
0
 def render_channels_list(self):
     result = tags.table()
     result.children.append(
         tags.tr()[
             tags.th()['id'],
             tags.th()['subscribers'],
         ]
     )
     for clientId, c in channel.channels.items():
         result.children.append(
             tags.tr()[
                 tags.td()[c.id],
                 tags.td()[len(c.subscribers)],
             ]
         )
     return result
예제 #12
0
 def test_nestedpatterns(self):
     def data_table(context, data):  return [[1,2,3],[4,5,6]]
     def data_header(context, data):  return ['col1', 'col2', 'col3']
     tag = tags.html[
         tags.body[
             tags.table(data=data_table, render=rend.sequence)[
                 tags.tr(pattern='header', data=data_header, render=rend.sequence)[
                     tags.td(pattern='item')[str]
                 ],
                 tags.tr(pattern='item', render=rend.sequence)[
                     tags.td(pattern='item')[str]
                 ]
             ]
         ]
     ]
     self.assertEquals(self.render(tag), "<html><body><table><tr><td>col1</td><td>col2</td><td>col3</td></tr><tr><td>1</td><td>2</td><td>3</td></tr><tr><td>4</td><td>5</td><td>6</td></tr></table></body></html>")
예제 #13
0
 def render_content(self, ctx, data):
     if self.db[0] == "FIRSTRUN":
         return ctx.tag[tags.table(
             height="100%", width="100%"
         )[tags.tr(height="100%")[tags.td[tags.div(
             id="centerBox", valign="middle"
         )[tags.div(id="blockTop")
           [""],
           tags
           .div(id="centerBlock")[tags.h1(
               style="color:#fff;font-family:arial;"
           )["TUMS Installation Wizard"]],
           tags
           .div(id="menuBlock")[tags.div(
               style=
               "margin-top:-5em; text-align:left; font-family:arial; color:#786D38;"
           )[tags.h3["Welcome to the TUMS installation wizard."],
             """This wizard will guide you through an initial configuration of the host system.
                                     This should be carried out by a Thusa employee. If your server has arrived unconfigured it
                                     is recommended that you contact Thusa support for this to be carried out. 
                                     """, tags.br,
             """Click the NEXT button bellow to continue with the installation""",
             tags.br, tags.br,
             tags.a(href="Wizard/1/")[tags.img(
                 src='/images/next.png')]]]]]]]]
     return ctx.tag[tags.a(href="/auth/")["Login"]]
예제 #14
0
 def test_nestedpatterns(self):
     def data_table(context, data):  return [[1,2,3],[4,5,6]]
     def data_header(context, data):  return ['col1', 'col2', 'col3']
     tag = tags.html[
         tags.body[
             tags.table(data=data_table, render=rend.sequence)[
                 tags.tr(pattern='header', data=data_header, render=rend.sequence)[
                     tags.td(pattern='item')[str]
                 ],
                 tags.tr(pattern='item', render=rend.sequence)[
                     tags.td(pattern='item')[str]
                 ]
             ]
         ]
     ]
     self.assertEqual(self.render(tag), "<html><body><table><tr><td>col1</td><td>col2</td><td>col3</td></tr><tr><td>1</td><td>2</td><td>3</td></tr><tr><td>4</td><td>5</td><td>6</td></tr></table></body></html>")
예제 #15
0
 def formatHeader(self, columns: [str]) -> bytes:
     self.columns = columns
     tr = tags.tr()[
         [tags.th()[i] for i in self.columns]
     ]
     self.header.children.append(tr)
     return flat.flatten(tr)
예제 #16
0
파일: failure.py 프로젝트: schwabe/nevow
def varTable(usedVars):
    return t.table(_class="variables")[[
        t.tr(_class="varRow")[
            t.td(_class="varName")[ key ],
            t.td(_class="varValue")[ htmlrepr(value) ]
        ]
        for (key, value) in usedVars
    ]]
예제 #17
0
파일: failure.py 프로젝트: StetHD/nevow
def varTable(usedVars):
    return t.table(_class="variables")[[
        t.tr(_class="varRow")[
            t.td(_class="varName")[ key ],
            t.td(_class="varValue")[ htmlrepr(value) ]
        ]
        for (key, value) in usedVars
    ]]
예제 #18
0
class HeadCells(rend.Page, HeadCellsMixin):
	def __init__(self, serManager):
		self.serManager = serManager

	docFactory = loaders.stan(
		T.tr(data=T.directive("fielddefs"), render=rend.sequence) [
			T.th(pattern="item", render=T.directive("headCell"), 
				class_="thVertical")
		])
예제 #19
0
파일: test_rend.py 프로젝트: schwabe/nevow
        class R(rend.Page):
            def data_numbers(context, data):
                return [
                    ['one', 'un/une'],
                    ['two', 'deux'],
                    ['three', 'trois'],
                ]

            def render_row(context, data):
                context.fillSlots('english', data[0])
                context.fillSlots('french', data[1])
                return context.tag

            tags = table(data=data_numbers, render=directive('sequence'))[
                tr(pattern='header')[th['English'], th['French']],
                tr(pattern='item', render=render_row)[td[slot('english')],
                                                      td[slot('french')]], ]

            docFactory = loaders.stan(tags)
예제 #20
0
    def render_clients_list(self):
        result = tags.table()
        result.children.append(
            tags.tr()[
                tags.th()['id'],
                tags.th()['type'],
                tags.th()['created at'],


            ]
        )
        for clientId, c in client.clients.items():
            result.children.append(
                tags.tr()[
                    tags.td()[clientId],
                    tags.td()[c.typename],
                    tags.td()[c.createdAt.strftime("%A, %d. %B %Y %I:%M%p")],
                ]
            )
        return result
예제 #21
0
    def render_webconsole_environments(self):
        return [
            tags.h3()['Web console Environments'],
            tags.table()[
                tags.tr()[
                    tags.th()['Port'],
                    tags.td()[lumen.config['webport']],
                ],

            ],
        ]
예제 #22
0
def format_field_list(obj, singular, fields, plural=None):
    if plural is None:
        plural = singular + 's'
    if not fields:
        return ''
    if len(fields) > 1:
        label = plural
    else:
        label = singular
    rows = []
    first = True
    for field in fields:
        if first:
            row = tags.tr(class_="fieldStart")
            row[tags.td(class_="fieldName")[label]]
            first = False
        else:
            row = tags.tr()
            row[tags.td()]
        row[tags.td(colspan=2)[field.body]]
        rows.append(row)
    return rows
예제 #23
0
def format_field_list(obj, singular, fields, plural=None):
    if plural is None:
        plural = singular + 's'
    if not fields:
        return ''
    if len(fields) > 1:
        label = plural
    else:
        label = singular
    rows = []
    first = True
    for field in fields:
        if first:
            row = tags.tr(class_="fieldStart")
            row[tags.td(class_="fieldName")[label]]
            first=False
        else:
            row = tags.tr()
            row[tags.td()]
        row[tags.td(colspan=2)[field.body]]
        rows.append(row)
    return rows
예제 #24
0
파일: Log.py 프로젝트: calston/tums
    def render_content(self, ctx, seg):
        f = open(self.logfile)
        blob = f.read().split('\n')
        cnt = 1
        entries = []
        for l in blob[-1000:]:
            line = l.strip('\n')
            if line:
                #Jan  4 11:05:21 lilith imapd: Disconnected, ip=[::ffff:172.31.0.254], time=0
                parts = line.split()
                date = ' '.join(parts[:3])
                host = parts[3]
                service = parts[4].strip(':')
                message = ' '.join(parts[5:])
                if cnt % 2:
                    back = "#DDDDDD"
                else:
                    back = "#EEEEEE"
                if entries and service == entries[-1][1] and date == entries[
                        -1][0]:
                    entries[-1][2].extend([tags.br, message])
                else:
                    cnt += 1
                    entries.append([date, service, [message], back])
        count = int(self.cnt[1]) * -1
        pages = len(entries) / 20
        thisPage = int(count / -20)
        print pages, thisPage, count, count - 20
        pageSelect = []
        for i in range(pages):
            if i == thisPage:
                pageSelect.append(tags.strong[str(i + 1)])
            else:
                pageSelect.append(
                    tags.a(href=url.root.child("Logs").child(
                        self.logfile.replace('/', '%2B')).child(
                            str((i * 20) + 1)))[str(i + 1)])

            if i < (pages - 1):
                pageSelect.append(' | ')

        return ctx.tag[tags.h3["Select Log"],
                       tags.directive('form selectLog'),
                       tags.h3["Viewing %s" % (self.logfile, )], "[ ",
                       pageSelect, " ]", tags.br, tags.table[[
                           tags.tr(style="background: %s;" %
                                   i[3])[tags.td[i[0]], tags.td[i[1]],
                                         tags.td[i[2]], ]
                           for i in reversed(entries[count - 20:count])
                       ]]]
예제 #25
0
    def render_rooms(self, ctx, data):
        lines = []
        data.sort(key=attrgetter('tzid'))
        for room in data:
            empty = T.td(_class='empty')['']
            tzid = T.td(_class="tzid")[room.tzid, ':']
            editlink = T.td(_class="text")[T.a(href="/edit/%s" % room.tzid)[room.name]]
            name = T.td(_class="text")[room.name]
            shortline = T.td(_class="text")[room.short]
            longline = T.td(_class="text")[room.long]
            xs = room.exits()
            if not xs:
                rowcls = 'warn'
            else:
                rowcls = 'normal'
            lines.append(T.tr(_class=rowcls)[tzid, editlink])
            if room.short:
                lines.append(T.tr(_class=rowcls)[empty, shortline])
            if room.long:
                lines.append(T.tr(_class=rowcls)[empty, longline])
            if xs:
                for x in xs:
                    dest = x.destination
                    desttzid = getattr(dest, 'tzid', 'None')
                    destname = getattr(dest, 'name', None)
                    xlink = T.a(href="/edit/%s" % x.tzid)[x.name]

                    if dest is not None:
                        roomlink = T.a(href="/edit/%s" % desttzid)[destname]
                    else:
                        roomlink = 'Broken'
                    xd = T.td(_class="text2")[xlink, ' --> ', roomlink, ' (%s)' % desttzid]
                    lines.append(T.tr(_class=rowcls)[empty, xd])

            lines.append(T.tr(_class='normal')[empty, empty])

        return T.table[lines]
예제 #26
0
    def format(self):
        r = []

        ivs = []
        for iv in self.ivar_descs:
            attr = zopeinterface.Attribute(self.obj.system, iv.name, iv.body,
                                           self.obj)
            if iv.name is None or attr.isVisible:
                ivs.append(iv)
        self.ivar_descs = ivs

        cvs = []
        for cv in self.cvar_descs:
            attr = zopeinterface.Attribute(self.obj.system, cv.name, cv.body,
                                           self.obj)
            if attr.isVisible:
                cvs.append(cv)
        self.cvar_descs = cvs

        for d, l in (('Parameters', self.parameter_descs),
                     ('Instance Variables', self.ivar_descs),
                     ('Class Variables', self.cvar_descs), ('Variables',
                                                            self.var_descs)):
            r.append(format_desc_list(d, l, d))
        if self.return_desc:
            r.append(
                tags.tr(class_="fieldStart")[
                    tags.td(class_="fieldName")['Returns'],
                    tags.td(colspan="2")[self.return_desc.format()]])
        r.append(format_desc_list("Raises", self.raise_descs, "Raises"))
        for s, p, l in (('Author', 'Authors', self.authors),
                        ('See Also', 'See Also', self.seealsos),
                        ('Present Since', 'Present Since',
                         self.sinces), ('Note', 'Notes', self.notes)):
            r.append(format_field_list(self.obj, s, l, p))
        unknowns = {}
        unknownsinorder = []
        for fieldinfo in self.unknowns:
            tag = fieldinfo.kind
            if tag in unknowns:
                unknowns[tag].append(fieldinfo)
            else:
                unknowns[tag] = [fieldinfo]
                unknownsinorder.append(unknowns[tag])
        for fieldlist in unknownsinorder:
            label = "Unknown Field: " + fieldlist[0].kind
            r.append(format_desc_list(label, fieldlist, label))

        return tags.table(class_='fieldTable')[r]
예제 #27
0
    def render_index_rooms(self, ctx, data):
        lines = []
        data.sort(key=attrgetter('name'))
        for room in data:
            editlink = T.a(href="/edit/%s" % room.tzid)[room.name]
            tzid = T.td(_class="roomtzid")[room.tzid, ':']
            #name = T.td(_class="roomname")[room.name]
            name = T.td(_class="roomname")[editlink]
            if not room.exits():
                row = T.tr(_class='warn')
            else:
                row = T.tr
            lines.append(row[tzid, name])

        return T.table[lines]
예제 #28
0
	def makeDocFactory(self):
		return loaders.stan([
			T.div(render=T.directive("meta"), class_="warning")["_warning"],
			T.table(class_="keyvalue", render=rend.mapping,
					data=T.directive("firstrow")) [
				[[T.tr[
						T.th(data=colDef, render=T.directive("headCell"),
							class_="thHorizontal"),
						td],
					T.tr(class_="keyvaluedesc")[T.td(colspan=2)[
						colDef.description]]]
					for colDef, td in zip(self.serManager.table.tableDef.columns, 
						self.defaultTds)]],
			T.invisible(render=T.directive("footnotes")),
			])
예제 #29
0
    def format(self):
        r = []

        ivs = []
        for iv in self.ivar_descs:
            attr = zopeinterface.Attribute(
                self.obj.system, iv.name, iv.body, self.obj)
            if iv.name is None or attr.isVisible:
                ivs.append(iv)
        self.ivar_descs = ivs

        cvs = []
        for cv in self.cvar_descs:
            attr = zopeinterface.Attribute(
                self.obj.system, cv.name, cv.body, self.obj)
            if attr.isVisible:
                cvs.append(cv)
        self.cvar_descs = cvs

        for d, l in (('Parameters', self.parameter_descs),
                     ('Instance Variables', self.ivar_descs),
                     ('Class Variables', self.cvar_descs),
                     ('Variables', self.var_descs)):
            r.append(format_desc_list(d, l, d))
        if self.return_desc:
            r.append(tags.tr(class_="fieldStart")[tags.td(class_="fieldName")['Returns'],
                               tags.td(colspan="2")[self.return_desc.format()]])
        r.append(format_desc_list("Raises", self.raise_descs, "Raises"))
        for s, p, l in (('Author', 'Authors', self.authors),
                        ('See Also', 'See Also', self.seealsos),
                        ('Present Since', 'Present Since', self.sinces),
                        ('Note', 'Notes', self.notes)):
            r.append(format_field_list(self.obj, s, l, p))
        unknowns = {}
        unknownsinorder = []
        for fieldinfo in self.unknowns:
            tag = fieldinfo.kind
            if tag in unknowns:
                unknowns[tag].append(fieldinfo)
            else:
                unknowns[tag] = [fieldinfo]
                unknownsinorder.append(unknowns[tag])
        for fieldlist in unknownsinorder:
            label = "Unknown Field: " + fieldlist[0].kind
            r.append(format_desc_list(label, fieldlist, label))

        return tags.table(class_='fieldTable')[r]
예제 #30
0
파일: homepage.py 프로젝트: drewp/magma
    def render_transactions(self, ctx):
        coll = mongo['heist']['transactions']
        rows = reversed(list(coll.find(sort=[("readAt", -1)], limit=6)))
        now = datetime.datetime.now(tzlocal())

        def recentClass(d):
            if (now - d).total_seconds() < 86400 * 2:
                return {"class": "recent"}
            return {}

        return T.table(class_="transactions")[[
            T.tr(**recentClass(row['date']))[T.td(
                class_="date")[row['date'].date().isoformat()],
                                             T.td(class_="to")[row['payee']],
                                             T.td(class_="amt")[row['amount']]]
            for row in rows
        ]]
예제 #31
0
파일: homepage.py 프로젝트: drewp/magma
    def render_transactions(self, ctx):
        coll = mongo["heist"]["transactions"]
        rows = reversed(list(coll.find(sort=[("readAt", -1)], limit=6)))
        now = datetime.datetime.now(tzlocal())

        def recentClass(d):
            if (now - d).total_seconds() < 86400 * 2:
                return {"class": "recent"}
            return {}

        return T.table(class_="transactions")[
            [
                T.tr(**recentClass(row["date"]))[
                    T.td(class_="date")[row["date"].date().isoformat()],
                    T.td(class_="to")[row["payee"]],
                    T.td(class_="amt")[row["amount"]],
                ]
                for row in rows
            ]
        ]
예제 #32
0
    def render_menu(self, ctx, data):
        request = inevow.IRequest(ctx)
        username = request.getUser()

        ret = T.table(border=0, cellspacing=3, cellpadding=3)
        row = T.tr(valign="middle")
        row[T.td(_class="menuentry",
                 width="150",
                 align="center",
                 onclick="self.location='/account/'",
                 onmouseover="this.className='menuentrypressed';",
                 onmouseout="this.className='menuentry';")[T.a(
                     _class="menuentry", href="/account/")["Account"]]]

        if config.admins.count(username) > 0:
            row[T.td(_class="menuentry",
                     width="150",
                     align="center",
                     onclick="self.location='/status/'",
                     onmouseover="this.className='menuentrypressed';",
                     onmouseout="this.className='menuentry';")[T.a(
                         _class="menuentry", href="/status/")["Status"]]]
            row[T.td(_class="menuentry",
                     width="150",
                     align="center",
                     onclick="self.location='/config/'",
                     onmouseover="this.className='menuentrypressed';",
                     onmouseout="this.className='menuentry';")[T.a(
                         _class="menuentry",
                         href="/config/")["Configuration"]]]
            row[T.td(_class="menuentry",
                     width="150",
                     align="center",
                     onclick="self.location='/controls/'",
                     onmouseover="this.className='menuentrypressed';",
                     onmouseout="this.className='menuentry';")[T.a(
                         _class="menuentry", href="/controls/")["Controls"]]]

        ret[row]

        return ret
예제 #33
0
 def render_vlans(self, ctx, data):
     if not data:
         return ctx.tag["No VLAN information available for this host."]
     vlans = {}
     for row in data:
         if (row[0], row[1]) not in vlans:
             vlans[row[0], row[1]] = []
         vlans[row[0], row[1]].append(row[2])
     r = []
     i = 0
     vlans = list(vlans.iteritems())
     vlans.sort()
     for (vid, name), ports in vlans:
         r.append(T.tr(_class=(i%2) and "odd" or "even")[
                 T.td[T.span(data=vid, render=T.directive("vlan"))],
                 T.td[name],
                 T.td(render=T.directive("ports"),
                      data=ports)])
         i += 1
     return T.table(_class="vlan")[
         T.thead[T.td["VID"], T.td["Name"], T.td["Ports"]], r]
예제 #34
0
 def render_vlans(self, ctx, data):
     if not data:
         return ctx.tag["No VLAN information available for this host."]
     vlans = {}
     for row in data:
         if (row[0], row[1]) not in vlans:
             vlans[row[0], row[1]] = []
         vlans[row[0], row[1]].append(row[2])
     r = []
     i = 0
     vlans = list(vlans.iteritems())
     vlans.sort()
     for (vid, name), ports in vlans:
         r.append(
             T.tr(_class=(i % 2) and "odd" or "even")
             [T.td[T.span(data=vid, render=T.directive("vlan"))],
              T.td[name],
              T.td(render=T.directive("ports"), data=ports)])
         i += 1
     return T.table(_class="vlan")[T.thead[T.td["VID"], T.td["Name"],
                                           T.td["Ports"]], r]
예제 #35
0
class Tester(livepage.LivePage):
    addSlash = True
    child_css = static.File(util.resource_filename('nevow', 'livetest.css'))
    child_scripts = static.File(util.resource_filename('nevow', 'livetest.js'))
    child_postscripts = static.File(util.resource_filename('nevow', 'livetest-postscripts.js'))
    docFactory = loaders.stan(tags.html[
        tags.head[
            tags.script(src="scripts"),
            tags.link(rel="stylesheet", type="text/css", href="css")],
        tags.body[
            tags.table(id="testprogress")[
                tags.tr[
                    tags.th["Tests"], tags.th["Pass"], tags.th["Fail"]],
                tags.tr[
                    tags.td(id="test-status")["Running"],
                    tags.td(id="test-passes", _class="test-passes")[entities.nbsp],
                    tags.td(id="test-failures", _class="test-failures")[entities.nbsp]]],
            tags.table(id="testresults", render=tags.directive('sequence'))[
                tags.tr(pattern="item", render=tags.directive('test'))[
                    tags.td(title=tags.slot('action'))[tags.slot('action')],
                    tags.td(title=tags.slot('target'))[tags.slot('target')],
                    tags.td(title=tags.slot('parameter'))[tags.slot('parameter')]]],
            tags.iframe(id="testframe", src="asdf"),
            tags.script(src="postscripts"),
            livepage.glue]])

    def beforeRender(self, ctx):
        self.testId = 0

    def render_test(self, ctx, test):
        ctx.tag(id=("test-", self.testId))
        action, target, parameter = test
        ctx.fillSlots('action', action)
        ctx.fillSlots('target', str(target))
        ctx.fillSlots('parameter', str(parameter))
        self.testId += 1
        return ctx.tag

    def goingLive(self, ctx, handle):
        Driver(handle, self.original)
예제 #36
0
파일: edit.py 프로젝트: drewp/photo
    def render_table(self, ctx, data):
        if not ctx.arg('dir'):
            return []
        
        d = URIRef(ctx.arg('dir')) # "http://photo.bigasterisk.com/digicam/dl-2008-09-25")
        rows = []
        for i, (pic, filename) in enumerate(sorted(
            picsInDirectory(self.graph, d))[:]):
            img = T.img(src=[localSite(pic), '?size=thumb'],
                        onclick='javascript:photo.showLarge("%s")' %
                        (localSite(pic) + "?size=large"))

            picCols = [''] * self.brickColumns
            for fill in range(i, self.brickColumns):
                picCols[fill] = T.td
            picCols[i % self.brickColumns] = T.td(rowspan=self.brickColumns)[img]
            
            rows.append(T.tr(subj=pic)[
                T.td[T.a(href=localSite(pic))[filename]],
                picCols,
                ])

        return rows
예제 #37
0
 def rend_table(self,ctx,data):
     return tags.table[
         tags.tr[
             tags.th["hea'der1"], tags.th["hea'der2"]],
         tags.tr(id="ro'w1")[
             tags.td["va'l1"],tags.td["va'l2"]]]
예제 #38
0
파일: Routing.py 프로젝트: calston/tums
    def render_content(self, ctx, data):
        routes = []
        i = 0

        for iface, vals in self.sysconf.EthernetDevices.items():
            for ro in vals.get('routes', []):
                i += 1
                routes.append((ro[0], ro[1], iface,
                               tags.a(href="Delete/%s" %
                                      i)[tags.img(src="/images/ex.png")]))

        balances = []
        zones = []
        num = 0
        for bal in self.sysconf.ShorewallBalance:
            if "-" in bal[1]:
                gateway = ""  # Detect gateway
            else:
                gateway = bal[1]
            zones.append(bal[0])
            balances.append([
                bal[0], gateway, 'balance' in bal[2], 'track' in bal[2],
                'loose' in bal[2],
                tags.a(href="DeleteBalance/%s" %
                       num)[tags.img(src="/images/ex.png")]
            ])
            num += 1

        sourceroutes = []
        num = 0
        for src in self.sysconf.ShaperRules:
            rules = src.split()
            print rules, zones
            try:
                zone = zones[int(rules[0].split(':')[0]) -
                             1]  # Read the zone from the mark
            except:
                zone = "Mark " + rules[0].split(':')[0]

            source = rules[1]

            if rules[2] == "0.0.0.0/0":
                dest = "any"
            else:
                dest = rules[2]

            protocol = rules[3]

            port = rules[4]

            sourceroutes.append([
                zone, source, dest, protocol, port,
                tags.a(href="DeleteSource/%s" %
                       num)[tags.img(src="/images/ex.png")]
            ])
            num += 1

        return ctx.tag[
            tags.table(
                width="100%"
            )[tags.tr[tags.td(align="left")[tags.h3[tags.img(
                src="/images/netflow.png"), " IP Routing"]],
                      tags.td(
                          align='right'
                      )[tags.a(id="advBtn",
                               href="#",
                               onclick="setAdvanced('routing', true);"
                               )["Advanced"]]]],
            PageHelpers
            .TabSwitcher((
                ('Static Routes', 'panelStatic'),
                ('BGP', 'panelBGP'),
                ('RIP', 'panelRIP'),
                (
                    'Connections',
                    'panelBalance'),
                ('Policy Routing',
                 'panelSource'),
                ('Proxy ARP', 'panelParp'),
                ('Routing Table', 'panelTable'),
                #('IPv6 Tunnel', 'panelTunnel')
            )),
            tags.div(id="panelTable", _class="tabPane")[
                tags.h3["Routing Table"],
                tags.invisible(
                    render=tags
                    .directive('routingTable')
                )],
            tags.div(
                id="panelBalance", _class="tabPane"
            )[tags.h3["Load Balancing"],
              PageHelpers
              .dataTable([
                  'Zone', 'Gateway',
                  'Load Balance',
                  'Tracking', 'Soft Routes', ''
              ],
                         balances,
                         sortable
                         =True), tags.h3["Add Connection"],
              tags.directive('form balance'
                             )],
            tags.div(
                id="panelSource", _class="tabPane"
            )[tags.h3["Policy Routes"],
              PageHelpers
              .dataTable([
                  'Zone', 'Source',
                  'Destination',
                  'Protocol', 'Port/SubService', ''
              ],
                         sourceroutes,
                         sortable
                         =True), tags.h3["Add source route"],
              tags.directive('form source'
                             )],
            tags
            .div(id="panelStatic", _class="tabPane"
                 )[
                     tags
                     .h3["Static Routes"],
                     PageHelpers
                     .dataTable(['Destination', 'Gateway', 'Device', ''],
                                routes,
                                sortable=True), tags.h3["Add route"],
                     tags
                     .directive('form statroutes'
                                )],
            tags.div(id="panelParp", _class="tabPane")
            [tags.h3["Proxy ARP"], tags.
             p["Proxy ARP allows you to forward external IP addresses to internal machines as ",
               "if they were routable. This server will respond to ARP requests for all interfaces",
               "on all interfaces and those listed here. You should use this if your ISP allocates ",
               "you a subnet of IP addresses and you wish to make use of one on a machine in a DMZ",
               "or local LAN from this gateway. Use a DNAT block in the firewall if you wish to simply forward ports."],
             PageHelpers.dataTable(['IP', 'External', 'Internal', ''], [[
                 i[0], i[2], i[1],
                 tags.a(href="Delparp/%s/" %
                        i[0])[tags.img(src="/images/ex.png")]
             ] for i in self.sysconf.Shorewall.get('proxyarp', {})],
                                   sortable=True), tags.h3["Add Proxy ARP"],
             tags.directive('form parp')],
            tags.div(id="panelRIP", _class="tabPane")[
                tags.h3["RIP"], tags.strong["Interfaces"],
                self.ripInterface.applyTable(self), tags.strong["Networks"],
                self.ripPrefix.applyTable(self)],
            tags.div(id="panelBGP", _class="tabPane")[[[
                tags.h3["AS ", asn],
                tags.a(href="Delas/%s/%s" %
                       (asn, i))[tags.img(src="/images/ex.png"),
                                 " Delete Router AS ", asn], tags.br, tags.br,
                tags.table(valign="top")[
                    tags.tr(valign="top")[tags.td["ID: "],
                                          tags.td[det['router-id']]],
                    tags.tr(valign="top")[tags.td["Neighbors: "], tags.td[
                        PageHelpers.dataTable(
                            ['Remote', 'AS', 'Multi-hop', 'Next-Hop', ''], [[
                                i,
                                negh.get('as', asn),
                                negh.get('multihop', False) and 'Yes' or 'No',
                                negh.get('nexthop', False) or 'Peer',
                                tags.a(href="Delneigh/%s/%s" %
                                       (asn, i))[tags.img(
                                           src="/images/ex.png")]
                            ] for i, negh in det.get('neighbors', {}).items()],
                            sortable=True),
                        tags.a(href="AddNeigh/%s/" % asn)["Add Neighbor"],
                        tags.br, ]],
                    tags.tr(valign="top")[tags.td["Networks: "], tags.td[
                        PageHelpers.dataTable(['Netmask', ''], [[
                            i,
                            tags.a(href="Delnet/%s/%s" %
                                   (asn, i.replace('/', '+')))[tags.img(
                                       src="/images/ex.png")],
                        ] for i in det.get('networks', [])],
                                              sortable=True),
                        tags.a(href="AddNet/%s/" % asn)["Add Network"]]]]
            ] for asn, det in self.sysconf.BGP.items()], tags.h3["Add AS"],
                                                      tags.directive('form bgp'
                                                                     )],
            #tags.div(id="panelTunnel", _class="tabPane")[
            #    tags.h3["Configure IPv6 Tunnel"],
            #    tags.directive('form tunnelConf')
            #],
            PageHelpers.LoadTabSwitcher(), ]
예제 #39
0
    def render_content(self, ctx, seg):
        if self.logfile in self.vlogs:
            # Get file size
            sz = os.stat(self.logfile).st_size
            f = open(self.logfile)
            # Don't read more than 1MB
            if sz > 1024000:
                # Seek to 1MB quick
                f.seek(sz - 1024000)
                # Throw this line away. 
                _ = f.readline()
        else:
            return ctx.tag["Invalid log"]

        cnt = 1
        entries = []
        for l in f:
            line = l.strip('\n')

            if line and 'exim4' in self.logfile:
                parts = line.split()
                date = ' '.join(parts[:2])
                mid = parts[2]
                message = ' '.join(parts[2:])
                if cnt%2:
                    back = "#DDDDDD"
                else:
                    back = "#EEEEEE"
                if entries and 'mailsvr'==entries[-1][1] and date==entries[-1][0]:
                    # Merge items
                    entries[-1][2].extend([tags.br, message])
                else:
                    cnt+=1
                    entries.append([date, 'mailsvr', [message], back])

            elif line:
                if 'tums-audit' in self.logfile:
                    parts = line.split()
                    date = ' '.join(parts[:4])
                    host = ""
                    service = parts[4]
                    message = ' '.join(parts[5:])
                else:
                    parts = line.split()
                    date = ' '.join(parts[:3])
                    host = parts[3]
                    service = parts[4].strip(':')
                    message = ' '.join(parts[5:])

                if cnt%2:
                    back = "#DDDDDD"
                else:
                    back = "#EEEEEE"

                if entries and service==entries[-1][1] and date==entries[-1][0]:
                    # Merge line items
                    entries[-1][2].extend([tags.br, message])
                else:
                    cnt+=1
                    entries.append([date, service, [message], back])

        # Filter the log
        if self.cnt[2]:
            oldEntries = entries
            entries = []
            for i in oldEntries:
                skip = False
                
                messages = i[2]
                msg = ''.join(messages)
                    
                if "--" == self.cnt[2][:2]:
                    if self.cnt[2][2:] in msg:
                        # Filter line found
                        skip = True
                else:
                    if not (self.cnt[2] in msg):
                        # Filter line not found
                        skip = True

                if not skip:
                    entries.append(i)
                else:
                    pass
                    #print messages, "SKIPPED"
 
        # Paginate the returned log.
        count = int(self.cnt[1])*-1
        pages = len(entries)/20
        thisPage = int(count/-20)
        pageSelect = []
        for i in range(pages):
            if i == thisPage:
                pageSelect.append(tags.strong[str(i+1)])
            else:
                if self.cnt[2]:
                    childLink = url.root.child("Logs").child(self.logfile.replace('/', '+')).child(str((i*20)+1)).child(self.cnt[2])
                else:
                    childLink = url.root.child("Logs").child(self.logfile.replace('/', '+')).child(str((i*20)+1))
                    
                pageSelect.append(
                    tags.a(
                        href=childLink
                    )[str(i+1)]
                )
            
            if i < (pages-1):
                pageSelect.append(' | ')

        return ctx.tag[
                tags.h3["Select Log"],
                tags.directive('form selectLog'),
                tags.h3["Viewing %s"%(self.logfile,)],
                "[ ", pageSelect, " ]", tags.br,
                tags.table[
                    [ 
                        tags.tr(style="background: %s;" % i[3])[
                            tags.td[i[0]],
                            tags.td[i[1]],
                            tags.td[i[2]],
                        ]
                    for i in reversed(entries[count-20:count])]
                ], 
                tags.br, 
                tags.h3["Apply filter"], 
                tags.directive('form filterLog')
        ]
예제 #40
0
class Page(Reports.Page):
    docFactory = loaders.xmlfile('overview.xml',
                                 templateDir=Settings.BaseDir + '/templates')

    def roundedBlock(self, title, content):
        return tags.div(_class="roundedBlock")[tags.img(
            src="/images/network-small.png"), tags.h1[title],
                                               tags.div[content]]

    def yearGraph(self, iface, stat):
        # This guy generates an image tag which makes a pyCha

        inset = []
        outset = []
        lables = []

        tmax = max([i[1] for i in stat])
        tmaxo = max([i[0] for i in stat])
        if tmaxo > tmax:
            tmax = tmaxo

        if tmax > 1000:
            off = 1000
            cstart = "/chart?type=line&width=500&height=200&ylab=Data+volume+(GBytes)&legright=y"
        else:
            off = 1
            cstart = "/chart?type=line&width=500&height=200&ylab=Data+volume+(MBytes)&legright=y"

        for data in stat:
            inset.append(data[0] / off)
            outset.append(data[1] / off)
            lables.append('%.2d %s' % (data[3], data[2]))

        cstart += "&set=In&data=%s" % ('+'.join([str(i) for i in inset]))
        cstart += "&set=Out&data=%s" % ('+'.join([str(i) for i in outset]))

        for lable in lables:
            cstart += "&lables=%s" % lable

        return tags.img(src=cstart)

    def getStats(self):
        # Get rolling monthly stats for 12 months on each interface
        interfaces = Utils.getInterfaces()
        stat = {}
        da = datetime.datetime.now()

        year = da.year

        stats = os.listdir('/usr/local/tcs/tums/rrd/')

        for n in stats:
            if not ((str(year) in n) or (str(year - 1) in n)):
                # Ditch superflous years without hesitation
                continue

            if not 'total' in n:
                continue

            if n[-4:] != ".nid":
                continue
            # Figure out interface
            iface = n.split('_')[1]
            date = n.split('_')[2].replace('total.nid', '')
            segYear = int(date[-4:])

            date = time.localtime(
                os.stat('/usr/local/tcs/tums/rrd/%s' % n).st_mtime)

            if segYear == date[0]:
                # Probably ok
                segMonth = date[1]
            else:
                # Someone has messed with the time stamp on the file :(
                sm = date[-6:-4]
                if int(sm) > 12:
                    segMonth = int(sm[1])
                else:
                    segMonth = int(sm)

            # Grab the contents...
            l = open('/usr/local/tcs/tums/rrd/%s' % n)
            try:
                iin, iout = [
                    int(float(i) / 1000000)
                    for i in l.read().strip('\n').strip().split(':')
                ]
            except:
                inn, iout = (0, 0)

            if iface not in stat:
                stat[iface] = {}

            stamp = "%s%.2d" % (segYear, segMonth)
            if stamp in stat[iface]:
                stat[iface][stamp][0] += iin
                stat[iface][stamp][1] += iout
            else:
                stat[iface][stamp] = [iin, iout, segYear, segMonth]
        newstat = {}
        for iface, detail in stat.items():
            dlist = detail.keys()
            dlist.sort()
            # Pick the most recent 12
            ourlist = dlist[-12:]
            newstat[iface] = []

            # Reconstruct an ordered set for each interface instead of an unordered dictionary
            for n in ourlist:
                newstat[iface].append(detail[n])

        return newstat

    def render_content(self, ctx, seg):
        interfaces = Utils.getInterfaces()
        stat = {}
        da = datetime.datetime.now()
        month = "%s%s" % (da.month, da.year)

        lastmonth = "%s%s" % (
            (da.month - 1) or 12,  # 12th month if current month is 1
            (da.month - 1) and da.year
            or da.year - 1  # Previous year if current month is 1
        )
        today = "%s%s%s" % (da.day, da.month, da.year)
        for i in interfaces:
            if not 'tap' in i and not 'eth' in i and not 'ppp' in i:
                continue
            stat[i] = {'24': [0, 0], 'month': [0, 0], 'lastmonth': [0, 0]}
            # Read the traffic counters
            try:
                p = open('/usr/local/tcs/tums/rrd/iface_%s_%stotal.nid' %
                         (i, today)).read().split(':')
                stat[i]['24'] = (float(p[0]), float(p[1]))  # Last 24 Hours
                # Try figure out the whole day

                for fi in os.listdir('/usr/local/tcs/tums/rrd/'):

                    if 'iface_%s' % i in fi and "%stotal.nid" % month in fi:
                        p = open('/usr/local/tcs/tums/rrd/' +
                                 fi).read().split(':')
                        for j in xrange(2):
                            stat[i]['month'][j] += float(p[j])

                    if 'iface_%s' % i in fi and "%stotal.nid" % lastmonth in fi:
                        p = open('/usr/local/tcs/tums/rrd/' +
                                 fi).read().split(':')
                        for j in xrange(2):
                            stat[i]['lastmonth'][j] += float(p[j])

            except Exception, e:
                stat[i]['24'] = (0, 0)
                stat[i]['month'] = (0, 0)

        yearStats = self.getStats()

        return ctx.tag[
            tags.h3[tags.img(src="/images/system.png"),
                    " Interface Statistics"],
            tags.table(width="95%")[[
                tags.tr[[
                    tags.td[self.roundedBlock(j, [
                        tags.img(src="/images/graphs/iface-%sFS.png" %
                                 j), tags.h3["Traffic"],
                        self.yearGraph(j, yearStats[j]),
                        tags.table(cellpadding=5)[tags.tr(valign="top")[
                            tags.td[tags.strong["Today: "]],
                            tags.td[tags.table(cellspacing=0, cellpadding=0)[
                                tags.tr[tags.td["Out: "], tags.
                                        td[Utils.intToH(stat[j]['24'][1])], ],
                                tags.tr[tags.td["In: "], tags.
                                        td[Utils.intToH(stat[j]['24'][0])]]]]],
                                                  tags.tr(
                                                      valign="top"
                                                  )[tags.
                                                    td[tags.
                                                       strong["This Month: "]],
                                                    tags.td[tags.table(
                                                        cellspacing=0,
                                                        cellpadding=0
                                                    )[tags.tr[
                                                        tags.td["Out: "],
                                                        tags.td[Utils.intToH(
                                                            stat[j]['month'][1]
                                                        )], ], tags.
                                                      tr[tags.td["In: "],
                                                         tags.td[Utils.intToH(
                                                             stat[j]['month'][0]
                                                         )]]]]],
                                                  tags.tr(
                                                      valign="top"
                                                  )[tags.td[tags.strong[
                                                      "Previous Month: "]],
                                                    tags.td[tags.table(
                                                        cellspacing=0,
                                                        cellpadding=0
                                                    )[tags.tr[
                                                        tags.td["Out: "], tags.
                                                        td[Utils.intToH(stat[
                                                            j]['lastmonth'][1]
                                                                        )], ],
                                                      tags.
                                                      tr[tags.td["In: "], tags.
                                                         td[Utils.intToH(stat[
                                                             j]['lastmonth'][0]
                                                                         )]]]]],
                                                  ]
                    ])] for j in i if j
                ]] for i in WebUtils.runIter(1, stat.keys())
            ]]]
예제 #41
0
 def formatRow(self, row: IReportData) -> bytes:
     tr = tags.tr()[
         [tags.td()[row[i]] for i in self.columns]
     ]
     self.body.children.append(tr)
     return flat.flatten(tr)
예제 #42
0
파일: grid.py 프로젝트: jean-edouard/bvt
def testXbuild_grid(argsdict, request=None):
    start_time = clock()
    one_week = 60 * 60 * 24 * 7
    one_week_ago = start_time - one_week

    max_results = (int(argsdict['max_results']) if
                   ('max_results' in argsdict
                    and argsdict['max_results'] != '') else 128)
    if max_results < 1:
        print 'Max results must be at least 1'
        sys.exit(1)

    countdown = max_results

    test_cases = (None if
                  ('test_cases' not in argsdict or argsdict['test_cases']
                   == None or argsdict['test_cases'] == '') else
                  (compile(argsdict['test_cases']) if
                   ('case' in argsdict and argsdict['case']) else compile(
                       argsdict['test_cases'], IGNORECASE)))

    exclude_cases = (None if ('exclude_cases' not in argsdict
                              or argsdict['exclude_cases'] == None
                              or argsdict['exclude_cases'] == '') else
                     (compile(argsdict['exclude_cases']) if
                      ('case' in argsdict and argsdict['case']) else compile(
                          argsdict['exclude_cases'], IGNORECASE)))

    results_by_build = {}
    results = []
    tests = set()
    build_ids = []

    mongo = src.bvtlib.mongodb.get_autotest()
    branch = argsdict['branch'] if 'branch' in argsdict else 'master'
    builds_query = {'branch': branch}

    force = 'force' in argsdict and argsdict['force']
    sort_columns = argsdict[
        'sort_columns'] if 'sort_columns' in argsdict else 'alphabetic'

    total_fails_by_test = {}
    total_passes_by_test = {}
    day_results = {}
    latest_year = None
    latest_yday = None
    day_fails = 0
    day_passes = 0

    for build in mongo.builds.find(builds_query).sort([('tag_time', DESCENDING)
                                                       ]):
        build_id = build['_id']
        build_time = (build['tag_time'] if 'tag_time' in build else
                      (['timestamp'] if 'timestamp' in build else None))
        successes_for_build = {}
        failures_for_build = {}
        results_query = {'build': build_id}
        interesting = False
        for result in mongo.results.find(results_query):
            if 'infrastructure_problem' not in result or result[
                    'infrastructure_problem'] == False:
                if 'test_case' in result:
                    test_case = result['test_case']
                    if (test_case != None and
                        (test_cases == None or test_cases.search(test_case))
                            and (exclude_cases == None
                                 or not exclude_cases.search(test_case))
                            and (force or 'experiments.py' not in test_case)):
                        if 'failure' in result and result['failure'] != '':
                            result_details = result['failure']
                            interesting = True
                            if test_case in failures_for_build:
                                failures_for_build[test_case].append(
                                    result_details)
                            else:
                                failures_for_build[test_case] = [
                                    result_details
                                ]
                            if test_case in total_fails_by_test:
                                total_fails_by_test[test_case] += 1
                            else:
                                total_fails_by_test[test_case] = 1
                            day_fails += 1
                        else:
                            if 'end_time' in result:
                                interesting = True
                                if test_case in successes_for_build:
                                    successes_for_build[test_case].append(
                                        result)
                                else:
                                    successes_for_build[test_case] = [result]
                                if test_case in total_passes_by_test:
                                    total_passes_by_test[test_case] += 1
                                else:
                                    total_passes_by_test[test_case] = 1
                                day_passes += 1
        if interesting:
            results_for_build = (build_time, successes_for_build,
                                 failures_for_build)
            gmt = gmtime(float(build_time))
            if ((gmt.tm_year != latest_year) or (gmt.tm_yday != latest_yday)):
                latest_year = gmt.tm_year
                latest_yday = gmt.tm_yday
                date_text = strftime('%Y-%m-%d', gmt)
                day_results[date_text] = (': ' + repr(day_passes) +
                                          ' passed, ' + repr(day_fails) +
                                          ' failed')
                day_fails = 0
                day_passes = 0
            results.append(results_for_build)
            results_by_build[build_id] = results_for_build
            build_ids.append(build_id)
            countdown -= 1
            if countdown == 0:
                break
        tests.update(failures_for_build.keys())
        tests.update(successes_for_build)
        if countdown == 0:
            break

    # convert from set to list
    test_names = [test for test in tests]

    if sort_columns == 'ratio':
        sort_text = 'Columns are sorted by decreasing ratio of fails.'
        ratios = {}
        for test in test_names:
            passes = total_passes_by_test[
                test] if test in total_passes_by_test else 0
            fails = total_fails_by_test[
                test] if test in total_fails_by_test else 0
            ratios[test] = -1 if (passes == 0
                                  and fails == 0) else fails / (passes + fails)
        test_names = [
            name for name, count in sorted(
                ratios.iteritems(), key=itemgetter(1), reverse=True)
        ]
    elif sort_columns == 'frequency':
        sort_text = 'Columns are sorted by decreasing number of fails.'
        frequencies = {}
        for test in test_names:
            frequencies[test] = total_fails_by_test[
                test] if test in total_fails_by_test else 0
        test_names = [
            name for name, count in sorted(
                frequencies.iteritems(), key=itemgetter(1), reverse=True)
        ]
    elif sort_columns == 'alphabetic':
        sort_text = 'Columns are sorted alphabetically by test case description.'
        test_names.sort()
    else:
        sort_text = 'Columns are not sorted, as an unknown sort type "' + repr(
            sort_columns) + '" was specified.'

    column_number = 1
    column_numbers = {}
    column_names = [th['Test case']]
    column_keys = []
    test_labels = {}

    for test_name in test_names:
        test_label = test_name.replace(' ', '_')
        column_numbers[test_name] = column_number
        column_heading = th[a(href="#" + test_label,
                              title=test_name)[repr(column_number)]]
        column_names.append(column_heading)
        column_keys.append(li[a(name=test_label)[a(
            href="http://autotest/results?reverse=1&test_case=" +
            test_name)[test_name]]])
        test_labels[test_name] = test_label
        column_number += 1

    rows = [column_names]

    latest_year = None
    latest_yday = None
    column_count = 1 + len(column_names)
    build_number_pattern = compile('.+-([0-9]+)-.+')

    day_heading_style = {'colspan': column_count, 'class': 'day_heading'}
    for build_id in build_ids:
        (build_time, successes, failures) = results_by_build[build_id]
        try:
            build_number_match = build_number_pattern.match(build_id)
            build_number_string = build_number_match.group(
                1) if build_number_match else build_id
            gmt = gmtime(float(build_time))
            if ((gmt.tm_year != latest_year) or (gmt.tm_yday != latest_yday)):
                latest_year = gmt.tm_year
                latest_yday = gmt.tm_yday
                raw_date_text = strftime('%Y-%m-%d', gmt)
                date_text = raw_date_text
                if float(build_time) >= one_week_ago:
                    date_text += strftime(' (%A)', gmt)
                if day_results[raw_date_text] != None:
                    date_text += day_results[raw_date_text]
                rows.append([tr[th(**day_heading_style)[date_text]]])
            cells = [
                th(title=(build_id + '\n' +
                          asctime(gmt)))[a(href="http://autotest/build/" +
                                           build_id)[build_number_string],
                                         br(),
                                         strftime('%H:%M:%S', gmt)]
            ]
        except TypeError:
            gmt = None
            cells = [th[a(href="http://autotest/build/" + build_id)[build_id]]]
        for test in test_names:
            success_count = len(successes[test]) if test in successes else 0
            this_test_failures = failures[test] if test in failures else None
            fail_count = len(
                this_test_failures) if this_test_failures != None else 0
            some_passed = success_count > 0
            some_failed = fail_count > 0
            no_results = not (some_passed or some_failed)

            if proportionate_colour:
                colour = white if no_results else rgb_string(
                    fail_count, success_count, 0, intensity=0.5)
            else:
                several_failed = fail_count > 1
                colour = (amber if some_passed and some_failed else
                          (white if no_results else
                           ((green if success_count > 1 else pale_green
                             ) if not some_failed else
                            (red if several_failed else pale_red))))

            cell_hover_text = test + ': ' + repr(success_count) + (
                ' pass' if success_count == 1 else ' passes')
            if some_failed:
                # collect up identical error messages so we can just give a count instead of repeating them
                fail_detail_counts = {}
                for x in this_test_failures:
                    fail_detail_counts[x] = fail_detail_counts[
                        x] + 1 if x in fail_detail_counts else 1

                details = [
                    repr(count) + ": " +
                    # display commonest error messages first
                    message for message, count in sorted(
                        fail_detail_counts.iteritems(),
                        key=itemgetter(1),
                        reverse=True) if message != None
                ]

                cell_hover_text = cell_hover_text + '\nFailures:\n' + (
                    '\n'.join(details))
            cell_text = [
                div(align='left')[repr(success_count)],
                div(align='right')[repr(fail_count)]
            ]
            if some_passed or some_failed:
                cells.append(
                    td(bgcolor=colour)[a(href="results?build=" + build_id +
                                         "&test_case=" + test,
                                         title=cell_hover_text)[cell_text]])
            else:
                cells.append(td[' '])
        rows.append([tr[cells]])

    passes_row = [th['Passes']]
    fails_row = [th['Fails']]

    for test_name in test_names:
        pass_count = total_passes_by_test[
            test_name] if test_name in total_passes_by_test else 0
        fail_count = total_fails_by_test[
            test_name] if test_name in total_fails_by_test else 0
        total = pass_count + fail_count
        colour_string = 'white' if total == 0 else rgb_string(
            fail_count, pass_count, 0, intensity=0.5)
        passes_row.append(td(bgcolor=colour_string)[repr(pass_count)])
        fails_row.append(td(bgcolor=colour_string)[repr(fail_count)])

    rows.insert(1, tr[fails_row])
    rows.insert(1, tr[passes_row])

    column_key = [ol[column_keys]]
    table_grid = [
        table(border='true',
              style="border-collapse: collapse",
              align="center",
              width="96%")[rows]
    ]

    title_text = 'BVT results grid for ' + branch

    if ('test_cases' in argsdict and argsdict['test_cases'] != None
            and argsdict['test_cases'] != ''):
        title_text += ' matching "' + argsdict['test_cases'] + '"'
    if ('exclude_cases' in argsdict and argsdict['exclude_cases'] != None
            and argsdict['exclude_cases'] != ''):
        title_text += ' excluding "' + argsdict['exclude_cases'] + '"'

    if request != None:
        requery_form = [
            table(
                align="center", width="96%", bgcolor="#f0f0f0"
            )[tr()
              [td()['Branch: ',
                    stan_input(name='branch', value=branch)['']],
               td(
               )['Test cases: ',
                 stan_input(name='test_cases',
                            value=(
                                argsdict['test_cases'] if 'test_cases' in
                                argsdict else ''))[''], " ",
                 'Excluded cases: ',
                 stan_input(name='exclude_cases',
                            value=(
                                argsdict['exclude_cases'] if 'exclude_cases' in
                                argsdict else ''))[''], " ",
                 'Case-significant search',
                 stan_input(type='checkbox', name='case')['']],
               td()['Include malformed results:',
                    stan_input(type='checkbox', name='force')['']]],
              tr()[td()['Columns sort order: ',
                        stan_input(type='radio',
                                   name='sort_columns',
                                   value='alphabetic',
                                   **({
                                       'checked': 1
                                   } if sort_columns == 'alphabetic' else {}
                                      ))['alphabetic'], " ",
                        stan_input(type='radio',
                                   name='sort_columns',
                                   value='frequency',
                                   **({
                                       'checked': 1
                                   } if sort_columns == 'frequency' else {}
                                      ))['frequency'], " ",
                        stan_input(type='radio',
                                   name='sort_columns',
                                   value='ratio',
                                   **({
                                       'checked': 1
                                   } if sort_columns == 'ratio' else {}
                                      ))['ratio']],
                   td()['Max results:',
                        stan_input(name='max_results', value=max_results)['']],
                   td()[stan_input(type='submit')]]]
        ]
    else:
        requery_form = None

    page_contents = [title[title_text], h1[title_text]]
    page_contents += [
        p[key_text], p[sort_text], table_grid, h2['column key'], p[sort_text],
        column_key
    ]

    if not proportionate_colour:
        page_contents += [h2['cell key'], key_table]

    page_contents += [hr(), div(align='right')['produced at ', asctime()]]

    return str(nevow.flat.flatten(page_contents)), str(
        nevow.flat.flatten(requery_form))
예제 #43
0
    def render_events(self, ctx, data):
        if not self.download_status.storage_index:
            return
        srt = self.short_relative_time
        l = T.ul()

        t = T.table(class_="status-download-events")
        t[T.tr[T.td["serverid"], T.td["sent"], T.td["received"],
               T.td["shnums"], T.td["RTT"]]]
        dyhb_events = []
        for serverid,requests in self.download_status.dyhb_requests.iteritems():
            for req in requests:
                dyhb_events.append( (serverid,) + req )
        dyhb_events.sort(key=lambda req: req[1])
        for d_ev in dyhb_events:
            (serverid, sent, shnums, received) = d_ev
            serverid_s = idlib.shortnodeid_b2a(serverid)
            rtt = None
            if received is not None:
                rtt = received - sent
            if not shnums:
                shnums = []
            t[T.tr(style="background: %s" % self.color(serverid))[
                [T.td[serverid_s], T.td[srt(sent)], T.td[srt(received)],
                 T.td[",".join([str(shnum) for shnum in shnums])],
                 T.td[self.render_time(None, rtt)],
                 ]]]
        l["DYHB Requests:", t]

        t = T.table(class_="status-download-events")
        t[T.tr[T.td["range"], T.td["start"], T.td["finish"], T.td["got"],
               T.td["time"], T.td["decrypttime"], T.td["pausedtime"],
               T.td["speed"]]]
        for r_ev in self.download_status.read_events:
            (start, length, requesttime, finishtime, bytes, decrypt, paused) = r_ev
            if finishtime is not None:
                rtt = finishtime - requesttime - paused
                speed = self.render_rate(None, compute_rate(bytes, rtt))
                rtt = self.render_time(None, rtt)
                decrypt = self.render_time(None, decrypt)
                paused = self.render_time(None, paused)
            else:
                speed, rtt, decrypt, paused = "","","",""
            t[T.tr[T.td["[%d:+%d]" % (start, length)],
                   T.td[srt(requesttime)], T.td[srt(finishtime)],
                   T.td[bytes], T.td[rtt], T.td[decrypt], T.td[paused],
                   T.td[speed],
                   ]]
        l["Read Events:", t]

        t = T.table(class_="status-download-events")
        t[T.tr[T.td["type"], T.td["segnum"], T.td["when"], T.td["range"],
               T.td["decodetime"], T.td["segtime"], T.td["speed"]]]
        reqtime = (None, None)
        for s_ev in self.download_status.segment_events:
            (etype, segnum, when, segstart, seglen, decodetime) = s_ev
            if etype == "request":
                t[T.tr[T.td["request"], T.td["seg%d" % segnum],
                       T.td[srt(when)]]]
                reqtime = (segnum, when)
            elif etype == "delivery":
                if reqtime[0] == segnum:
                    segtime = when - reqtime[1]
                    speed = self.render_rate(None, compute_rate(seglen, segtime))
                    segtime = self.render_time(None, segtime)
                else:
                    segtime, speed = "", ""
                t[T.tr[T.td["delivery"], T.td["seg%d" % segnum],
                       T.td[srt(when)],
                       T.td["[%d:+%d]" % (segstart, seglen)],
                       T.td[self.render_time(None,decodetime)],
                       T.td[segtime], T.td[speed]]]
            elif etype == "error":
                t[T.tr[T.td["error"], T.td["seg%d" % segnum]]]
        l["Segment Events:", t]

        t = T.table(border="1")
        t[T.tr[T.td["serverid"], T.td["shnum"], T.td["range"],
               T.td["txtime"], T.td["rxtime"], T.td["received"], T.td["RTT"]]]
        reqtime = (None, None)
        request_events = []
        for serverid,requests in self.download_status.requests.iteritems():
            for req in requests:
                request_events.append( (serverid,) + req )
        request_events.sort(key=lambda req: (req[4],req[1]))
        for r_ev in request_events:
            (peerid, shnum, start, length, sent, receivedlen, received) = r_ev
            rtt = None
            if received is not None:
                rtt = received - sent
            peerid_s = idlib.shortnodeid_b2a(peerid)
            t[T.tr(style="background: %s" % self.color(peerid))[
                T.td[peerid_s], T.td[shnum],
                T.td["[%d:+%d]" % (start, length)],
                T.td[srt(sent)], T.td[srt(received)], T.td[receivedlen],
                T.td[self.render_time(None, rtt)],
                ]]
        l["Requests:", t]

        return l
예제 #44
0
    def render_events(self, ctx, data):
        if not self.download_status.storage_index:
            return
        srt = self.short_relative_time
        l = T.div()

        t = T.table(align="left", class_="status-download-events")
        t[T.tr[T.th["serverid"], T.th["sent"], T.th["received"],
               T.th["shnums"], T.th["RTT"]]]
        for d_ev in self.download_status.dyhb_requests:
            server = d_ev["server"]
            sent = d_ev["start_time"]
            shnums = d_ev["response_shnums"]
            received = d_ev["finish_time"]
            rtt = None
            if received is not None:
                rtt = received - sent
            if not shnums:
                shnums = ["-"]
            t[T.tr(style="background: %s" % self.color(server))[
                [T.td[server.get_name()], T.td[srt(sent)], T.td[srt(received)],
                 T.td[",".join([str(shnum) for shnum in shnums])],
                 T.td[self.render_time(None, rtt)],
                 ]]]

        l[T.h2["DYHB Requests:"], t]
        l[T.br(clear="all")]

        t = T.table(align="left",class_="status-download-events")
        t[T.tr[T.th["range"], T.th["start"], T.th["finish"], T.th["got"],
               T.th["time"], T.th["decrypttime"], T.th["pausedtime"],
               T.th["speed"]]]
        for r_ev in self.download_status.read_events:
            start = r_ev["start"]
            length = r_ev["length"]
            bytes = r_ev["bytes_returned"]
            decrypt_time = ""
            if bytes:
                decrypt_time = self._rate_and_time(bytes, r_ev["decrypt_time"])
            speed, rtt = "",""
            if r_ev["finish_time"] is not None:
                rtt = r_ev["finish_time"] - r_ev["start_time"] - r_ev["paused_time"]
                speed = self.render_rate(None, compute_rate(bytes, rtt))
                rtt = self.render_time(None, rtt)
            paused = self.render_time(None, r_ev["paused_time"])

            t[T.tr[T.td["[%d:+%d]" % (start, length)],
                   T.td[srt(r_ev["start_time"])], T.td[srt(r_ev["finish_time"])],
                   T.td[bytes], T.td[rtt],
                   T.td[decrypt_time], T.td[paused],
                   T.td[speed],
                   ]]

        l[T.h2["Read Events:"], t]
        l[T.br(clear="all")]

        t = T.table(align="left",class_="status-download-events")
        t[T.tr[T.th["segnum"], T.th["start"], T.th["active"], T.th["finish"],
               T.th["range"],
               T.th["decodetime"], T.th["segtime"], T.th["speed"]]]
        for s_ev in self.download_status.segment_events:
            range_s = "-"
            segtime_s = "-"
            speed = "-"
            decode_time = "-"
            if s_ev["finish_time"] is not None:
                if s_ev["success"]:
                    segtime = s_ev["finish_time"] - s_ev["active_time"]
                    segtime_s = self.render_time(None, segtime)
                    seglen = s_ev["segment_length"]
                    range_s = "[%d:+%d]" % (s_ev["segment_start"], seglen)
                    speed = self.render_rate(None, compute_rate(seglen, segtime))
                    decode_time = self._rate_and_time(seglen, s_ev["decode_time"])
                else:
                    # error
                    range_s = "error"
            else:
                # not finished yet
                pass

            t[T.tr[T.td["seg%d" % s_ev["segment_number"]],
                   T.td[srt(s_ev["start_time"])],
                   T.td[srt(s_ev["active_time"])],
                   T.td[srt(s_ev["finish_time"])],
                   T.td[range_s],
                   T.td[decode_time],
                   T.td[segtime_s], T.td[speed]]]

        l[T.h2["Segment Events:"], t]
        l[T.br(clear="all")]
        t = T.table(align="left",class_="status-download-events")
        t[T.tr[T.th["serverid"], T.th["shnum"], T.th["range"],
               T.th["txtime"], T.th["rxtime"],
               T.th["received"], T.th["RTT"]]]
        for r_ev in self.download_status.block_requests:
            server = r_ev["server"]
            rtt = None
            if r_ev["finish_time"] is not None:
                rtt = r_ev["finish_time"] - r_ev["start_time"]
            color = self.color(server)
            t[T.tr(style="background: %s" % color)[
                T.td[server.get_name()], T.td[r_ev["shnum"]],
                T.td["[%d:+%d]" % (r_ev["start"], r_ev["length"])],
                T.td[srt(r_ev["start_time"])], T.td[srt(r_ev["finish_time"])],
                T.td[r_ev["response_length"] or ""],
                T.td[self.render_time(None, rtt)],
                ]]

        l[T.h2["Requests:"], t]
        l[T.br(clear="all")]

        return l
예제 #45
0
          .even-dir { background-color: #efe0ef }
          .even { background-color: #eee }
          .odd-dir {background-color: #f0d0ef }
          .odd { background-color: #dedede }
          .icon { text-align: center }
          .listing {
              margin-left: auto;
              margin-right: auto;
              width: 50%;
              padding: 0.1em;
              }

          body { border: 0; padding: 0; margin: 0; background-color: #efefef;}
          h1 {padding: 0.1em; background-color: #777; color: white; border-bottom: thin white dashed;}
          ''']], tags.body[tags.div(_class='directory-listing')[
            tags.h1(data=tags.directive('header'))[str],
            tags.table(render=rend.sequence, data=tags.directive('listing'))[
                tags.tr(pattern="header")[tags.th["Filename"], tags.th["Size"],
                                          tags.th["Content type"],
                                          tags.th["Content encoding"], ],
                tags.tr(_class="even", pattern="item")[
                    tags.td[tags.a(render=tags.directive("tableLink"))],
                    tags.td(data=tags.directive("filesize"))[str],
                    tags.td(data=tags.directive("type"))[str],
                    tags.td(data=tags.directive("encoding"))[str], ],
                tags.tr(_class="odd", pattern="item")[
                    tags.td[tags.a(render=tags.directive("tableLink"))],
                    tags.td(data=tags.directive("filesize"))[str],
                    tags.td(data=tags.directive("type"))[str],
                    tags.td(data=tags.directive("encoding"))[str], ]]]]])
예제 #46
0
    def calendar(self, ctx, data):
        now = datetime.datetime.now()
        self.current_date = now
        month_delta = datetime.timedelta(31)
        options = itaglibrary.ICalendarOptions(ctx, {})
        strftime = options.get('strftime', '%b %d, %Y @ %I:%M %p')
        width = options.get('width', 2)
        prev = options.get('prev', None)
        next = options.get('next', None)
        base = options.get('base_url', None)
        calendar_class = options.get('calendar_class', 'calendar')
        if data is None:
            d = now
            current = d.year, d.month
        elif isinstance(data, tuple):
            year, month = data
            d = datetime.date(year, month, 4)
            current = data
        elif isinstance(data, (datetime.date, datetime.datetime)):
            d = data
            current = d.year, d.month

        if prev is None or next is None:
            p = d - month_delta
            n = d + month_delta
            prev = p.year, p.month
            next = n.year, n.month
            if base is None:
                u = url.URL.fromContext(ctx)
                segments = u.pathList()
                if segments[-1] == '':
                    u = u.up()
                    segments = segments[:-1]
                if segments[-1].isdigit() and segments[-2].isdigit():
                    u = u.up().up()
                prev_url = u
                next_url = u
            else:
                prev_url = base
                next_url = base

            add_query_params = False
            def buildUrl(u, el):
                if add_query_params:
                    param_name, param_value = el
                    u = u.add(param_name, str(param_value))
                else:
                    u = u.child(str(el))
                return u

            for el in prev:
                if el == '?':
                    add_query_params = True
                    continue
                prev_url = buildUrl(prev_url, el)
            add_query_params = False
            for el in next:
                if el == '?':
                    add_query_params = True
                    continue
                next_url = buildUrl(next_url, el)
        else:
            if isinstance(prev, (url.URL, url.URLOverlay)) and \
               isinstance(next, (url.URL, url.URLOverlay)):
                next_url = next
                prev_url = prev

        return t.table(class_=calendar_class)[
            t.thead[
              t.tr[
                t.th(colspan="7")[
                   t.a(href=prev_url)[t.xml("&larr;")],
                   t.xml(" "),
                   t.xml('-'.join([str(el) for el in current])),
                   t.xml(" "),
                   t.a(href=next_url)[t.xml("&rarr;")]
                ]
              ],
              [
                t.tr[[t.td[dayname] for dayname in calendar.weekheader(width).split()]]
              ]
            ],
            t.tbody[
              t.invisible(data=self.days(*current), render=rend.sequence)[
                 t.tr(pattern='item', render=rend.sequence)[
                     t.td(pattern='item', render=self.render_calendarDay)
                 ]
              ]
            ],
            t.tfoot[
               t.tr[
                  t.td(colspan="7")[
                      now.strftime(strftime)
                  ]
               ]
            ]
        ]
예제 #47
0
파일: Firewall.py 프로젝트: calston/tums
    def render_content(self, ctx, data):
        Utils.log.msg('%s opened Tools/Firewall' % (self.avatarId.username))
        rules = self.rules.read()
        rows = []
        bg = True

        ### Read SNAT rules
        snat = self.sysconf.Shorewall.get('snat', [])
        snatRules = []
        n = 0
        for ru in snat:
            l = ru.split()
            l.append(
                tags.a(
                    href="Delete/SNAT/%s/" % n, 
                    onclick="return confirm('Are you sure you want to delete this SNAT rule?');",
                    title="Delete this SNAT rule."
                )[tags.img(src="/images/ex.png")]
            )
            snatRules.append(l)
            n += 1

        ### Read MASQ rules
        masq = self.sysconf.Shorewall.get('masq', {})
        natRules = []
        for k,mas in masq.items():
            runum = 0 
            for v in mas:
                if type(v) == list:
                    l = [k]
                    l.extend([i.replace('-', 'Any') for i in v])
                    l.append(
                        tags.a(
                            href="Delete/NAT/%s/%s/"%(k, runum), 
                            onclick="return confirm('Are you sure you want to delete this NAT rule?');",
                            title="Delete this NAT rule."
                        )[tags.img(src="/images/ex.png")]
                    )
                    natRules.append(l)
                else:
                    natRules.append([
                        k, 'Any', v, 'Any', 'Any', 'Any', 'Any',
                        tags.a(
                            href="Delete/NAT/%s/%s/"%(k, runum), 
                            onclick="return confirm('Are you sure you want to delete this NAT rule?');",
                            title="Delete this NAT rule."
                        )[tags.img(src="/images/ex.png")]
                    ])
                runum += 1

        securityViolation = None

        ### Read firewall rules table 
        try:
            lastrule = rules['AIP'][0][8]
        except:
            lastrule = 0
        for i,ru in enumerate(rules['AIP']):
            bg = not bg
            this = bg and "#F5F5EB" or "#eee"
            try:
                nextrule = rules['AIP'][i+1][8]
            except:
                nextrule = ru[8]

            # Check for security violations
            print "Port, source", ru[7], ru[2]

            # SSH and Vulani access violation
            if ru[7] in ["22", "9682"]:
                if (ru[2] == "Any") and ((ru[1] in ["net", "Any", "dsl", "ppp", "wan", "net2"]) or (ru[4] == "fw")):
                    securityViolation = "Inbound SSH and/or Vulani administrative access should not be unrestricted! "
                    securityViolation += "Your system security has been seriously compromised. Please remove this "
                    securityViolation += "rule and restrict the source IP or make use of the VPN to administer the server remotely"
                    this = "#ff5555"

            r = [
                tags.tr(style="background: %s" % this)[
                    tags.td(rowspan=2)[ru[0]],
                    tags.td[tags.strong['Source ']],
                    tags.td[ru[1]], # Source zone
                    tags.td[ru[3].replace('-', 'Any')], # Source port
                    tags.td[ru[2]], # Source IP
                    tags.td(rowspan=2)[ru[6].replace('-', 'Any')],
                    tags.td(rowspan=2)[
                        tags.a(
                            href="Swap/%s/%s/" % (ru[8], nextrule),
                            title = "Move this rule down"
                        )[tags.img(src="/images/arrowdown.png")],
                        " ",
                        tags.a(
                            href="Swap/%s/%s/" % (ru[8], lastrule),
                            title = "Move this rule up"
                        )[tags.img(src="/images/arrowup.png")],
                        " ",
                        tags.a(
                            href="Delete/AIP/%s/"%(ru[8]), 
                            onclick="return confirm('Are you sure you want to delete this rule?');",
                            title="Delete this firewall rule."
                        )[tags.img(src="/images/ex.png")]
                    ]
                ],
                tags.tr(style="background: %s" % this)[
                    tags.td[tags.strong['Destination ']], 
                    #tags.td(align='right')[' Zone: '],
                    tags.td[ru[4]], # Zone
                    #tags.td( align='right')[' Port/Type: '],
                    tags.td[ru[7].replace('-', 'Any')], #Port
                    #tags.td( align='right')[' IP: '],
                    tags.td[ru[5]], # IP
                ],
            ]
            rows.append(r)
            lastrule = ru[8] 
        self.largestRule = lastrule
        fwtable = tags.table(cellspacing=0,  _class='listing')[
            tags.thead(background="/images/gradMB.png")[
                tags.tr[
                    tags.th['Rule'],
                    tags.th[''],
                    #tags.th[''],
                    tags.th['Zone'],
                    #tags.th[''],
                    tags.th['Port'],
                    #tags.th[''],
                    tags.th['IP'], 
                    tags.th['Protocol'],
                    tags.th[''],
                ],
            ],
            tags.tbody[
                rows
            ]
        ]

        toss = {
            '16':'Minimize Delay',
            '8':'Maximize Throughput',
            '4':'Maximize Reliability',
            '2':'Minimize Cost',
            '0':'Normal Service'
        }
        qosRules = []
        l = 0
        for port, proto, tos in self.sysconf.Shorewall.get('qos', []):
            qosRules.append([
                port,
                proto,
                toss[tos],
                tags.a(href=url.root.child("Qos").child("Delete").child(l), onclick="return confirm('Are you sure you want to delete this entry?');")[tags.img(src="/images/ex.png")]
            ])
            l += 1

        ### Check if shorewall is broken
        if os.path.exists('/usr/local/tcs/tums/shorewallBroken'):
            check = tags.div(style="color: #F00")[
                tags.br,
                tags.strong[
                    "The firewall configuration appears to be broken, please test the settings to see any errors and correct them"
                ],
                tags.br
            ]
        else:
            check = ""

        if securityViolation:
            secError =  [tags.table(width="70%", style="border:2px solid #ff5555")[tags.tr[
                tags.td[tags.img(src="/images/securityhz.png")],
                tags.td[
                    tags.h1["Security Violation!"],
                    securityViolation
                ]
            ]], tags.br, tags.br]
        else:
            secError = ""
        
        ### Return the page stanza
        return ctx.tag[
                tags.h3[tags.img(src="/images/firewall.png"), " Firewall"],

                check,
                secError,

                tags.img(src="/images/start.png"), " ",
                tags.a(
                    href="Test", 
                    style="font-size:11pt;", 
                    title="Test the firewall. (This may take some time!)"
                )[tags.strong(style="font-family:arial,verdana,helvetica,sans-serif;")["Test Settings"]],
                tags.br,
                tags.img(src="/images/refresh.png"), " ",
                tags.a(
                    href="Restart", 
                    style="font-size:11pt;", 
                    title="Restart the firewall and apply the changes. Changes are only activated after this is clicked."
                )[tags.strong(style="font-family:arial,verdana,helvetica,sans-serif")["Apply Changes"]],

                PageHelpers.TabSwitcher((
                    ('Rules'          , 'panelRules'),
                    #('Allow Ports'       , 'panelAllowPort'),
                    ('NAT',             'panelNATTab'),
                    ('QoS',             'panelQos'),
                    ('Policy',             'panelPolicy'),
                    ('Zones'    ,       'panelZones'),
                    ('Connections',     'panelCurrent'),
                ), id = "firewall"),

                tags.div(id="panelNATTab", _class="tabPane")[
                    PageHelpers.TabSwitcher((
                        ('Forwarding',  'panelForwardPort'), 
                        ('Redirection', 'panelTransparentProxy'), 
                        ('NAT',         'panelNAT'), 
                        ('Source NAT',  'panelSNAT')
                    ), id ="firewallNAT"),

                    tags.div(id="panelForwardPort", _class="tabPane")[
                        tags.h3["Port Forwarding"],
                        PageHelpers.dataTable(['Source Zone', 'Source IP', 'Forward To', 'Destination Zone', 'Protocol', 'Port', 'Destination IP', ''], [
                            r[:-1] + [tags.a(
                                href="Delete/AIP/%s/"%(r[-1]), 
                                title="Delete this port forwarding rule",
                                onclick="return confirm('Are you sure you want to delete this entry?');"
                            )[tags.img(src="/images/ex.png")]]
                        for i,r in enumerate(rules['FORWARD'])]),
                        tags.h3["Add Forwarding Rule"],
                        tags.directive('form forwardPort'),
                    ],

                    tags.div(id="panelTransparentProxy", _class="tabPane")[
                        tags.h3["Destination NAT (Transparent Proxy)"],
                        PageHelpers.dataTable(['Source Zone', 'Source Network', 'Destination Port', 'Source Port', 'Protocol', 'Destination Network', ''], [
                            r[:-1] + [tags.a(
                                href="Delete/AIP/%s/"%(r[-1]), 
                                title="Delete this transparent redirection rule",
                                onclick="return confirm('Are you sure you want to delete this entry?');"
                            )[tags.img(src="/images/ex.png")]]
                        for i,r in enumerate(rules['PROXY'])]),
                        tags.h3["Add DNAT Rule"],
                        tags.directive('form transProxy'),
                    ],

                    tags.div(id="panelNAT", _class="tabPane")[
                        tags.h3["Nework Address Translation (Masquerading)"],
                        PageHelpers.dataTable(
                            ['Destination Interface', 'Destination Network', 'Source Network', 'Source Interface', 'NAT IP', 'Protocol', 'Port', ''],
                            natRules
                        ),
                        tags.h3['Add NAT Rule'],
                        tags.directive('form addNAT')
                    ],

                    tags.div(id="panelSNAT", _class="tabPane")[
                        tags.h3["Source NAT"],
                        PageHelpers.dataTable(
                            ['Source IP', 'External Interface', 'Internal IP', 'Any Interface', 'Use Internal'],
                            snatRules
                        ),
                        tags.h3['Add SNAT Rule'],
                        tags.directive('form addSNAT')
                    ],

                    PageHelpers.LoadTabSwitcher(id="firewallNAT")
                ],

                tags.div(id="panelPolicy", _class="tabPane")[
                    tags.h3["General firewall policy"],
                    tags.directive('form inetPol') 
                ],

                tags.div(id="panelQos", _class="tabPane")[
                    tags.h3[tags.img(src="/images/compress.png"), "QOS"],
                    PageHelpers.dataTable(['Port', 'Protocol', 'Type of service', ''], qosRules),
                    tags.h3["Add Rule"],
                    tags.directive('form addQos'),
                ],

                tags.div(id="panelRules", _class="tabPane")[
                    tags.h3["Firewall Rules"], 
                    #PageHelpers.dataTable(
                    #    [
                    #        'Action', '', 'Protocol',''
                    #    ], 
                        fwtable,
                    #),
                    tags.a(name="addRule")[''],
                    tags.h3["Add rule"],
                    tags.directive('form allowRange'),
                ],

                tags.div(id="panelZones", _class="tabPane")[
                    tags.h3["Zones"],
                    PageHelpers.dataTable(['Zone Name', 'Policy', 'Log target', 'Interfaces', ''], 
                        [
                            [
                                zone, zd['policy'], zd['log'], [[i, tags.br] for i in zd['interfaces']],
                                [
                                    tags.a(
                                        href="Delete/Zone/%s/"%(zone),
                                        title="Delete this firewall zone",
                                        onclick="return confirm('Are you sure you want to delete this zone?');"
                                    )[tags.img(src="/images/ex.png")],
                                    tags.a(href="EditZone/%s/" % zone)[tags.img(src="/images/edit.png")]
                                ]
                            ] 
                        for zone, zd in self.sysconf.Shorewall.get('zones', {}).items()]
                    ),
                    tags.h3['Add Firewall Zone'],
                    tags.directive('form addZone')
                ],
                tags.div(id="panelCurrent", _class="tabPane")[
                    tags.h3["Current Connections"],
                    tags.invisible(render=tags.directive('connections'))
                ],
            PageHelpers.LoadTabSwitcher(id="firewall")
        ]
예제 #48
0
파일: dirlist.py 프로젝트: schwabe/nevow
class DirectoryLister(rend.Page):
    def __init__(self,
                 pathname,
                 dirs=None,
                 contentTypes={},
                 contentEncodings={},
                 defaultType='text/html'):
        self.contentTypes = contentTypes
        self.contentEncodings = contentEncodings
        self.defaultType = defaultType
        # dirs allows usage of the File to specify what gets listed
        self.dirs = dirs
        self.path = pathname
        rend.Page.__init__(self)

    def data_listing(self, context, data):
        from nevow.static import getTypeAndEncoding

        if self.dirs is None:
            directory = os.listdir(self.path)
            directory.sort()
        else:
            directory = self.dirs

        files = []
        dirs = []

        for path in directory:
            url = quote(path, '/')
            if os.path.isdir(os.path.join(self.path, path)):
                url = url + '/'
                dirs.append({
                    'link': url,
                    'linktext': path + "/",
                    'type': '[Directory]',
                    'filesize': '',
                    'encoding': '',
                })
            else:
                mimetype, encoding = getTypeAndEncoding(
                    path, self.contentTypes, self.contentEncodings,
                    self.defaultType)
                try:
                    filesize = os.stat(os.path.join(self.path,
                                                    path))[stat.ST_SIZE]
                except OSError as x:
                    if x.errno != 2 and x.errno != 13:
                        raise x
                else:
                    files.append({
                        'link':
                        url,
                        'linktext':
                        path,
                        'type':
                        '[%s]' % mimetype,
                        'filesize':
                        formatFileSize(filesize),
                        'encoding': (encoding and '[%s]' % encoding or '')
                    })

        return dirs + files

    def data_header(self, context, data):
        request = context.locate(inevow.IRequest)
        return "Directory listing for %s" % unquote(request.uri)

    def render_tableLink(self, context, data):
        return tags.a(href=data['link'])[data['linktext']]

    def __repr__(self):
        return '<DirectoryLister of %r>' % self.path

    __str__ = __repr__

    docFactory = loaders.stan(tags.html[tags.head[tags.title(
        data=tags.directive('header'))[str], tags.style['''
          th, .even td, .odd td { padding-right: 0.5em; }
          .even-dir { background-color: #efe0ef }
          .even { background-color: #eee }
          .odd-dir {background-color: #f0d0ef }
          .odd { background-color: #dedede }
          .icon { text-align: center }
          .listing {
              margin-left: auto;
              margin-right: auto;
              width: 50%;
              padding: 0.1em;
              }

          body { border: 0; padding: 0; margin: 0; background-color: #efefef;}
          h1 {padding: 0.1em; background-color: #777; color: white; border-bottom: thin white dashed;}
          ''']], tags.body[tags.div(_class='directory-listing')[
            tags.h1(data=tags.directive('header'))[str],
            tags.table(render=rend.sequence, data=tags.directive('listing'))[
                tags.tr(pattern="header")[tags.th["Filename"], tags.th["Size"],
                                          tags.th["Content type"],
                                          tags.th["Content encoding"], ],
                tags.tr(_class="even", pattern="item")[
                    tags.td[tags.a(render=tags.directive("tableLink"))],
                    tags.td(data=tags.directive("filesize"))[str],
                    tags.td(data=tags.directive("type"))[str],
                    tags.td(data=tags.directive("encoding"))[str], ],
                tags.tr(_class="odd", pattern="item")[
                    tags.td[tags.a(render=tags.directive("tableLink"))],
                    tags.td(data=tags.directive("filesize"))[str],
                    tags.td(data=tags.directive("type"))[str],
                    tags.td(data=tags.directive("encoding"))[str], ]]]]])
예제 #49
0
파일: grid.py 프로젝트: dickon/bvt
def testXbuild_grid(argsdict, request=None):
    start_time = clock()
    one_week = 60 * 60 * 24 * 7
    one_week_ago = start_time - one_week

    max_results = (int(argsdict['max_results'])
                   if ('max_results' in argsdict and argsdict['max_results'] != '')
                   else 128)
    if max_results < 1:
        print 'Max results must be at least 1'
        sys.exit(1)

    countdown = max_results

    test_cases = (None if ('test_cases' not in argsdict
                           or argsdict['test_cases'] == None
                           or argsdict['test_cases'] == '')
                  else (compile(argsdict['test_cases']) if ('case' in argsdict and argsdict['case'])
                        else compile(argsdict['test_cases'], IGNORECASE)))

    exclude_cases = (None if ('exclude_cases' not in argsdict
                              or argsdict['exclude_cases'] == None
                              or argsdict['exclude_cases'] == '')
                     else (compile(argsdict['exclude_cases']) if ('case' in argsdict and argsdict['case'])
                           else compile(argsdict['exclude_cases'], IGNORECASE)))

    results_by_build = {}
    results = []
    tests = set()
    build_ids = []

    mongo = bvtlib.mongodb.get_autotest()
    branch = argsdict['branch'] if 'branch' in argsdict else 'master'
    builds_query = {'branch': branch}

    force = 'force' in argsdict and argsdict['force']
    sort_columns = argsdict['sort_columns'] if 'sort_columns' in argsdict else 'alphabetic'

    total_fails_by_test = {}
    total_passes_by_test = {}
    day_results = {}
    latest_year = None
    latest_yday = None
    day_fails = 0
    day_passes = 0

    for build in mongo.builds.find(builds_query).sort([('tag_time', DESCENDING)]):
        build_id = build['_id']
        build_time = (build['tag_time'] if 'tag_time' in build
                      else (['timestamp'] if 'timestamp' in build
                            else None))
        successes_for_build = {}
        failures_for_build = {}
        results_query={'build': build_id}
        interesting = False
        for result in mongo.results.find(results_query):
            if 'infrastructure_problem' not in result or result['infrastructure_problem'] == False:
                if 'test_case' in result:
                    test_case = result['test_case']
                    if (test_case != None
                        and (test_cases == None
                             or test_cases.search(test_case))
                        and (exclude_cases == None
                             or not exclude_cases.search(test_case))
                        and (force or 'experiments.py' not in test_case)):
                        if 'failure' in result and result['failure'] != '':
                            result_details = result['failure']
                            interesting = True
                            if test_case in failures_for_build:
                                failures_for_build[test_case].append(result_details)
                            else:
                                failures_for_build[test_case] = [ result_details ]
                            if test_case in total_fails_by_test:
                                total_fails_by_test[test_case] += 1
                            else:
                                total_fails_by_test[test_case] = 1
                            day_fails += 1
                        else:
                            if 'end_time' in result:
                                interesting = True
                                if test_case in successes_for_build:
                                    successes_for_build[test_case].append(result)
                                else:
                                    successes_for_build[test_case] = [ result ]
                                if test_case in total_passes_by_test:
                                    total_passes_by_test[test_case] += 1
                                else:
                                    total_passes_by_test[test_case] = 1
                                day_passes += 1
        if interesting:
            results_for_build = (build_time, successes_for_build, failures_for_build)
            gmt = gmtime(float(build_time))
            if ((gmt.tm_year != latest_year) or (gmt.tm_yday != latest_yday)):
                latest_year = gmt.tm_year
                latest_yday = gmt.tm_yday
                date_text = strftime('%Y-%m-%d', gmt)
                day_results[date_text] = (': ' + repr(day_passes) + ' passed, ' + repr(day_fails) + ' failed')
                day_fails = 0
                day_passes = 0
            results.append(results_for_build)
            results_by_build[build_id] = results_for_build
            build_ids.append(build_id)
            countdown -= 1
            if countdown == 0:
                break
        tests.update(failures_for_build.keys())
        tests.update(successes_for_build)
        if countdown == 0:
            break

    # convert from set to list
    test_names = [ test for test in tests ]

    if sort_columns == 'ratio':
        sort_text = 'Columns are sorted by decreasing ratio of fails.'
        ratios = {}
        for test in test_names:
            passes = total_passes_by_test[test] if test in total_passes_by_test else 0
            fails = total_fails_by_test[test] if test in total_fails_by_test else 0
            ratios[test] = -1 if (passes == 0 and fails == 0) else fails / (passes + fails)
        test_names = [ name for name, count in sorted(ratios.iteritems(),
                                                      key = itemgetter(1),
                                                      reverse=True) ]
    elif sort_columns == 'frequency':
        sort_text = 'Columns are sorted by decreasing number of fails.'
        frequencies = {}
        for test in test_names:
            frequencies[test] = total_fails_by_test[test] if test in total_fails_by_test else 0
        test_names = [ name for name, count in sorted(frequencies.iteritems(),
                                                      key = itemgetter(1),
                                                      reverse=True) ]
    elif sort_columns == 'alphabetic':
        sort_text = 'Columns are sorted alphabetically by test case description.'
        test_names.sort()
    else:
        sort_text = 'Columns are not sorted, as an unknown sort type "' + repr(sort_columns) + '" was specified.'

    column_number = 1
    column_numbers = {}
    column_names = [th['Test case']]
    column_keys = []
    test_labels = {}
    
    for test_name in test_names:
        test_label = test_name.replace(' ', '_')
        column_numbers[test_name] = column_number
        column_heading = th[a(href="#"+test_label, title=test_name)
                            [repr(column_number)]]
        column_names.append(column_heading)
        column_keys.append(li[a(name=test_label)
                              [a(href="http://autotest/results?reverse=1&test_case="+test_name)
                               [test_name]]])
        test_labels[test_name] = test_label
        column_number += 1

    rows = [column_names]

    latest_year = None
    latest_yday = None
    column_count = 1 + len(column_names)
    build_number_pattern = compile('.+-([0-9]+)-.+')

    day_heading_style = {'colspan':column_count, 'class':'day_heading'}
    for build_id in build_ids:
        (build_time, successes, failures) = results_by_build[build_id]
        try:
            build_number_match = build_number_pattern.match(build_id)
            build_number_string = build_number_match.group(1) if build_number_match else build_id
            gmt = gmtime(float(build_time))
            if ((gmt.tm_year != latest_year) or (gmt.tm_yday != latest_yday)):
                latest_year = gmt.tm_year
                latest_yday = gmt.tm_yday
                raw_date_text = strftime('%Y-%m-%d', gmt)
                date_text = raw_date_text
                if float(build_time) >= one_week_ago:
                    date_text += strftime(' (%A)', gmt)
                if day_results[raw_date_text] != None:
                    date_text += day_results[raw_date_text]
                rows.append([tr[th(**day_heading_style)[date_text]]])
            cells = [th(title=(build_id + '\n' + asctime(gmt)))[
                    a(href="http://autotest/build/"+build_id)[build_number_string], br(), strftime('%H:%M:%S', gmt)
                    ]]
        except TypeError:
            gmt = None
            cells = [th[a(href="http://autotest/build/"+build_id)[build_id]]]
        for test in test_names:
            success_count = len(successes[test]) if test in successes else 0
            this_test_failures = failures[test] if test in failures else None
            fail_count = len(this_test_failures) if this_test_failures != None else 0
            some_passed = success_count > 0
            some_failed = fail_count > 0
            no_results = not (some_passed or some_failed)

            if proportionate_colour:
                colour = white if no_results else rgb_string(fail_count, success_count, 0, intensity=0.5)
            else:
                several_failed = fail_count > 1
                colour = (amber if some_passed and some_failed
                          else (white if no_results
                                else ((green if success_count > 1 else pale_green) if not some_failed
                                      else (red if several_failed
                                            else pale_red))))


            cell_hover_text = test + ': ' + repr(success_count) + (' pass' if success_count == 1 else ' passes')
            if some_failed:
                # collect up identical error messages so we can just give a count instead of repeating them
                fail_detail_counts = {}
                for x in this_test_failures:
                    fail_detail_counts[x] = fail_detail_counts[x] + 1 if x in fail_detail_counts else 1

                details = [ repr(count) + ": " +
                            # display commonest error messages first
                            message for message, count in sorted(fail_detail_counts.iteritems(),
                                                                 key = itemgetter(1),
                                                                 reverse=True) if message != None]

                cell_hover_text = cell_hover_text + '\nFailures:\n' + ('\n'.join(details))
            cell_text = [div(align='left')[repr(success_count)], div(align='right')[repr(fail_count)]]
            if some_passed or some_failed:
                cells.append(td(bgcolor=colour)
                             [a(href="results?build="+build_id+"&test_case="+test,
                                title=cell_hover_text)[cell_text]])
            else:
                cells.append(td[' '])
        rows.append([tr[cells]])

    passes_row = [th['Passes']]
    fails_row = [th['Fails']]

    for test_name in test_names:
        pass_count = total_passes_by_test[test_name] if test_name in total_passes_by_test else 0
        fail_count = total_fails_by_test[test_name] if test_name in total_fails_by_test else 0
        total = pass_count + fail_count
        colour_string = 'white' if total == 0 else rgb_string(fail_count, pass_count, 0, intensity=0.5)
        passes_row.append(td(bgcolor=colour_string)[repr(pass_count)])
        fails_row.append(td(bgcolor=colour_string)[repr(fail_count)])

    rows.insert(1, tr[fails_row])
    rows.insert(1, tr[passes_row])

    column_key = [ol[column_keys]]
    table_grid = [table(border='true', style="border-collapse: collapse", align="center", width="96%")[rows]]

    title_text = 'BVT results grid for '+branch

    if ('test_cases' in argsdict
        and argsdict['test_cases'] != None
        and argsdict['test_cases'] != ''):
        title_text += ' matching "' + argsdict['test_cases'] + '"'
    if ('exclude_cases' in argsdict
        and argsdict['exclude_cases'] != None
        and argsdict['exclude_cases'] != ''):
        title_text += ' excluding "' + argsdict['exclude_cases'] + '"'

    if request != None:
        requery_form = [ table(align="center",
                               width="96%",
                               bgcolor="#f0f0f0")[
                tr()[td()['Branch: ', stan_input(name='branch',
                                                 value=branch)['']],
                     td()['Test cases: ', stan_input(name='test_cases',
                                                     value=(argsdict['test_cases']
                                                            if 'test_cases' in argsdict
                                                            else ''))[''],
                          " ",
                          'Excluded cases: ', stan_input(name='exclude_cases',
                                                         value=(argsdict['exclude_cases']
                                                                if 'exclude_cases' in argsdict
                                                                else ''))[''],
                          " ",
                          'Case-significant search', stan_input(type='checkbox',
                                     name='case')['']],
                     td()['Include malformed results:', stan_input(type='checkbox',
                                                                   name='force')['']]],
                tr()[td()['Columns sort order: ',
                          stan_input(type='radio',
                                     name='sort_columns',
                                     value='alphabetic',
                                     ** ({'checked':1} if sort_columns == 'alphabetic' else {}))['alphabetic'],
                          " ",
                          stan_input(type='radio',
                                     name='sort_columns',
                                     value='frequency',
                                     ** ({'checked':1} if sort_columns == 'frequency' else {}))['frequency'],
                          " ",
                          stan_input(type='radio',
                                     name='sort_columns',
                                     value='ratio',
                                     ** ({'checked':1} if sort_columns == 'ratio' else {}))['ratio']],
                     td()['Max results:', stan_input(name='max_results',
                                                     value=max_results)['']],
                     td()[stan_input(type='submit')]]]]
    else:
        requery_form = None

    page_contents = [title[title_text],
                     h1[title_text]]
    page_contents += [p[key_text],
                      p[sort_text],
                      table_grid,
                      h2['column key'],
                      p[sort_text],
                      column_key]

    if not proportionate_colour:
        page_contents += [h2['cell key'],
                          key_table]

    page_contents += [hr(),
                      div(align = 'right')['produced at ', asctime()]]

    return str(nevow.flat.flatten(page_contents)), str(nevow.flat.flatten(requery_form))
예제 #50
0
파일: cal.py 프로젝트: perkinslr/nevow-py3
    def calendar(self, ctx, data):
        now = datetime.datetime.now()
        self.current_date = now
        month_delta = datetime.timedelta(31)
        options = itaglibrary.ICalendarOptions(ctx, {})
        strftime = options.get('strftime', '%b %d, %Y @ %I:%M %p')
        width = options.get('width', 2)
        prev = options.get('prev', None)
        next = options.get('next', None)
        base = options.get('base_url', None)
        calendar_class = options.get('calendar_class', 'calendar')
        if data is None:
            d = now
            current = d.year, d.month
        elif isinstance(data, tuple):
            year, month = data
            d = datetime.date(year, month, 4)
            current = data
        elif isinstance(data, (datetime.date, datetime.datetime)):
            d = data
            current = d.year, d.month

        if prev is None or next is None:
            p = d - month_delta
            n = d + month_delta
            prev = p.year, p.month
            next = n.year, n.month
            if base is None:
                u = url.URL.fromContext(ctx)
                segments = u.pathList()
                if segments[-1] == '':
                    u = u.up()
                    segments = segments[:-1]
                if segments[-1].isdigit() and segments[-2].isdigit():
                    u = u.up().up()
                prev_url = u
                next_url = u
            else:
                prev_url = base
                next_url = base

            add_query_params = False

            def buildUrl(u, el):
                if add_query_params:
                    param_name, param_value = el
                    u = u.add(param_name, str(param_value))
                else:
                    u = u.child(str(el))
                return u

            for el in prev:
                if el == '?':
                    add_query_params = True
                    continue
                prev_url = buildUrl(prev_url, el)
            add_query_params = False
            for el in next:
                if el == '?':
                    add_query_params = True
                    continue
                next_url = buildUrl(next_url, el)
        else:
            if isinstance(prev, (url.URL, url.URLOverlay)) and \
               isinstance(next, (url.URL, url.URLOverlay)):
                next_url = next
                prev_url = prev

        return t.table(
            class_=calendar_class
        )[t.thead[t.tr[t.th(
            colspan="7")[t.a(href=prev_url)[t.xml("&larr;")],
                         t.xml(" "),
                         t.xml('-'.join([str(el) for el in current])),
                         t.xml(" "),
                         t.a(href=next_url)[t.xml("&rarr;")]]],
                  [
                      t.tr[[
                          t.td[dayname]
                          for dayname in calendar.weekheader(width).split()
                      ]]
                  ]],
          t.tbody[t.invisible(data=self.days(*current), render=rend.sequence)[
              t.tr(pattern='item', render=rend.sequence
                   )[t.td(pattern='item', render=self.render_calendarDay)]]],
          t.tfoot[t.tr[t.td(colspan="7")[now.strftime(strftime)]]]]
예제 #51
0
    def render_content(self, ctx, data):
        interfaces = Utils.getInterfaces() + self.sysconf.EthernetDevices.keys(
        )
        params = Utils.parseNet()
        d = {}
        vlans = []
        routes = {}
        types = {}
        vali = []
        traffic = {}
        da = datetime.datetime.now()
        today = "%s%s%s" % (da.day, da.month, da.year)
        for i in interfaces:
            if 'tap' not in i and 'eth' not in i and 'ppp' not in i and 'vlan' not in i:
                continue
            if not "vlan" in i:
                if i in d.keys():
                    pass
                if i in params.keys():
                    types[i] = params[i]['type']
                    routes[i] = [params[i].get('network', '')]
                    if params[i]['type'] == 'static':
                        d[i] = params[i]['ip']
                    if params[i]['type'] == 'manual':
                        d[i] = "Manual"
                    else:
                        d[i] = "DHCP"
                else:
                    types[i] = ""
                    routes[i] = ""
                    d[i] = ""
            else:
                vlans.append((i, params[i]['ip'],
                              tags.a(title="Edit Interface %s" % i,
                                     href="Edit/%s" %
                                     i)[tags.img(src="/images/edit.png")]))
            # Read the traffic counters
            try:
                p = open('/usr/local/tcs/tums/rrd/iface_%s_%stotal.nid' %
                         (i, today)).read().split(':')
                traffic[i] = (float(p[0]), float(p[1]))
            except:
                traffic[i] = (0, 0)

        return ctx.tag[
            tags.h3[tags.img(src="/images/stock-disconnect.png"),
                    self.text.toolsMenuNetconf],
            PageHelpers.TabSwitcher((
                ('Interface Configuration', 'panelIface'),
                ('VLAN Configuration', 'panelVlan'),
                ('IPv6 Tunnel', 'panelTunnel'),
                ('Advanced', 'panelAdvanced'),
            )),
            tags.div(id="panelIface", _class="tabPane")[
                tags.h3["Interfaces"],
                tags.table(width="95%")[[
                    tags.tr[[
                        tags.td[self.roundedBlock(j, [
                            tags.img(src="/images/graphs/iface-%sFS.png" %
                                     j), tags.
                            table[tags.tr(valign="top")[
                                tags.td[tags.strong["Traffic Out (24h): "]],
                                tags.td[Utils.intToH(traffic[j][1])]],
                                  tags.tr(
                                      valign="top"
                                  )[tags.td[tags.strong["Traffic In (24h): "]],
                                    tags.td[Utils.intToH(traffic[j][0])]],
                                  tags.tr(valign="top")[
                                      tags.td[tags.
                                              strong["Configuration Type: "]],
                                      tags.td[types[j] == 'dhcp' and 'DHCP'
                                              or 'Static']],
                                  tags.tr(valign="top")[
                                      tags.td[tags.
                                              strong["Associated Routes: "]],
                                      tags.td[[[k, tags.br] for k in routes.
                                               get(j, ["None"])]]],
                                  tags.tr(
                                      valign="top"
                                  )[tags.td[tags.a(title="Edit Interface %s" %
                                                   j,
                                                   href="Edit/%s" %
                                                   j)[tags.img(
                                                       src="/images/edit.png"),
                                                      " Edit Settings"]],
                                    tags.td[""]]]
                        ])] for j in i if j
                    ]] for i in WebUtils.runIter(1, d.keys())
                ]], tags.br,
                #tags.h3["Add interface"],
                #tags.directive('form addInterface')
            ],
            tags.div(id="panelVlan", _class="tabPane")[
                tags.h3["Configured VLAN Interfaces"],
                PageHelpers.dataTable(('Interface', 'IP', ''), vlans), tags.br,
                tags.h3["Add VLAN"],
                tags.directive('form addVLAN')],
            tags.div(id="panelTunnel", _class="tabPane")[
                tags.h3["Configure IPv6 Tunnel"],
                tags.directive('form tunnelConf')],
            tags.div(id="panelAdvanced", _class="tabPane")
            [tags.h3["Advanced Settings"], tags.
             p["If you are unsure of any of these settings you should almost certainly not change them"],
             tags.directive('form advanced')],
            PageHelpers.LoadTabSwitcher(), ]
예제 #52
0
    def render_events(self, ctx, data):
        if not self.download_status.storage_index:
            return
        srt = self.short_relative_time
        l = T.div()

        t = T.table(align="left", class_="status-download-events")
        t[T.tr[T.th["serverid"], T.th["sent"], T.th["received"],
               T.th["shnums"], T.th["RTT"]]]
        for d_ev in self.download_status.dyhb_requests:
            server = d_ev["server"]
            sent = d_ev["start_time"]
            shnums = d_ev["response_shnums"]
            received = d_ev["finish_time"]
            rtt = None
            if received is not None:
                rtt = received - sent
            if not shnums:
                shnums = ["-"]
            t[T.tr(style="background: %s" % self.color(server))[[
                T.td[server.get_name()],
                T.td[srt(sent)],
                T.td[srt(received)],
                T.td[",".join([str(shnum) for shnum in shnums])],
                T.td[self.render_time(None, rtt)],
            ]]]

        l[T.h2["DYHB Requests:"], t]
        l[T.br(clear="all")]

        t = T.table(align="left", class_="status-download-events")
        t[T.tr[T.th["range"], T.th["start"], T.th["finish"], T.th["got"],
               T.th["time"], T.th["decrypttime"], T.th["pausedtime"],
               T.th["speed"]]]
        for r_ev in self.download_status.read_events:
            start = r_ev["start"]
            length = r_ev["length"]
            bytes = r_ev["bytes_returned"]
            decrypt_time = ""
            if bytes:
                decrypt_time = self._rate_and_time(bytes, r_ev["decrypt_time"])
            speed, rtt = "", ""
            if r_ev["finish_time"] is not None:
                rtt = r_ev["finish_time"] - r_ev["start_time"] - r_ev[
                    "paused_time"]
                speed = self.render_rate(None, compute_rate(bytes, rtt))
                rtt = self.render_time(None, rtt)
            paused = self.render_time(None, r_ev["paused_time"])

            t[T.tr[T.td["[%d:+%d]" % (start, length)],
                   T.td[srt(r_ev["start_time"])],
                   T.td[srt(r_ev["finish_time"])], T.td[bytes], T.td[rtt],
                   T.td[decrypt_time], T.td[paused], T.td[speed], ]]

        l[T.h2["Read Events:"], t]
        l[T.br(clear="all")]

        t = T.table(align="left", class_="status-download-events")
        t[T.tr[T.th["segnum"], T.th["start"], T.th["active"], T.th["finish"],
               T.th["range"], T.th["decodetime"], T.th["segtime"],
               T.th["speed"]]]
        for s_ev in self.download_status.segment_events:
            range_s = "-"
            segtime_s = "-"
            speed = "-"
            decode_time = "-"
            if s_ev["finish_time"] is not None:
                if s_ev["success"]:
                    segtime = s_ev["finish_time"] - s_ev["active_time"]
                    segtime_s = self.render_time(None, segtime)
                    seglen = s_ev["segment_length"]
                    range_s = "[%d:+%d]" % (s_ev["segment_start"], seglen)
                    speed = self.render_rate(None,
                                             compute_rate(seglen, segtime))
                    decode_time = self._rate_and_time(seglen,
                                                      s_ev["decode_time"])
                else:
                    # error
                    range_s = "error"
            else:
                # not finished yet
                pass

            t[T.tr[T.td["seg%d" % s_ev["segment_number"]],
                   T.td[srt(s_ev["start_time"])],
                   T.td[srt(s_ev["active_time"])],
                   T.td[srt(s_ev["finish_time"])], T.td[range_s],
                   T.td[decode_time], T.td[segtime_s], T.td[speed]]]

        l[T.h2["Segment Events:"], t]
        l[T.br(clear="all")]
        t = T.table(align="left", class_="status-download-events")
        t[T.tr[T.th["serverid"], T.th["shnum"], T.th["range"], T.th["txtime"],
               T.th["rxtime"], T.th["received"], T.th["RTT"]]]
        for r_ev in self.download_status.block_requests:
            server = r_ev["server"]
            rtt = None
            if r_ev["finish_time"] is not None:
                rtt = r_ev["finish_time"] - r_ev["start_time"]
            color = self.color(server)
            t[T.tr(style="background: %s" %
                   color)[T.td[server.get_name()], T.td[r_ev["shnum"]],
                          T.td["[%d:+%d]" % (r_ev["start"], r_ev["length"])],
                          T.td[srt(r_ev["start_time"])],
                          T.td[srt(r_ev["finish_time"])],
                          T.td[r_ev["response_length"]
                               or ""], T.td[self.render_time(None, rtt)], ]]

        l[T.h2["Requests:"], t]
        l[T.br(clear="all")]

        return l
예제 #53
0
파일: dirlist.py 프로젝트: StetHD/nevow
              margin-left: auto;
              margin-right: auto;
              width: 50%;
              padding: 0.1em;
              }

          body { border: 0; padding: 0; margin: 0; background-color: #efefef;}
          h1 {padding: 0.1em; background-color: #777; color: white; border-bottom: thin white dashed;}
          ''']
      ],
      tags.body[tags.div(_class='directory-listing')[
        tags.h1(data=tags.directive('header'))[str],
        tags.table(render=rend.sequence, data=tags.directive('listing'))[
          tags.tr(pattern="header")[
            tags.th["Filename"],
            tags.th["Size"],
            tags.th["Content type"],
            tags.th["Content encoding"],
          ],
          tags.tr(_class="even", pattern="item")[
            tags.td[tags.a(render=tags.directive("tableLink"))],
            tags.td(data=tags.directive("filesize"))[str],
            tags.td(data=tags.directive("type"))[str],
            tags.td(data=tags.directive("encoding"))[str],
          ],
          tags.tr(_class="odd", pattern="item")[
            tags.td[tags.a(render=tags.directive("tableLink"))],
            tags.td(data=tags.directive("filesize"))[str],
            tags.td(data=tags.directive("type"))[str],
            tags.td(data=tags.directive("encoding"))[str],
          ]
        ]