import repository from arizona
[raven.git] / owl / server / templates / display.psp
1 <html>
2 <head>
3 <title>Owl</title>
4 </head>
5 <body>
6
7 <%
8 # I'm not sure why the path isn't properly inherited from index.py
9
10 sys.path.append(config["path"])
11 from db import *
12 import time
13 from owllib import *
14 import MySQLdb
15 from xml.sax.saxutils import *
16 import string
17 import urllib
18
19 query['redir'] = 'index'
20
21 if legend:
22     def _legend_start(name):
23         return '<a href=%s>' % (quoteattr("#legend_" + name))
24
25     def _legend_end():
26         return '</a>'
27 else:
28     def _legend_start(name):
29         return ''
30
31     def _legend_end():
32         return ''
33
34
35 if showheader:
36     pass
37 %>
38     <img src="http://raven.cs.arizona.edu/projects/project/chrome/site/raven-header-transparent-bg.png" alt="Raven Logo">
39     <h1> Owl Slice Monitoring Service v<%= version %></h1>
40 <%
41     if flavor != "production":
42         pass
43 %>
44         <h1> <%= flavor %></h1>
45 <%
46     #end if
47 %>
48
49     [<a href="<%= config['url'] %>">Home</a>]
50
51 <%
52     if legend:
53         pass
54 %>
55         [<a href="#legend">Legend</a>]
56 <%
57     # end if
58 %>
59
60     [<a href="<%= config['url']%>/prefs/?<%= urllib.urlencode(query, doseq=True)%>">Show/Hide Modules</a>]
61     [<a href="http://raven.cs.arizona.edu/projects/project/wiki/OwlPage">Help</a>]
62
63 <p>
64
65     Database: <%= db%> <br>
66     Date: <%= date%>
67
68 <p>
69     Newer than:
70 <%
71
72     lengths = ('-60s', '-180s', '-900s', '-1h', '-3h', '-1d', '-3d', '-1w', '-1m', '-1y', '0')
73     labels = {'-60s' : '1 minute', '-180s' : '3 minutes', '-900s' : '15 minutes',
74               '-1h' : '1 hour', '-3h' : '3 hours', '-1d' : '1 day', '-3d' : '3 days', 
75               '-1w' : '1 week', '-1m': '1 month', 
76               '-1y': '1 year', '0' : 'Big Bang'}
77     
78     for x in lengths:
79         if f1 == x:
80             pass
81 %>
82             <b><%= labels[x] %></b>
83 <%
84         else:
85             tmp = query.copy()
86             tmp['newer'] = [x]
87             tmp['f1'] = [x]
88 %>
89             <a href="?<%= urllib.urlencode(tmp, doseq=True)%>"><%= labels[x] %></a>
90
91 <%
92         #end if
93     #end for
94 #end if
95 %>
96
97 <p>
98 <table border=1>
99
100 <thead>
101 <tr>
102
103 <%
104
105
106 debug(req, "Getting list of modules")
107 modules = get_modules(dbconn)
108 for m in modules[:]:
109     if m.name in hide:
110         modules.remove(m)
111         continue
112     debug(request, "module = %s" % (m.name))
113     m.fields = get_fields(dbconn, m)
114 %>
115     <th nowrap colspan="<%=len(m.fields)%>"> <b> 
116     <a name=<%= quoteattr(m.name)%>> 
117     <%= _legend_start(m.name) %>
118     <%= m.heading %> </a> </a>
119     <%= _legend_end() %>
120     </b> </th> 
121 <%
122 #end for
123 %>
124
125 <tr>
126
127 <%
128 debug(req, "Generating column headings")
129 fieldList = []
130 descriptions = {}
131 align = {}
132 stats = {}
133 for m in modules:
134     debug(request, "module = %s" % (m.name))
135     for f in m.fields:
136         debug(request, "field = %s" % (f.fname))
137         fieldList.append(f)
138         tmp = query.copy()
139         tmp['sortby'] = escape(f.fname)
140         tmp['sortorder'] = 'inc'
141         inc_url = urllib.urlencode(tmp, doseq=True)
142         tmp['sortorder'] = 'dec'
143         dec_url = urllib.urlencode(tmp, doseq=True)
144 %>
145         <th nowrap align=<%= f.headingAlign%>> <b>
146         <a name=<%= quoteattr(f.fname)%>> 
147         <%= _legend_start(f.fname) %>
148         <%= f.heading %> </a> 
149         <%= _legend_end() %>
150         &nbsp&nbsp
151         <a style="text-decoration:none" href="?<%= inc_url %>"> &darr; </a>
152         &nbsp
153         <a style="text-decoration:none" href="?<%= dec_url %>"> &uarr; </a>
154         &nbsp
155         </b> </th>
156 <%
157 #end for
158 debug(request, "fieldList = %s" %(str(fieldList)))
159 %>
160
161 </thead>
162 <tbody>
163
164 <%
165 debug(req, "Generating values")
166
167 # If newer is negative it is relative to the current time.
168 newer = int(newer)
169 now = time.time()
170 debug(req, "newer = %d, now = %d" % (newer, now))
171 if newer < 0:
172     newer = now + newer
173 tmp = []
174 found = False
175 for f in fieldList:
176     debug(request, "field = %s" % (f.fname))
177     if f.fname == sortby:
178         found = True
179     tmp.append("`%s`" % (f.fname))
180 fieldStr = ','.join(tmp)
181
182 if filterval != "*":
183     filter = "AND `%s` = '%s'" % (filterby, filterval)
184 else:
185     filter = ""
186
187 if found:
188     sort = "ORDER BY `%s`" % (sortby)
189
190     if sortorder != "inc":
191         sort = sort + " DESC"
192 else:
193     sort = ""
194
195 query = "SELECT %s FROM `nodes` WHERE `_internal.timestamp` >= %d %s %s" % (fieldStr, newer, filter, sort)
196
197 cursor = dbconn.execute(query)
198
199 rows = cursor.fetchall()
200 for row in rows:
201     i = 0
202 %>
203     <tr>
204 <%
205     for f in fieldList:
206         value = escape(str(row[i]))
207         if value == "":
208             value = "&nbsp;"
209         i += 1
210         if f.fname == "basic.id":
211             args = urllib.urlencode({'db' : db, 'id' : value})
212 %>
213             <td nowrap align=<%= quoteattr(f.align)%>> 
214             <a href="row?<%= args %>"> <%= value %> </a> </td>
215 <%
216         else:
217 %>
218             <td nowrap align=<%= quoteattr(f.align) %>> <%= value %> </td>
219 <%
220     # end for
221 %>
222     </tr>
223 <%
224 #end for
225 ops = {'Mean':'AVG', 'Min':'MIN', 'Max':'MAX'}
226 for stat in ['Mean', 'Min', 'Max'] :
227     debug(req, "stat = %s" % (stat))
228     i = 0
229 %>
230     <tr>
231     <td colspan="2" align="right"> <b> <%= stat %> </b> </td>
232 <%
233     for f in fieldList:
234         i = i+1
235         if i < 3:
236             continue
237         debug(req, "%s stats = %s" % (f.fname, f.stats))
238         if string.lower(stat) in f.stats:
239             query = "SELECT %s(`%s`) FROM `nodes` WHERE `_internal.timestamp` >= %d %s" % (ops[stat],f.fname, newer, filter)
240             cursor = dbconn.execute(query)
241             row = cursor.fetchone()
242             value = escape(str(row[0]))
243         else:
244             value = "&nbsp;"
245         # else end
246 %>
247     <td nowrap align=<%= quoteattr(f.align) %>"> <%= value %> </td>
248
249 <%
250     # end for
251 %>
252     </tr>
253 <%
254 # end for
255 %>
256
257 </table>
258
259 <%
260 if legend:
261 %>
262     <h2><a name="legend"> Legend</a></h2>
263     <%@ include file="legend.psp"%>