Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Aug 2012 19:55:48 +0000
From:      tzabal@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r240850 - in soc2012/tzabal/server-side/akcrs-website: . akcrswebsite akcrswebsite/scripts akcrswebsite/static akcrswebsite/templates
Message-ID:  <20120825195548.2D193106566B@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tzabal
Date: Sat Aug 25 19:55:46 2012
New Revision: 240850
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=240850

Log:
  The fresh akcrs-website directory.

Added:
  soc2012/tzabal/server-side/akcrs-website/
  soc2012/tzabal/server-side/akcrs-website/CHANGES.txt
  soc2012/tzabal/server-side/akcrs-website/MANIFEST.in
  soc2012/tzabal/server-side/akcrs-website/README.txt
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/__init__.py
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/models.py
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/__init__.py
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/initializedb.py
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/style.css
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/account.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/base.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bug.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bugs.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_bugstate.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_password.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/check_for_user.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/evaluate_report.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/index.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/login.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/menu.html
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/report.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/reports.mako
  soc2012/tzabal/server-side/akcrs-website/akcrswebsite/views.py
  soc2012/tzabal/server-side/akcrs-website/development.ini
  soc2012/tzabal/server-side/akcrs-website/production.ini
  soc2012/tzabal/server-side/akcrs-website/setup.cfg
  soc2012/tzabal/server-side/akcrs-website/setup.py

Added: soc2012/tzabal/server-side/akcrs-website/CHANGES.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/CHANGES.txt	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,4 @@
+0.0
+---
+
+-  Initial version

Added: soc2012/tzabal/server-side/akcrs-website/MANIFEST.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/MANIFEST.in	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,2 @@
+include *.txt *.ini *.cfg *.rst
+recursive-include akcrswebsite *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml

