mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					bd01b1e2e4 | ||
| 
						 | 
					58a7f6085f | ||
| 
						 | 
					3367593b52 | ||
| 
						 | 
					1a92ec5d86 | ||
| 
						 | 
					7a8d685a71 | ||
| 
						 | 
					3c3a8747c3 | 
@@ -39,7 +39,8 @@ from typing import Any, Dict, List, Tuple, Optional, Sequence, Callable, Type, \
 | 
				
			|||||||
@zulip_login_required
 | 
					@zulip_login_required
 | 
				
			||||||
def stats(request):
 | 
					def stats(request):
 | 
				
			||||||
    # type: (HttpRequest) -> HttpResponse
 | 
					    # type: (HttpRequest) -> HttpResponse
 | 
				
			||||||
    return render_to_response('analytics/stats.html')
 | 
					    return render_to_response('analytics/stats.html',
 | 
				
			||||||
 | 
					                              context=dict(realm_name = request.user.realm.name))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def get_chart_data(request, user_profile, chart_name=REQ(),
 | 
					def get_chart_data(request, user_profile, chart_name=REQ(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,11 @@ All notable changes to the Zulip server are documented in this file.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Unreleased
 | 
					### Unreleased
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 1.5.1 -- 2017-02-07
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fix exception trying to copy node_modules during upgrade process.
 | 
				
			||||||
 | 
					- Improved styling of /stats page to remove useless login/register links.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 1.5.0 -- 2017-02-06
 | 
					### 1.5.0 -- 2017-02-06
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Highlights:
 | 
					Highlights:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,8 +79,6 @@ else:
 | 
				
			|||||||
    logging.info("Installing static assets...")
 | 
					    logging.info("Installing static assets...")
 | 
				
			||||||
    subprocess.check_call(["cp", "-rT", os.path.join(deploy_path, 'prod-static/serve'),
 | 
					    subprocess.check_call(["cp", "-rT", os.path.join(deploy_path, 'prod-static/serve'),
 | 
				
			||||||
                           '/home/zulip/prod-static'], preexec_fn=su_to_zulip)
 | 
					                           '/home/zulip/prod-static'], preexec_fn=su_to_zulip)
 | 
				
			||||||
    # Sets up npm cache
 | 
					 | 
				
			||||||
    setup_node_modules(npm_args=['--production'], copy_modules=True)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Our next optimization is to check whether any migrations are needed
 | 
					# Our next optimization is to check whether any migrations are needed
 | 
				
			||||||
# before we start the critical section of the restart.  This saves
 | 
					# before we start the critical section of the restart.  This saves
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -161,10 +161,10 @@ function hover(id) {
 | 
				
			|||||||
            $('#hover_bots_value').hide();
 | 
					            $('#hover_bots_value').hide();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // var human_colors = data.points[0].data.x.map(function () {
 | 
					        // var human_colors = data.points[0].data.x.map(function () {
 | 
				
			||||||
        //     return '#1f77b4';
 | 
					        //     return '#5f6ea0';
 | 
				
			||||||
        // });
 | 
					        // });
 | 
				
			||||||
        // var bot_colors = data.points[0].data.x.map(function () {
 | 
					        // var bot_colors = data.points[0].data.x.map(function () {
 | 
				
			||||||
        //     return '#ff7f00';
 | 
					        //     return '#b7b867';
 | 
				
			||||||
        // });
 | 
					        // });
 | 
				
			||||||
        // human_colors[data.points[0].pointNumber] = '#185a88';
 | 
					        // human_colors[data.points[0].pointNumber] = '#185a88';
 | 
				
			||||||
        // bot_colors[data.points[0].pointNumber] = '#cc6600';
 | 
					        // bot_colors[data.points[0].pointNumber] = '#cc6600';
 | 
				
			||||||
@@ -173,12 +173,12 @@ function hover(id) {
 | 
				
			|||||||
        // Plotly.restyle(id, update_human, 0);
 | 
					        // Plotly.restyle(id, update_human, 0);
 | 
				
			||||||
        // Plotly.restyle(id, update_bot, 1);
 | 
					        // Plotly.restyle(id, update_bot, 1);
 | 
				
			||||||
        // var legendBoxes = document.getElementById(id).getElementsByClassName("legendbar");
 | 
					        // var legendBoxes = document.getElementById(id).getElementsByClassName("legendbar");
 | 
				
			||||||
        // Plotly.d3.select(legendBoxes[0]).style("fill", "#1f77b4");
 | 
					        // Plotly.d3.select(legendBoxes[0]).style("fill", "#5f6ea0");
 | 
				
			||||||
        // Plotly.d3.select(legendBoxes[1]).style("fill", "#ff7f00");
 | 
					        // Plotly.d3.select(legendBoxes[1]).style("fill", "#b7b867");
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    // myPlot.on('plotly_unhover', function () {
 | 
					    // myPlot.on('plotly_unhover', function () {
 | 
				
			||||||
    //     var update_human = {marker:{color: '#1f77b4'}};
 | 
					    //     var update_human = {marker:{color: '#5f6ea0'}};
 | 
				
			||||||
    //     var update_bot = {marker:{color: '#ff7f00'}};
 | 
					    //     var update_bot = {marker:{color: '#b7b867'}};
 | 
				
			||||||
    //     Plotly.restyle(id, update_human, 0);
 | 
					    //     Plotly.restyle(id, update_human, 0);
 | 
				
			||||||
    //     Plotly.restyle(id, update_bot, 1);
 | 
					    //     Plotly.restyle(id, update_bot, 1);
 | 
				
			||||||
    // });
 | 
					    // });
 | 
				
			||||||
@@ -186,8 +186,8 @@ function hover(id) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function fix_legend_colors() {
 | 
					function fix_legend_colors() {
 | 
				
			||||||
    var legendBoxes = document.getElementById('id_messages_sent_over_time').getElementsByClassName("legendbar");
 | 
					    var legendBoxes = document.getElementById('id_messages_sent_over_time').getElementsByClassName("legendbar");
 | 
				
			||||||
    Plotly.d3.select(legendBoxes[0]).style("fill", "#1f77b4");
 | 
					    Plotly.d3.select(legendBoxes[0]).style("fill", "#5f6ea0");
 | 
				
			||||||
    Plotly.d3.select(legendBoxes[1]).style("fill", "#ff7f00");
 | 
					    Plotly.d3.select(legendBoxes[1]).style("fill", "#b7b867");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function populate_messages_sent_over_time(data) {
 | 
					function populate_messages_sent_over_time(data) {
 | 
				
			||||||
@@ -242,13 +242,13 @@ function populate_messages_sent_over_time(data) {
 | 
				
			|||||||
    var date_formatter = function (date) {
 | 
					    var date_formatter = function (date) {
 | 
				
			||||||
        return format_date(date, true);
 | 
					        return format_date(date, true);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    var hourly_traces = messages_sent_over_time_traces(start_dates, data.realm, 'bar', date_formatter, '#1f77b4', '#ff7f00');
 | 
					    var hourly_traces = messages_sent_over_time_traces(start_dates, data.realm, 'bar', date_formatter, '#5f6ea0', '#b7b867');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var info = aggregate_data('day');
 | 
					    var info = aggregate_data('day');
 | 
				
			||||||
    date_formatter = function (date) {
 | 
					    date_formatter = function (date) {
 | 
				
			||||||
        return format_date(date, false);
 | 
					        return format_date(date, false);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    var daily_traces = messages_sent_over_time_traces(info.dates, info.values, 'bar', date_formatter, '#1f77b4', '#ff7f00');
 | 
					    var daily_traces = messages_sent_over_time_traces(info.dates, info.values, 'bar', date_formatter, '#5f6ea0', '#b7b867');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    info = aggregate_data('week');
 | 
					    info = aggregate_data('week');
 | 
				
			||||||
    date_formatter = function (date) {
 | 
					    date_formatter = function (date) {
 | 
				
			||||||
@@ -256,14 +256,14 @@ function populate_messages_sent_over_time(data) {
 | 
				
			|||||||
        return "Week of " + format_date(date, false);
 | 
					        return "Week of " + format_date(date, false);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    var human_colors = info.dates.map(function () {
 | 
					    var human_colors = info.dates.map(function () {
 | 
				
			||||||
        return '#1f77b4';
 | 
					        return '#5f6ea0';
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    var bot_colors = info.dates.map(function () {
 | 
					    var bot_colors = info.dates.map(function () {
 | 
				
			||||||
        return '#ff7f00';
 | 
					        return '#b7b867';
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    human_colors[info.dates.length-1] = '#66b0e5';
 | 
					    human_colors[info.dates.length-1] = '#afb7d0';
 | 
				
			||||||
    bot_colors[info.dates.length-1] = '#ffa64d';
 | 
					    bot_colors[info.dates.length-1] = '#dbdcb3';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var weekly_traces = messages_sent_over_time_traces(info.dates, info.values, 'bar', date_formatter, human_colors, bot_colors);
 | 
					    var weekly_traces = messages_sent_over_time_traces(info.dates, info.values, 'bar', date_formatter, human_colors, bot_colors);
 | 
				
			||||||
    var dates = data.end_times.map(function (timestamp) {
 | 
					    var dates = data.end_times.map(function (timestamp) {
 | 
				
			||||||
@@ -273,7 +273,7 @@ function populate_messages_sent_over_time(data) {
 | 
				
			|||||||
    date_formatter = function (date) {
 | 
					    date_formatter = function (date) {
 | 
				
			||||||
        return format_date(date, true);
 | 
					        return format_date(date, true);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    var cumulative_traces = messages_sent_over_time_traces(dates, values, 'scatter', date_formatter, '#1f77b4', '#ff7f00');
 | 
					    var cumulative_traces = messages_sent_over_time_traces(dates, values, 'scatter', date_formatter, '#5f6ea0', '#b7b867');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Generate plot
 | 
					    // Generate plot
 | 
				
			||||||
    var layout = messages_sent_over_time_layout();
 | 
					    var layout = messages_sent_over_time_layout();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,7 +55,6 @@ svg {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.page-content {
 | 
					.page-content {
 | 
				
			||||||
    width: calc(100% - 300px - 8px);
 | 
					    width: calc(100% - 300px - 8px);
 | 
				
			||||||
    height: calc(100vh - 94px);
 | 
					 | 
				
			||||||
    overflow: auto;
 | 
					    overflow: auto;
 | 
				
			||||||
    display: inline-block;
 | 
					    display: inline-block;
 | 
				
			||||||
    vertical-align: top;
 | 
					    vertical-align: top;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,15 @@
 | 
				
			|||||||
{% extends "zerver/portico.html" %}
 | 
					{% extends "zerver/base.html" %}
 | 
				
			||||||
{% block portico_content %}
 | 
					
 | 
				
			||||||
 | 
					{% block customhead %}
 | 
				
			||||||
 | 
					{% stylesheet 'portico' %}
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content %}
 | 
				
			||||||
 | 
					<div class="app portico-page">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{ minified_js('stats')|safe }}
 | 
					{{ minified_js('stats')|safe }}
 | 
				
			||||||
{% stylesheet 'stats' %}
 | 
					{% stylesheet 'stats' %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<html>
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
<div class="sidebar">
 | 
					<div class="sidebar">
 | 
				
			||||||
    <nav class="nav">
 | 
					    <nav class="nav">
 | 
				
			||||||
        <p class="nav-subtitle">Messages Sent</p>
 | 
					        <p class="nav-subtitle">Messages Sent</p>
 | 
				
			||||||
@@ -18,7 +22,7 @@
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
<div class="page-content">
 | 
					<div class="page-content">
 | 
				
			||||||
  <div id="id_stats_errors" class="alert alert-error"></div>
 | 
					  <div id="id_stats_errors" class="alert alert-error"></div>
 | 
				
			||||||
  <h1 class="analytics-page-header">Analytics</h1>
 | 
					  <h1 class="analytics-page-header">Zulip Analytics for {{ realm_name }}</h1>
 | 
				
			||||||
  <div class="center-container">
 | 
					  <div class="center-container">
 | 
				
			||||||
    <div class="center-block">
 | 
					    <div class="center-block">
 | 
				
			||||||
      <p class="graph-title" id="messages_timescale_anchor">Messages Sent Over Time</p>
 | 
					      <p class="graph-title" id="messages_timescale_anchor">Messages Sent Over Time</p>
 | 
				
			||||||
@@ -79,7 +83,6 @@
 | 
				
			|||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
{% endblock %}
 | 
					{% endblock %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +1,2 @@
 | 
				
			|||||||
ZULIP_VERSION = "1.5.0"
 | 
					ZULIP_VERSION = "1.5.1"
 | 
				
			||||||
PROVISION_VERSION = '4.4'
 | 
					PROVISION_VERSION = '4.4'
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user