r338 - in trunk/sources/trac: . munin_plugin munin_plugin/0.11 munin_plugin/0.11/munin munin_plugin/0.11/munin/htdocs munin_plugin/0.11/munin/templates
roh at daksha.openmoko.org
roh at daksha.openmoko.org
Sat Aug 16 11:18:49 CEST 2008
Author: roh
Date: 2008-08-16 09:18:48 +0000 (Sat, 16 Aug 2008)
New Revision: 338
Added:
trunk/sources/trac/munin_plugin/
trunk/sources/trac/munin_plugin/0.11/
trunk/sources/trac/munin_plugin/0.11/munin/
trunk/sources/trac/munin_plugin/0.11/munin/__init__.py
trunk/sources/trac/munin_plugin/0.11/munin/htdocs/
trunk/sources/trac/munin_plugin/0.11/munin/htdocs/git-logo.png
trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-full.css
trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-trac.css
trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb.css
trunk/sources/trac/munin_plugin/0.11/munin/templates/
trunk/sources/trac/munin_plugin/0.11/munin/templates/munin.html
trunk/sources/trac/munin_plugin/0.11/munin/web_ui.py
trunk/sources/trac/munin_plugin/0.11/setup.py
Log:
- add initial hack for munin-plugin
Added: trunk/sources/trac/munin_plugin/0.11/munin/__init__.py
===================================================================
Added: trunk/sources/trac/munin_plugin/0.11/munin/htdocs/git-logo.png
===================================================================
(Binary files differ)
Property changes on: trunk/sources/trac/munin_plugin/0.11/munin/htdocs/git-logo.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-full.css
===================================================================
--- trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-full.css (rev 0)
+++ trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-full.css 2008-08-16 09:18:48 UTC (rev 338)
@@ -0,0 +1,490 @@
+body {
+ font-family: sans-serif;
+ font-size: small;
+ border: solid #d9d8d1;
+ border-width: 1px;
+ margin: 10px;
+ background-color: #ffffff;
+ color: #000000;
+}
+
+a {
+ color: #0000cc;
+}
+
+a:hover, a:visited, a:active {
+ color: #880000;
+}
+
+span.cntrl {
+ border: dashed #aaaaaa;
+ border-width: 1px;
+ padding: 0px 2px 0px 2px;
+ margin: 0px 2px 0px 2px;
+}
+
+img.logo {
+ float: right;
+ border-width: 0px;
+}
+
+div.page_header {
+ height: 25px;
+ padding: 8px;
+ font-size: 150%;
+ font-weight: bold;
+ background-color: #d9d8d1;
+}
+
+div.page_header a:visited, a.header {
+ color: #0000cc;
+}
+
+div.page_header a:hover {
+ color: #880000;
+}
+
+div.page_nav {
+ padding: 8px;
+}
+
+div.page_nav a:visited {
+ color: #0000cc;
+}
+
+div.page_path {
+ padding: 8px;
+ font-weight: bold;
+ border: solid #d9d8d1;
+ border-width: 0px 0px 1px;
+}
+
+div.page_footer {
+ height: 17px;
+ padding: 4px 8px;
+ background-color: #d9d8d1;
+}
+
+div.page_footer_text {
+ float: left;
+ color: #555555;
+ font-style: italic;
+}
+
+div.page_body {
+ padding: 8px;
+ font-family: monospace;
+}
+
+div.title, a.title {
+ display: block;
+ padding: 6px 8px;
+ font-weight: bold;
+ background-color: #edece6;
+ text-decoration: none;
+ color: #000000;
+}
+
+a.title:hover {
+ background-color: #d9d8d1;
+}
+
+div.title_text {
+ padding: 6px 0px;
+ border: solid #d9d8d1;
+ border-width: 0px 0px 1px;
+ font-family: monospace;
+}
+
+div.log_body {
+ padding: 8px 8px 8px 150px;
+}
+
+span.age {
+ position: relative;
+ float: left;
+ width: 142px;
+ font-style: italic;
+}
+
+span.signoff {
+ color: #888888;
+}
+
+div.log_link {
+ padding: 0px 8px;
+ font-size: 70%;
+ font-family: sans-serif;
+ font-style: normal;
+ position: relative;
+ float: left;
+ width: 136px;
+}
+
+div.list_head {
+ padding: 6px 8px 4px;
+ border: solid #d9d8d1;
+ border-width: 1px 0px 0px;
+ font-style: italic;
+}
+
+div.author_date {
+ padding: 8px;
+ border: solid #d9d8d1;
+ border-width: 0px 0px 1px 0px;
+ font-style: italic;
+}
+
+a.list {
+ text-decoration: none;
+ color: #000000;
+}
+
+a.subject, a.name {
+ font-weight: bold;
+}
+
+table.tags a.subject {
+ font-weight: normal;
+}
+
+a.list:hover {
+ text-decoration: underline;
+ color: #880000;
+}
+
+a.text {
+ text-decoration: none;
+ color: #0000cc;
+}
+
+a.text:visited {
+ text-decoration: none;
+ color: #880000;
+}
+
+a.text:hover {
+ text-decoration: underline;
+ color: #880000;
+}
+
+table {
+ padding: 8px 4px;
+}
+
+table.project_list {
+ border-spacing: 0;
+}
+
+table.diff_tree {
+ border-spacing: 0;
+ font-family: monospace;
+}
+
+table.combined.diff_tree td {
+ padding-right: 24px;
+}
+
+table.combined.diff_tree td.link {
+ padding: 0px 2px;
+}
+
+table.combined.diff_tree td.nochange a {
+ color: #6666ff;
+}
+
+table.combined.diff_tree td.nochange a:hover,
+table.combined.diff_tree td.nochange a:visited {
+ color: #d06666;
+}
+
+table.blame {
+ border-collapse: collapse;
+}
+
+table.blame td {
+ padding: 0px 5px;
+ font-size: 100%;
+ vertical-align: top;
+}
+
+th {
+ padding: 2px 5px;
+ font-size: 100%;
+ text-align: left;
+}
+
+tr.light:hover {
+ background-color: #edece6;
+}
+
+tr.dark {
+ background-color: #f6f6f0;
+}
+
+tr.dark2 {
+ background-color: #f6f6f0;
+}
+
+tr.dark:hover {
+ background-color: #edece6;
+}
+
+td {
+ padding: 2px 5px;
+ font-size: 100%;
+ vertical-align: top;
+}
+
+td.link, td.selflink {
+ padding: 2px 5px;
+ font-family: sans-serif;
+ font-size: 70%;
+}
+
+td.selflink {
+ padding-right: 0px;
+}
+
+td.sha1 {
+ font-family: monospace;
+}
+
+td.error {
+ color: red;
+ background-color: yellow;
+}
+
+td.current_head {
+ text-decoration: underline;
+}
+
+table.diff_tree span.file_status.new {
+ color: #008000;
+}
+
+table.diff_tree span.file_status.deleted {
+ color: #c00000;
+}
+
+table.diff_tree span.file_status.moved,
+table.diff_tree span.file_status.mode_chnge {
+ color: #777777;
+}
+
+table.diff_tree span.file_status.copied {
+ color: #70a070;
+}
+
+/* age2: 60*60*24*2 <= age */
+table.project_list td.age2, table.blame td.age2 {
+ font-style: italic;
+}
+
+/* age1: 60*60*2 <= age < 60*60*24*2 */
+table.project_list td.age1 {
+ color: #009900;
+ font-style: italic;
+}
+
+table.blame td.age1 {
+ color: #009900;
+ background: transparent;
+}
+
+/* age0: age < 60*60*2 */
+table.project_list td.age0 {
+ color: #009900;
+ font-style: italic;
+ font-weight: bold;
+}
+
+table.blame td.age0 {
+ color: #009900;
+ background: transparent;
+ font-weight: bold;
+}
+
+td.pre, div.pre, div.diff {
+ font-family: monospace;
+ font-size: 12px;
+ white-space: pre;
+}
+
+td.mode {
+ font-family: monospace;
+}
+
+/* styling of diffs (patchsets): commitdiff and blobdiff views */
+div.diff.header,
+div.diff.extended_header {
+ white-space: normal;
+}
+
+div.diff.header {
+ font-weight: bold;
+
+ background-color: #edece6;
+
+ margin-top: 4px;
+ padding: 4px 0px 2px 0px;
+ border: solid #d9d8d1;
+ border-width: 1px 0px 1px 0px;
+}
+
+div.diff.header a.path {
+ text-decoration: underline;
+}
+
+div.diff.extended_header,
+div.diff.extended_header a.path,
+div.diff.extended_header a.hash {
+ color: #777777;
+}
+
+div.diff.extended_header .info {
+ color: #b0b0b0;
+}
+
+div.diff.extended_header {
+ background-color: #f6f5ee;
+ padding: 2px 0px 2px 0px;
+}
+
+div.diff a.list,
+div.diff a.path,
+div.diff a.hash {
+ text-decoration: none;
+}
+
+div.diff a.list:hover,
+div.diff a.path:hover,
+div.diff a.hash:hover {
+ text-decoration: underline;
+}
+
+div.diff.to_file a.path,
+div.diff.to_file {
+ color: #007000;
+}
+
+div.diff.add {
+ color: #008800;
+}
+
+div.diff.from_file a.path,
+div.diff.from_file {
+ color: #aa0000;
+}
+
+div.diff.rem {
+ color: #cc0000;
+}
+
+div.diff.chunk_header a,
+div.diff.chunk_header {
+ color: #990099;
+}
+
+div.diff.chunk_header {
+ border: dotted #ffe0ff;
+ border-width: 1px 0px 0px 0px;
+ margin-top: 2px;
+}
+
+div.diff.chunk_header span.chunk_info {
+ background-color: #ffeeff;
+}
+
+div.diff.chunk_header span.section {
+ color: #aa22aa;
+}
+
+div.diff.incomplete {
+ color: #cccccc;
+}
+
+div.diff.nodifferences {
+ font-weight: bold;
+ color: #600000;
+}
+
+div.index_include {
+ border: solid #d9d8d1;
+ border-width: 0px 0px 1px;
+ padding: 12px 8px;
+}
+
+div.search {
+ font-size: 100%;
+ font-weight: normal;
+ margin: 4px 8px;
+ position: absolute;
+ top: 56px;
+ right: 12px
+}
+
+td.linenr {
+ text-align: right;
+}
+
+a.linenr {
+ color: #999999;
+ text-decoration: none
+}
+
+a.rss_logo {
+ float: right;
+ padding: 3px 0px;
+ width: 35px;
+ line-height: 10px;
+ border: 1px solid;
+ border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e;
+ color: #ffffff;
+ background-color: #ff6600;
+ font-weight: bold;
+ font-family: sans-serif;
+ font-size: 70%;
+ text-align: center;
+ text-decoration: none;
+}
+
+a.rss_logo:hover {
+ background-color: #ee5500;
+}
+
+span.refs span {
+ padding: 0px 4px;
+ font-size: 70%;
+ font-weight: normal;
+ border: 1px solid;
+ background-color: #ffaaff;
+ border-color: #ffccff #ff00ee #ff00ee #ffccff;
+}
+
+span.refs span.ref {
+ background-color: #aaaaff;
+ border-color: #ccccff #0033cc #0033cc #ccccff;
+}
+
+span.refs span.tag {
+ background-color: #ffffaa;
+ border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
+}
+
+span.refs span.head {
+ background-color: #aaffaa;
+ border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
+}
+
+span.atnight {
+ color: #cc0000;
+}
+
+span.match {
+ color: #e00000;
+}
+
+div.binary {
+ font-style: italic;
+}
Added: trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-trac.css
===================================================================
--- trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-trac.css (rev 0)
+++ trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb-trac.css 2008-08-16 09:18:48 UTC (rev 338)
@@ -0,0 +1,4 @@
+img.git-logo {
+ border: 0px;
+ float: right;
+}
Added: trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb.css
===================================================================
--- trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb.css (rev 0)
+++ trunk/sources/trac/munin_plugin/0.11/munin/htdocs/gitweb.css 2008-08-16 09:18:48 UTC (rev 338)
@@ -0,0 +1,55 @@
+a { color:#0000cc; }
+a:hover, a:visited, a:active { color:#880000; }
+#content div { font-size: 18px; }
+div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
+div.page_header a:visited, a.header { color:#0000cc; }
+div.page_header a:hover { color:#880000; }
+div.page_nav { font-size: 16px; padding:8px; }
+div.page_nav a:visited { color:#0000cc; }
+div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
+div.page_footer { height:17px; padding:4px 8px; background-color: #d9d8d1; }
+div.page_footer_text { float:left; color:#555555; font-style:italic; }
+div.page_body { padding:8px; }
+div.title, a.title {
+ display:block; padding:6px 8px;
+ font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
+}
+a.title:hover { background-color: #d9d8d1; }
+div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
+div.log_body { padding:8px 8px 8px 150px; }
+span.age { position:relative; float:left; width:142px; font-style:italic; }
+div.log_link {
+ padding:0px 8px;
+ font-size:10px; font-family:sans-serif; font-style:normal;
+ position:relative; float:left; width:136px;
+}
+div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
+a.list { text-decoration:none; color:#000000; }
+a.list:hover { text-decoration:underline; color:#880000; }
+a.text { text-decoration:none; color:#0000cc; }
+a.text:visited { text-decoration:none; color:#880000; }
+a.text:hover { text-decoration:underline; color:#880000; }
+table { padding:8px 4px; }
+th { padding:2px 5px; font-size:12px; text-align:left; }
+tr.light:hover { background-color:#edece6; }
+tr.dark { background-color:#f6f6f0; }
+tr.dark:hover { background-color:#edece6; }
+td { padding:2px 5px; font-size:12px; vertical-align:top; }
+td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
+#content div.pre { font-family:monospace; font-size:12px; white-space:pre; }
+#content div.diff_info { font-size: 12px; font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
+div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
+div.search { display: none; margin:4px 8px; position:absolute; top:56px; right:12px }
+a.linenr { color:#999999; text-decoration:none }
+a.rss_logo {
+ float:right; padding:3px 0px; width:35px; line-height:10px;
+ border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
+ color:#ffffff; background-color:#ff6600;
+ font-weight:bold; font-family:sans-serif; font-size:10px;
+ text-align:center; text-decoration:none;
+}
+a.rss_logo:hover { background-color:#ee5500; }
+span.tag {
+ padding:0px 4px; font-size:10px; font-weight:normal;
+ background-color:#ffffaa; border:1px solid; border-color:#ffffcc #ffee00 #ffee00 #ffffcc;
+}
Added: trunk/sources/trac/munin_plugin/0.11/munin/templates/munin.html
===================================================================
--- trunk/sources/trac/munin_plugin/0.11/munin/templates/munin.html (rev 0)
+++ trunk/sources/trac/munin_plugin/0.11/munin/templates/munin.html 2008-08-16 09:18:48 UTC (rev 338)
@@ -0,0 +1,21 @@
+<!--!
+ TracGitWeb embedding template
+ Created by Noah Kantrowitz on 2007-06-05.
+ Copyright (c) 2007 Noah Kantrowitz. All rights reserved.
+-->
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:py="http://genshi.edgewall.org/"
+ xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="layout.html" />
+ <head>
+ <title>munin</title>
+ </head>
+ <body>
+ <div id="content" class="munin">
+ ${munin_page}
+ </div>
+ </body>
+</html>
Added: trunk/sources/trac/munin_plugin/0.11/munin/web_ui.py
===================================================================
--- trunk/sources/trac/munin_plugin/0.11/munin/web_ui.py (rev 0)
+++ trunk/sources/trac/munin_plugin/0.11/munin/web_ui.py 2008-08-16 09:18:48 UTC (rev 338)
@@ -0,0 +1,116 @@
+# Original Created by Noah Kantrowitz on 2007-06-05.
+# Original Copyright (c) 2007 Noah Kantrowitz. All rights reserved.
+
+# Modified 2008 by Joachim Steiger <roh at openmoko.org> under BSD
+
+import os.path
+import re
+import urllib
+import urllib2
+
+from trac.core import *
+from trac.web.api import IRequestHandler
+from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet
+from trac.perm import IPermissionRequestor
+from trac.mimeview.api import MIME_MAP as BASE_MIME_MAP
+from trac.config import Option, BoolOption
+from trac.util.text import to_unicode
+from trac.util.translation import _
+
+from genshi.builder import tag
+from genshi.core import Markup
+
+# Make a copy to start us off
+MIME_MAP = dict(BASE_MIME_MAP.iteritems())
+MIME_MAP.update({
+ 'png': 'image/png',
+})
+
+class MuninModule(Component):
+ """A plugin to embed Munin into Trac."""
+
+ implements(IRequestHandler, INavigationContributor, IPermissionRequestor, ITemplateProvider)
+
+ munin_url = Option('munin', 'url', doc='URL to munin')
+ send_mime = BoolOption('munin', 'send_mime', default=False,
+ doc='Try to send back the correct MIME type for blob_plain pages.')
+
+ patterns = [
+ # (regex, replacement)
+ (r'^.*?<div class', '<div class'),
+ (r'<\/body.*', ''),
+ (r'<a href="',lambda req: '<a href="%s' % req.href.munin()),
+# (r'<img src="/git-logo.png" width="72" height="27" alt="git" class="logo"/>',
+# lambda req: '<img src="%s" width="72" height="27" alt="git" class="git-logo"/>' % \
+# req.href.chrome('munin', 'git-logo.png')),
+# (r'<link rel="stylesheet" type="text/css" href="/gitweb.css"/>',
+# lambda req: '<link rel="stylesheet" type="text/css" href="%s"/>\n<link rel="stylesheet" type="text/css" href="%s"/>' % \
+# (req.href.chrome('munin', 'gitweb-full.css'), req.href.chrome('munin', 'gitweb-trac.css'))),
+ ]
+ patterns = [(re.compile(pat, re.S|re.I|re.U), rep) for pat, rep in patterns]
+
+ # IRequestHandler methods
+ def match_request(self, req):
+ return req.path_info.startswith('/munin')
+
+ def process_request(self, req):
+ req.perm.assert_permission('MUNIN_VIEW')
+
+ # Check for no URL being configured
+ if not self.munin_url:
+ raise TracError('You must configure a URL in trac.ini')
+
+ # Grab the page
+ urlf = urllib2.urlopen(self.munin_url+'?'+req.environ['QUERY_STRING'])
+ page = urlf.read()
+
+ # Check if this is a raw format send
+ args = dict([(args or '=').split('=',1) for args in req.environ['QUERY_STRING'].split(';')])
+ if args.get('a') == 'blob_plain':
+ if self.send_mime:
+ _, ext = os.path.splitext(args.get('f', ''))
+ mime_type = MIME_MAP.get(ext[1:], 'text/plain')
+ else:
+ mime_type = 'text/plain'
+ req.send(page, mime_type)
+
+ # Check for RSS
+ if args.get('a') in ('rss', 'opml', 'project_index', 'atom'):
+ req.send(page, urlf.info().type)
+
+ # Proceed with normal page serving
+ page = to_unicode(page)
+ for pat, rep in self.patterns:
+ if callable(rep):
+ rep = rep(req)
+ page = pat.sub(rep, page)
+
+ data = {
+ 'munin_page': Markup(page),
+ }
+ #add_link(req, 'stylesheet', 'http://dev.laptop.org/www/styles/gitbrowse.css', 'text/css')
+# add_stylesheet(req, 'gitweb/gitweb.css')
+# add_stylesheet(req, 'gitweb/gitweb-trac.css')
+ return 'munin.html', data, urlf.info().type
+
+ # INavigationContributor methods
+ def get_navigation_items(self, req):
+ if 'MUNIN_VIEW' in req.perm:
+ yield 'mainnav', 'munin', tag.a(_('Munin'),
+ href=req.href.munin())
+
+ def get_active_navigation_item(self, req):
+ return 'munin'
+
+ # IPermissionRequestor methods
+ def get_permission_actions(self):
+ yield 'MUNIN_VIEW'
+
+ # ITemplateProvider methods
+ def get_htdocs_dirs(self):
+ from pkg_resources import resource_filename
+ return [('munin', resource_filename(__name__, 'htdocs'))]
+
+ def get_templates_dirs(self):
+ from pkg_resources import resource_filename
+ return [resource_filename(__name__, 'templates')]
Added: trunk/sources/trac/munin_plugin/0.11/setup.py
===================================================================
--- trunk/sources/trac/munin_plugin/0.11/setup.py (rev 0)
+++ trunk/sources/trac/munin_plugin/0.11/setup.py 2008-08-16 09:18:48 UTC (rev 338)
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-1 -*-
+
+from setuptools import setup
+
+setup(
+ name = 'TracMunin',
+ version = '1.0',
+ packages = ['munin'],
+ package_data = { 'munin': ['templates/*.html', 'htdocs/*.png', 'htdocs/*.css' ] },
+
+ author = 'Joachim Steiger',
+ author_email = 'roh at openmoko.org',
+ description = 'Embed munin in Trac.',
+ license = 'BSD',
+ keywords = 'trac plugin',
+ url = 'http://',
+ classifiers = [
+ 'Framework :: Trac',
+ ],
+
+ install_requires = ['Trac'],
+
+ entry_points = {
+ 'trac.plugins': [
+ 'munin.web_ui = munin.web_ui',
+ ],
+ },
+)
More information about the webdesign-commitlog
mailing list