Added: soc2012/tzabal/server-side/akcrs-website/README.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/README.txt	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,14 @@
+akcrs-website README
+==================
+
+Getting Started
+---------------
+
+- cd <directory containing this file>
+
+- $venv/bin/python setup.py develop
+
+- $venv/bin/populate_akcrs-website development.ini
+
+- $venv/bin/pserve development.ini
+

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/__init__.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/__init__.py	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,34 @@
+from pyramid.authentication import AuthTktAuthenticationPolicy
+from pyramid.authorization import ACLAuthorizationPolicy
+from pyramid.config import Configurator
+from sqlalchemy import engine_from_config
+
+from .models import DBSession
+
+def main(global_config, **settings):
+    """ This function returns a Pyramid WSGI application."""
+    engine = engine_from_config(settings, 'sqlalchemy.')
+    DBSession.configure(bind=engine)
+    authn_policy = AuthTktAuthenticationPolicy('z3VfW0PhQy7g')
+    authz_policy = ACLAuthorizationPolicy()
+    config = Configurator(settings=settings)
+    # Authentication and Authorization
+    config.set_authentication_policy(authn_policy)
+    config.set_authorization_policy(authz_policy)
+    # Static
+    config.add_static_view('static', 'static', cache_max_age=3600)
+    # Routes
+    config.add_route('index', '/')
+    config.add_route('login', '/login')
+    config.add_route('logout', '/logout')
+    config.add_route('account', '/account')
+    config.add_route('change_password', '/change_password')
+    config.add_route('reports', '/reports')
+    config.add_route('report', '/reports/{id}')
+    config.add_route('evaluate_report', '/reports/{id}/evaluate')
+    config.add_route('bugs', '/bugs')
+    config.add_route('bug', '/bugs/{id}')
+    config.add_route('change_bugstate', '/bugs/{id}/change_state')
+    # Scan
+    config.scan()
+    return config.make_wsgi_app()
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/models.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/models.py	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,87 @@
+import datetime
+
+from sqlalchemy.dialects.postgresql import ARRAY
+from sqlalchemy.dialects.postgresql import ENUM
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import relationship
+from sqlalchemy.orm import scoped_session
+from sqlalchemy.orm import sessionmaker
+from sqlalchemy.schema import Column
+from sqlalchemy.schema import ForeignKey
+from sqlalchemy.schema import Sequence
+from sqlalchemy.types import Boolean
+from sqlalchemy.types import CHAR
+from sqlalchemy.types import Integer
+from sqlalchemy.types import String
+from sqlalchemy.types import Text
+from sqlalchemy.types import TIMESTAMP
+from zope.sqlalchemy import ZopeTransactionExtension
+
+
+DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
+Base = declarative_base()
+
+
+class User(Base):
+    __tablename__ = 'users'
+    
+    id = Column(Integer, Sequence('users_id_seq'), primary_key=True)
+    email = Column(String(254), nullable=False)
+    password = Column(CHAR(64), nullable=False)
+    is_developer = Column(Boolean, default='false')
+    
+    reports = relationship('Report')
+
+
+class Bug(Base):
+    __tablename__ = 'bugs'
+    
+    id = Column(Integer, Sequence('bugs_id_seq'), primary_key=True)
+    state = Column(ENUM('NOSTATE', 'Open', 'Analyzed', 'Feedback', 'Closed', 'Suspended', name='bugstate'), nullable=False)
+    reported = Column(Integer, nullable=False)
+    
+    reports = relationship('Report')
+
+
+class Report(Base):
+    __tablename__ = 'reports'
+    
+    id = Column(Integer, Sequence('reports_id_seq'), primary_key=True)
+    bug_id = Column(Integer, ForeignKey('bugs.id'))
+    user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
+    received_datetime = Column(TIMESTAMP, default=datetime.datetime.now)
+    confirmation_code = Column(CHAR(length=16), nullable=False)
+    confirmed = Column(Boolean, default='false')
+    bugs_id = Column(ARRAY(Integer))
+    crashtype = Column(Text)
+    crashdate = Column(Text)
+    hostname = Column(Text)
+    ostype = Column(Text)
+    osrelease = Column(Text)
+    version = Column(Text)
+    machine = Column(Text)
+    panic = Column(Text)
+    backtrace = Column(Text)
+    top_significant_func = Column(Text)
+    rem_significant_funcs = Column(ARRAY(Text))
+    ps_axl = Column(Text)
+    vmstat_s = Column(Text)
+    vmstat_m = Column(Text)
+    vmstat_z = Column(Text)
+    vmstat_i = Column(Text)
+    pstat_t = Column(Text)
+    pstat_s = Column(Text)
+    iostat = Column(Text)
+    ipcs_a = Column(Text)
+    ipcs_t = Column(Text)
+    nfsstat = Column(Text)
+    netstat_s = Column(Text)
+    netstat_m = Column(Text)
+    netstat_id = Column(Text)
+    netstat_anr = Column(Text)
+    netstat_ana = Column(Text)
+    netstat_al = Column(Text)
+    fstat = Column(Text)
+    dmesg = Column(Text)
+    kernelconfig = Column(Text)
+    ddbcapturebuffer = Column(Text)
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/__init__.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/__init__.py	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1 @@
+# package

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/initializedb.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/scripts/initializedb.py	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,37 @@
+import os
+import sys
+import transaction
+
+from sqlalchemy import engine_from_config
+
+from pyramid.paster import (
+    get_appsettings,
+    setup_logging,
+    )
+
+from ..models import (
+    DBSession,
+    User,
+    Bug,
+    Report,
+    Base,
+    )
+
+def usage(argv):
+    cmd = os.path.basename(argv[0])
+    print('usage: %s <config_uri>\n'
+          '(example: "%s development.ini")' % (cmd, cmd)) 
+    sys.exit(1)
+
+def main(argv=sys.argv):
+    if len(argv) != 2:
+        usage(argv)
+    config_uri = argv[1]
+    setup_logging(config_uri)
+    settings = get_appsettings(config_uri)
+    engine = engine_from_config(settings, 'sqlalchemy.')
+    DBSession.configure(bind=engine)
+    Base.metadata.create_all(engine)
+    #with transaction.manager:
+    #    model = MyModel(name='one', value=1)
+    #    DBSession.add(model)

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/style.css
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/static/style.css	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,105 @@
+/* HTML Elements */
+body {
+    margin: 0;
+    padding: 0;
+    font-family: tahoma, helvetica, sans-serif;
+    font-size: 12pt;
+}
+
+
+/* Container */
+#container {
+    width: 1024px;
+    margin: auto;
+    position: relative;
+}
+
+
+/* Header */
+#header {
+    height: 5em;
+}
+
+/* Header Left Side */
+#header-left {
+    height: 5em;
+    position: absolute;
+}
+
+/* Header Right Side */
+#header-right {
+    top: 1em;
+    right: 1em;
+    position: absolute;
+}
+
+#header-right a {
+    color: black;
+    text-decoration: none;
+}
+
+#header-right a:hover {
+    text-decoration: underline;
+}
+
+
+/* Menu */
+#menu {
+    border-top: 1px solid #E4E1DB;
+    border-bottom: 1px solid #E4E1DB;
+}
+
+#menu ul li {
+    display: inline;
+    padding: 2em;
+}
+
+#menu ul li a {
+    color: black;
+    text-decoration: none;
+}
+
+#menu ul li a:hover {
+    text-decoration: underline;
+}
+
+
+/* Reports and Bugs */
+#reports-bugs-tables {
+    border-collapse:collapse;
+    text-align: left;
+}
+
+#reports-bugs-tables th {
+    border-bottom: 2px solid #E4E1DB;
+    padding: 10px 12px;
+}
+
+#reports-bugs-tables td {
+    border-bottom: 1px solid #E4E1DB;
+    padding: 6px 12px;
+}
+
+
+/* Report */
+#report-contents-table {
+    margin-top: 1em;
+    margin-bottom: 2em;
+}
+
+#report-contents-table td {
+    padding-right: 3em;
+}
+
+.report-data {
+    margin-bottom: 1em;
+}
+
+.report-data textarea {
+    width: 768px;
+    height: 256px;
+    border-color: #E4E1DB;
+    border-style: solid;
+    border-width: thin;
+    padding: 0.3em;
+}
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/account.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/account.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,21 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Account
+</%block>
+
+<form method="POST" action="/change_password">
+    <p>
+        <label for="current_password">Current password</label><br />
+        <input type="password" id="current_password" name="current_password" />
+    </p>
+    <p>
+        <label for="new_password_1">New password</label><br />
+        <input type="password" id="new_password_1" name="new_password_1" />
+    </p>
+    <p>
+        <label for="new_password_2">Repeat new password</label><br />
+        <input type="password" id="new_password_2" name="new_password_2" />
+    </p>
+    <input type="submit" name="submit" value="Change Password" />
+</form>
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/base.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/base.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="UTF-8">
+        <title>Automated Kernel Crash Reporting System</title>
+        <link rel="stylesheet" type="text/css" href="/static/style.css" />
+    </head>
+    <body>
+        <div id="container">
+            <div id="header">
+                <div id="header-left">
+                    <h1><%block name="headerleft"/></h1>
+                </div>
+                <div id="header-right">
+                    <%include file="check_for_user.mako"/>
+                </div>
+            </div>
+            <div id="menu">
+                <%include file="menu.html"/>
+            </div>
+            <div id="content">
+                ${next.body()}
+            </div>
+        </div>
+    </body>
+</html>

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bug.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bug.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,36 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Details for the Kernel Bug with ID ${request.matchdict['id']}
+</%block>
+
+<p>
+    The state of the bug ${request.matchdict['id']} is marked as <strong>${bug.state}</strong>.<br />
+    % if bug.reported == 1:
+    This bug has been reported only <strong>${bug.reported}</strong> time. The crash report that refers to it is:<br />
+    <ul><li><a href="/reports/${reports[0].id}">Report</a></li></ul>
+    % else:
+    This bug has been reported <strong>${bug.reported}</strong> times. The crash reports that refer to it are:
+    <ul>
+        % for report in reports:
+    <li><a href="http://0.0.0.0:6543/reports/${report.id}">Report</a></li>;
+        %endfor
+    </ul>
+    % endif
+</p>
+
+% if is_developer:
+<p>
+    As a FreeBSD developer, you can change the state of the bug. Please choose below the new state.<br />
+    <form method="POST" action="/bugs/${request.matchdict['id']}/change_state">
+        <select name="bugstate">
+            <option value="Open">Open</option>
+            <option value="Analyzed">Analyzed</option>
+            <option value="Feedback">Feedback</option>
+            <option value="Closed">Closed</option>
+            <option value="Suspended">Suspended</option>
+        </select>
+        <input type="submit" name="submit" value="Change State" />
+    </form>
+</p>
+% endif
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bugs.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/bugs.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,25 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Kernel Bugs
+</%block>
+
+<p>A list that contains all the bugs that we have identified.</p>
+<table id="reports-bugs-tables">
+    <thead>
+        <tr>
+            <th>State</th>
+            <th>Reported</th>
+            <th>Details</th>
+        </tr>
+    </thead>
+    <tbody>
+    % for bug in bugs:
+        <tr>
+            <td>${bug.state}</td>
+            <td>${bug.reported}</td>
+            <td><a href="/bugs/${bug.id}">Bug</a></td>
+        </tr>
+    % endfor
+    </tbody>
+</table>

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_bugstate.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_bugstate.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,11 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Change state for the Kernel Bug with ID ${request.matchdict['id']}
+</%block>
+
+% if is_developer and not failed_attempt:
+<p>The state of the bug has changed successfully.</p>
+% else:
+<p>You are not allowed to view this page.</p>
+% endif
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_password.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/change_password.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,11 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Change Password
+</%block>
+
+% if not result:
+<p>Your password did not change. Please try again.</p>
+% else:
+<p>Your password has changed successfully.</p>
+% endif
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/check_for_user.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/check_for_user.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,8 @@
+% if not logged_in:
+<a href="/login">Login</a>
+% else:
+    <%
+        userid = logged_in.replace('@', '').replace('.', '')
+    %>
+<a href="/account">My Account</a> | <a href="/logout">Logout</a>
+% endif
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/evaluate_report.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/evaluate_report.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,7 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Evaluate the Crash Report with ID ${request.matchdict['id']}
+</%block>
+
+<p>Sorry, but this feature is not ready yet.</p>
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/index.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/index.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,17 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Welcome to AKCRS!
+</%block>
+
+<p>Please remember the following facts:
+<ul>
+    <li>One report refers to exactly one bug</li>
+    <li>One bug may be referred from more than one reports</li>
+</ul>
+</p>
+<p>Generally, a <em>problem report</em> or an <em>issue ticket</em> is an indication of a <em>problem</em>.
+The ultimate goal is to <strong>fix</strong> the problem. The problem report or the issue ticket contains the information that we have for the problem. Multiple problem reports or issue tickets may refer to one problem. That means that we have more information about it.
+Because our domain is kernel crashes, we use the terms kernel crash report (or report for short) and kernel bug (or bug for short).
+We these things in mind, have a happy browsing :)</p>
+<p>For more information about the Automated Kernel Crash Reporting System, please visit the <a href="http://wiki.freebsd.org/SummerOfCode2012/AutomatedKernelCrashReportingSystem">wiki page</a> of the project.</p>

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/login.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/login.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,23 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Login
+</%block>
+
+% if failed_attempt:
+<p><font color="red">Invalid credentials, try again.</font></p>
+% endif
+
+<p>There is no registration. In order to login into the system, you use the email address that you have provided in the crashreport program, and the password that has been sent to you via email.</p>
+
+<form method="POST" action="${request.path}">
+    <p>
+        <label for="email">Email</label><br />
+        <input type="email" id="email" name="email" />
+    </p>
+    <p>
+        <label for="password">Password</label><br />
+        <input type="password" id="password" name="password" />
+    </p>
+    <input type="submit" name="submit" value="Log in" />
+</form>
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/menu.html
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/menu.html	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,5 @@
+<ul>
+    <li><a href="/">Home</a></li>
+    <li><a href="/reports">Reports</a></li>
+    <li><a href="/bugs">Bugs</a></li>
+</ul>
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/report.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/report.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,198 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Details for the Kernel Crash Report with ID ${request.matchdict['id']}
+</%block>
+
+<p>All the data of the requested crash report.</p>
+
+<table id="report-contents-table">
+    <tr>
+        <td><a href="#crashtype">Crash type</a></td>
+        <td><a href="#crashdate">Crash date</a></td>
+        <td><a href="#hostname">Hostname</a></td>
+    </tr>
+    <tr>
+        <td><a href="#ostype">Operating System</a></td>
+        <td><a href="#osrelease">Release</a></td>
+        <td><a href="#version">Version</a></td>
+    </tr>
+    <tr>
+        <td><a href="#machine">Platform</a></td>
+        <td><a href="#panic">Panic Message</a></td>
+        <td><a href="#backtrace">Backtrace</a></td>
+    </tr>
+    <tr>
+        <td><a href="#ps_axl">ps -axl</a></td>
+        <td><a href="#vmstat_s">vmstat -s</a></td>
+        <td><a href="#vmstat_m">vmstat -m</a></td>
+    </tr>
+    <tr>
+        <td><a href="#vmstat_z">vmstat -z</a></td>
+        <td><a href="#vmstat_i">vmstat -i</a></td>
+        <td><a href="#pstat_t">pstat -t</a></td>
+    </tr>
+    <tr>
+        <td><a href="#pstat_s">pstat -s</a></td>
+        <td><a href="#iostat">iostat</a></td>
+        <td><a href="#ipcs_a">ipcs -a</a></td>
+    </tr>
+    <tr>
+        <td><a href="#ipcs_t">ipcs -t</a></td>
+        <td><a href="#nfsstat">nfsstat</a></td>
+        <td><a href="#netstat_s">netstat -s</a></td>
+    </tr>
+    <tr>
+        <td><a href="#netstat_m">netstat -m</a></td>
+        <td><a href="#netstat_id">netstat -id</a></td>
+        <td><a href="#netstat_anr">netstat -anr</a></td>
+    </tr>
+    <tr>
+        <td><a href="#netstat_ana">netstat -ana</a></td>
+        <td><a href="#netstat_al">netstat -al</a></td>
+        <td><a href="#fstat">fstat</a></td>
+    </tr>
+    <tr>
+        <td><a href="#dmesg">dmesg</a></td>
+        <td><a href="#kernelconfig">Kernel config</a></td>
+        <td><a href="#ddbcapturebuffer">DDB capture buffer</a></td>
+    </tr>
+</table>
+
+<div class="report-data">
+    <a id="crashtype">Crash type</a><br />
+    <textarea readonly="readonly" wrap="off">${report.crashtype}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="crashdate">Crash date</a><br />
+    <textarea readonly="readonly" wrap="off">${report.crashdate}</textarea><br />
+</div>
+</div>
+<div class="report-data">
+    <a id="hostname">Hostname</a><br />
+    <textarea readonly="readonly" wrap="off">${report.hostname}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="ostype">Operating System</a><br />
+    <textarea readonly="readonly" wrap="off">${report.ostype}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="osrelease">Release</a><br />
+    <textarea readonly="readonly" wrap="off">${report.osrelease}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="version">Version</a><br />
+    <textarea readonly="readonly" wrap="off">${report.version}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="machine">Platform</a><br />
+    <textarea readonly="readonly" wrap="off">${report.machine}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="panic">Panic Message</a><br />
+    <textarea readonly="readonly" wrap="off">${report.panic}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="backtrace">Backtrace</a><br />
+    <textarea readonly="readonly" wrap="off">${report.backtrace}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="ps_axl">ps -axl</a><br />
+    <textarea readonly="readonly" wrap="off">${report.ps_axl}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="vmstat_s">vmstat -s</a><br />
+    <textarea readonly="readonly" wrap="off">${report.vmstat_s}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="vmstat_m">vmstat -m</a><br />
+    <textarea readonly="readonly" wrap="off">${report.vmstat_m}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="vmstat_z">vmstat -z</a><br />
+    <textarea readonly="readonly" wrap="off">${report.vmstat_z}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="vmstat_i">vmstat -i</a><br />
+    <textarea readonly="readonly" wrap="off">${report.vmstat_i}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="pstat_t">pstat -t</a><br />
+    <textarea readonly="readonly" wrap="off">${report.pstat_t}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="pstat_s">pstat -s</a><br />
+    <textarea readonly="readonly" wrap="off">${report.pstat_s}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="iostat">iostat</a><br />
+    <textarea readonly="readonly" wrap="off">${report.iostat}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="ipcs_a">ipcs -a</a><br />
+    <textarea readonly="readonly" wrap="off">${report.ipcs_a}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="ipcs_t">ipcs -t</a><br />
+    <textarea readonly="readonly" wrap="off">${report.ipcs_t}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="nfsstat">nfsstat</a><br />
+    <textarea readonly="readonly" wrap="off">${report.nfsstat}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="netstat_s">netstat -s</a><br />
+    <textarea readonly="readonly" wrap="off">${report.netstat_s}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="netstat_m">netstat -m</a><br />
+    <textarea readonly="readonly" wrap="off">${report.netstat_m}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="netstat_id">netstat -id</a><br />
+    <textarea readonly="readonly" wrap="off">${report.netstat_id}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="netstat_anr">netstat -anr</a><br />
+    <textarea readonly="readonly" wrap="off">${report.netstat_anr}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="netstat_ana">netstat -ana</a><br />
+    <textarea readonly="readonly" wrap="off">${report.netstat_ana}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="netstat_al">netstat -al</a><br />
+    <textarea readonly="readonly" wrap="off">${report.netstat_al}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="fstat">fstat</a><br />
+    <textarea readonly="readonly" wrap="off">${report.fstat}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="dmesg">dmesg</a><br />
+    <textarea readonly="readonly" wrap="off">${report.dmesg}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="kernelconfig">Kernel config</a><br />
+    <textarea readonly="readonly" wrap="off">${report.kernelconfig}</textarea><br />
+</div>
+<div class="report-data">
+    <a id="ddbcapturebuffer">DDB capture buffer</a><br />
+    <textarea readonly="readonly" wrap="off">${report.ddbcapturebuffer}</textarea><br />
+</div>
+
+% if is_developer:
+<p>
+    As a FreeBSD developer, you can view the email address of the submitter in order to contact him for any feedback.<br />
+    The email address of the submitter that sent this report is <strong>${user.email}</strong>.
+</p>
+<p>
+    Also, if you think that this report refers correctly to the bug with ID <a href="/bugs/${report.bug_id}">${report.bug_id}</a>, click the checkbox below.<br />
+    Otherwise, suggest in which bug this report should point to or suggest the creation of a new bug for this report. Please write the ID of the bug below or write "new".
+</p>
+<form method="POST" action="/reports/${request.matchdict['id']}/evaluate">
+    It refers correctly to the existing bug <input type="checkbox" name="refers_correctly" value="True" /><br /><br />
+    Bug ID or "new" <input type="text" name="bugid" /><br /><br />
+    <input type="submit" name="submit" value="Evaluate Report" /><br />
+</form>
+% endif
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/reports.mako
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/templates/reports.mako	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,29 @@
+<%inherit file="base.mako"/>
+
+<%block name="headerleft">
+Kernel Crash Reports
+</%block>
+
+<p>A list that contains all the crash reports that we have collected.</p>
+<table id="reports-bugs-tables">
+    <thead>
+        <tr>
+            <th>Received</th>
+            <th>Release</th>
+            <th>Platform</th>
+            <th>Details</th>
+            <th>Refers to</th>
+        </tr>
+    </thead>
+    <tbody>
+    % for report in reports:
+        <tr>
+            <td>${str(report.received_datetime)[:10]}</td>
+            <td>${report.osrelease}</td>
+            <td>${report.machine}</td>
+            <td><a href="/reports/${report.id}">Report</a></td>
+            <td><a href="/bugs/${report.bug_id}">Bug</a></td>
+        </tr>
+    % endfor
+    </tbody>
+</table>

