
* Record filter to return records referred by blueprints * Common code for activity stream processing is extracted into template Change-Id: I1d36ba2be3c76fafcf25a09ffbb40cfc083271da
160 lines
8.4 KiB
HTML
160 lines
8.4 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block head %}
|
|
<title>{% block title %}{% endblock %}</title>
|
|
|
|
<meta name="keywords" content="openstack, contribution, statistics, community, review, commit, report, havana, grizzly, icehouse"/>
|
|
|
|
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/style.css') }}">
|
|
|
|
<link href='http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic&subset=latin,cyrillic' rel='stylesheet' type='text/css' />
|
|
<link href='http://fonts.googleapis.com/css?family=PT+Sans+Caption&subset=latin,cyrillic' rel='stylesheet' type='text/css' />
|
|
<link href='http://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700&subset=latin,cyrillic' rel='stylesheet' type='text/css' />
|
|
|
|
<link rel="icon" href="{{ url_for('static', filename='images/favicon.png') }}" type="image/png"/>
|
|
|
|
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/jquery.jqplot.min.css') }}">
|
|
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/jquery.dataTables.css') }}">
|
|
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/select2.css') }}">
|
|
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/style.css') }}">
|
|
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jquery-1.9.1.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jquery.dataTables.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jquery.jqplot.min.js') }}"></script>
|
|
<!--[if lt IE 9]><script type="text/javascript" src="{{ url_for('static', filename='js/excanvas.min.js') }}"></script><![endif]-->
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.json2.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.pieRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.barRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.bubbleRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.categoryAxisRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.dateAxisRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.canvasTextRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.canvasAxisLabelRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.canvasAxisTickRenderer.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.cursor.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jqplot.highlighter.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/select2.min.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/jquery.tmpl.js') }}"></script>
|
|
<script type="text/javascript" src="{{ url_for('static', filename='js/stackalytics-ui.js') }}"></script>
|
|
|
|
{% block scripts %}{% endblock %}
|
|
{% endblock %}
|
|
|
|
{% macro show_activity_log(activity, show_gravatar) -%}
|
|
|
|
<h2>Activity Log</h2>
|
|
|
|
{% if not activity %}
|
|
<div>No activity.</div>
|
|
{% else %}
|
|
|
|
{% for item in activity %}
|
|
<div class="activity">
|
|
<div style='float: left; '>
|
|
{% if show_gravatar %}
|
|
<img src="{{ item.gravatar }}">
|
|
{% else %}
|
|
<img src="{{ item.record_type | gravatar(default='retro') }}">
|
|
{% endif %}
|
|
</div>
|
|
|
|
<div style="margin-left: 86px;">
|
|
|
|
{% if item.record_type == "commit" %}
|
|
|
|
<h3>{{ item.date_str}} — commit “{{item.subject}}” to {{ item.module }}</h3>
|
|
|
|
<div>Author: <a href="/report/users/{{ item.user_id }}">{{ item.author_name }}</a>
|
|
(<a href="/report/companies/{{ item.company_name }}">{{ item.company_name }}</a>)</div>
|
|
|
|
<div class="message">{{ item.message | safe }}</div>
|
|
<div><span style="color: green">+<span>{{ item.lines_added }}</span></span>
|
|
<span style="color: blue">- <span>{{ item.lines_deleted }}</span></span>
|
|
</div>
|
|
{% if item.correction_comment %}
|
|
<div style='font-weight: bold; color: red;'>Commit corrected:
|
|
<span>{{ item.correction_comment }}</span></div>
|
|
{% endif %}
|
|
|
|
{% elif item.record_type == "mark" %}
|
|
|
|
<h3>{{ item.date_str}} — review “{{item.subject}}” in {{ item.module }}</h3>
|
|
|
|
<div>Reviewer: <a href="/report/users/{{ item.user_id }}">{{ item.author_name }}</a>
|
|
(<a href="/report/companies/{{ item.company_name }}">{{ item.company_name }}</a>)</div>
|
|
<div>Submitter: <a href="/report/users/{{ item.parent_user_id }}">{{ item.parent_author_name }}</a>
|
|
(<a href="/report/companies/{{ item.company_name }}">{{ item.parent_company_name }}</a>)</div>
|
|
<div>Change Id: <a href="{{item.url}}">{{item.review_id}}</a></div>
|
|
<div style="color: {% if item.value > 0 %} green {% else %} blue {% endif %}">
|
|
{{item.description}}: <span class="review_mark">{{item.value}}</span></div>
|
|
|
|
{% elif item.record_type == "review" %}
|
|
|
|
<h3>{{ item.date_str}} — patch “{{item.subject}}” posted into {{ item.module }}</h3>
|
|
|
|
<div>Author: <a href="/report/users/{{ item.user_id }}">{{ item.author_name }}</a>
|
|
(<a href="/report/companies/{{ item.company_name }}">{{ item.company_name }}</a>)</div>
|
|
<div>Current Status: {{ item.status }}</div>
|
|
<div>URL: <a href="{{item.url}}">{{item.url}}</a></div>
|
|
<div>Change Id: <a href="{{item.url}}">{{item.id}}</a></div>
|
|
|
|
{% elif item.record_type == "email" %}
|
|
|
|
<h3>{{ item.date_str}} — email “{{item.subject}}”</h3>
|
|
|
|
<div>Author: <a href="/report/users/{{ item.user_id }}">{{ item.author_name }}</a>
|
|
(<a href="/report/companies/{{ item.company_name }}">{{ item.company_name }}</a>)</div>
|
|
{% if item.body %}
|
|
<div class="message">{{ item.body|safe }}</div>
|
|
{% endif %}
|
|
|
|
{% elif item.record_type in ["bpd", "bpc"] %}
|
|
|
|
<h3>{{ item.date_str}} — blueprint “{{item.title}}” in {{ item.module }}</h3>
|
|
|
|
<div>Author: <a href="/report/users/{{ item.user_id }}">{{ item.author_name }}</a>
|
|
(<a href="/report/companies/{{ item.parent_company_name }}">{{ item.parent_company_name }}</a>)</div>
|
|
<div>Launchpad: <a href="https://blueprints.launchpad.net/{{ item.module }}/+spec/{{ item.name }}">https://blueprints.launchpad.net/{{ item.module }}/+spec/{{ item.name }}</a></div>
|
|
<div>Report: {{ item.blueprint_link | safe}}</div>
|
|
{% if item.summary %}
|
|
<div class="message">{{ item.summary|safe }}</div>
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
{%- endmacro %}
|
|
|
|
{% macro show_contribution_summary(contribution) -%}
|
|
|
|
<h2>Contribution summary</h2>
|
|
<ul>
|
|
<li>Total commits: {{ contribution.commit_count }}</li>
|
|
<li>Total LOC: {{ contribution.loc }}</li>
|
|
<li>Review stat (-2, -1, +1, +2): {{ contribution.marks[-2] }}, {{ contribution.marks[-1] }},
|
|
{{ contribution.marks[1] }}, {{ contribution.marks[2] }}</li>
|
|
<li>Draft Blueprints: {{ contribution.drafted_blueprint_count }}</li>
|
|
<li>Completed Blueprints: {{ contribution.completed_blueprint_count }}</li>
|
|
<li>Emails: {{ contribution.email_count }}</li>
|
|
</ul>
|
|
|
|
{%- endmacro %}
|
|
|
|
{% block body %}
|
|
|
|
<div style="margin: 2em;">
|
|
<div id="analytics_header" style="padding-bottom: 1em; border-bottom: 1px solid darkgrey;">
|
|
<span id="logo"><a href="/">Stackalytics</a></span>
|
|
<span id="slogan">| community heartbeat</span>
|
|
</div>
|
|
|
|
{% block content %}
|
|
{% endblock %}
|
|
|
|
</div>
|
|
{% endblock %}
|