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