Added: soc2012/tzabal/server-side/akcrs-website/akcrswebsite/views.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/akcrswebsite/views.py	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,186 @@
+import hashlib
+
+from pyramid.httpexceptions import HTTPForbidden
+from pyramid.httpexceptions import HTTPFound
+from pyramid.httpexceptions import HTTPNotFound
+from pyramid.security import authenticated_userid
+from pyramid.security import forget
+from pyramid.security import remember
+from pyramid.view import view_config
+from sqlalchemy.exc import DBAPIError
+
+from .models import DBSession, User, Bug, Report
+
+
+@view_config(route_name='index', renderer='index.mako')
+def index(request):
+    logged_in = authenticated_userid(request)
+    return {'logged_in': logged_in}
+
+
+@view_config(route_name='login', renderer='login.mako')
+def login(request):
+    logged_in = authenticated_userid(request)
+    if logged_in:
+        goto = request.route_url('index')
+        return HTTPFound(location=goto)
+    
+    if request.method == 'POST':
+        email = request.POST.get('email')
+        password = request.POST.get('password')
+        
+        if email and password:
+            query = DBSession.query(User).filter(User.email == email)
+            try:
+                user = query.one()
+            except:
+                pass # either no such email in db or more than 2 times in db!
+            else:
+                hashobj = hashlib.sha256()
+                hashobj.update(password)
+                hashpass = hashobj.hexdigest()
+                if hashpass == user.password:
+                    goto = request.route_url('index')
+                    headers = remember(request, email)
+                    return HTTPFound(location=goto, headers=headers)
+        
+        return {'failed_attempt': True}
+    
+    return {'failed_attempt': False, 'logged_in': logged_in}
+
+
+@view_config(route_name='logout')
+def logout(request):
+    logged_in = authenticated_userid(request)
+    goto = request.route_url('index')
+    if not logged_in:
+        return HTTPFound(location=goto)
+    headers = forget(request)
+    return HTTPFound(location=goto, headers=headers)
+
+
+@view_config(route_name='account', renderer='account.mako')
+def account(request):
+    logged_in = authenticated_userid(request)
+    return {'logged_in': logged_in}
+
+@view_config(route_name='change_password', renderer='change_password.mako')
+def change_password(request):
+    logged_in = authenticated_userid(request)
+    goto = request.route_url('index')
+    if not logged_in:
+        # change it to HTTPForbidden
+        return HTTPFound(location=goto)
+    
+    result = False
+    if request.method == 'POST':
+        curr = request.POST.get('current_password')
+        new1 = request.POST.get('new_password_1')
+        new2 = request.POST.get('new_password_2')
+        
+        if curr and new1 and new2:
+            if new1 == new2:
+                query = DBSession.query(User).filter(User.email == logged_in)
+                try:
+                    user = query.one()
+                except:
+                    pass # either no such email in db or more than 2 times in db!
+                else:
+                    hashcurr = hashlib.sha256()
+                    hashcurr.update(curr)
+                    if user.password == hashcurr.hexdigest():
+                        hashnew = hashlib.sha256()
+                        hashnew.update(new1)
+                        user.password = hashnew.hexdigest()
+                        DBSession.flush()
+                        result = True
+    
+    return {'result': result, 'logged_in': logged_in}
+
+
+@view_config(route_name='reports', renderer='reports.mako')
+def reports(request):
+    logged_in = authenticated_userid(request)
+    reports = DBSession.query(Report).filter(Report.confirmed == True).all()
+    return {'reports': reports, 'logged_in': logged_in}
+
+
+@view_config(route_name='report', renderer='report.mako')
+def report(request):
+    logged_in = authenticated_userid(request)
+    is_developer = None
+    if logged_in:
+        user = DBSession.query(User).filter(User.email == logged_in).one()
+        is_developer = user.is_developer
+    
+    id = request.matchdict['id']
+    query = DBSession.query(Report).filter(Report.confirmed == True, Report.id == id)
+    report = query.one()
+    
+    # To have the email address of the submitter
+    query = DBSession.query(User).filter(User.id == report.user_id)
+    user = query.one()
+    
+    return {'report': report, 'user': user, 'logged_in': logged_in, 'is_developer': is_developer}
+
+
+@view_config(route_name='evaluate_report', renderer='evaluate_report.mako')
+def evaluate_report(request):
+    logged_in = authenticated_userid(request)
+    return {'logged_in': logged_in}
+
+
+@view_config(route_name='bugs', renderer='bugs.mako')
+def bugs(request):
+    logged_in = authenticated_userid(request)
+    bugs = DBSession.query(Bug).filter(Bug.reported > 0).all()
+    return {'bugs': bugs, 'logged_in': logged_in}
+
+
+@view_config(route_name='bug', renderer='bug.mako')
+def bug(request):
+    logged_in = authenticated_userid(request)
+    is_developer = None
+    if logged_in:
+        user = DBSession.query(User).filter(User.email == logged_in).one()
+        is_developer = user.is_developer
+    
+    id = request.matchdict['id']
+    
+    # All the data related to the requested bug
+    # A bug is considered valid when it is reported from at least one report
+    # A bug can have reported equals to zero if the report that refers to it
+    # is unconfirmed.
+    query = DBSession.query(Bug).filter(Bug.reported > 0, Bug.id == id)
+    bug = query.one()
+    
+    # The reports that refer to the requested bug
+    query = DBSession.query(Report).filter(Report.bug_id == id, Report.confirmed == True)
+    reports = query.all()
+    return {'bug': bug, 'reports': reports, 'logged_in': logged_in, 'is_developer': is_developer}
+
+
+@view_config(route_name='change_bugstate', renderer='change_bugstate.mako')
+def change_bugstate(request):
+    logged_in = authenticated_userid(request)
+    failed_attempt = True
+    id = request.matchdict['id']
+    
+    is_developer = None
+    if logged_in:
+        user = DBSession.query(User).filter(User.email == logged_in).one()
+        is_developer = user.is_developer
+    else:
+        # change it to HTTPForbidden
+        HTTPFound(location=request.route_url('index'))
+    
+    if request.method == 'POST':
+        newstate = request.POST.get('bugstate')
+        if newstate:
+            query = DBSession.query(Bug).filter(Bug.reported > 0, Bug.id == id)
+            bug = query.one()
+            bug.state = newstate
+            DBSession.flush()
+            failed_attempt = False
+    
+    return {'failed_attempt': failed_attempt, 'is_developer': is_developer, 'logged_in': logged_in}
\ No newline at end of file

Added: soc2012/tzabal/server-side/akcrs-website/development.ini
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2012/tzabal/server-side/akcrs-website/development.ini	Sat Aug 25 19:55:46 2012	(r240850)
@@ -0,0 +1,58 @@
+[app:main]
+use = egg:akcrs-website
+
+pyramid.reload_templates = true
+pyramid.debug_authorization = false
+pyramid.debug_notfound = false
+pyramid.debug_routematch = false
+pyramid.default_locale_name = en
+pyramid.includes =
+    pyramid_debugtoolbar
+    pyramid_tm
+
+sqlalchemy.url = postgresql+psycopg2://username:password@host/database
+mako.directories = akcrswebsite:templates
+
+[server:main]
+use = egg:waitress#main
+host = 0.0.0.0
+port = 6543
+
+# Begin logging configuration
+
+[loggers]
+keys = root, akcrswebsite, sqlalchemy
+
+[handlers]
+keys = console
+
+[formatters]
+keys = generic
+

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120825195548.2D193106566B>