| {% extends "page.html" %} | {% extends "page.html" %} |
| {% block breadcrumb_content %} | {% block breadcrumb_content %} |
| <li class="active">{{ 'Statistics' }}</li> | <li class="active">{{ 'Statistics' }}</li> |
| {% endblock %} | {% endblock %} |
| {% block primary_content %} | {% block primary_content %} |
| <article class="module"> | <article class="module"> |
| {% if h.check_access('sysadmin') %} | {% if h.check_access('sysadmin') %} |
| <section id="stats-activity-counts" class="module-content tab-content"> | <section id="stats-activity-counts" class="module-content tab-content"> |
| <h2>{{ _('Site Activity Log') }}</h2> | <h2>{{ _('Site Activity Log') }}</h2> |
| {% if c.activity_counts %} | {% if c.activity_counts %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Month') }}</th> | <th>{{ _('Month') }}</th> |
| <th>{{ _('Activity Type') }}</th> | <th>{{ _('Activity Type') }}</th> |
| <th class="metric">{{ _('Count') }}</th> | <th class="metric">{{ _('Count') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for month, type, count in c.activity_counts %} | {% for month, type, count in c.activity_counts %} |
| <tr> | <tr> |
| <td>{{ month }}</td> | <td>{{ month }}</td> |
| <td>{{ type }}</td> | <td>{{ type }}</td> |
| <td class="metric">{{ count }}</td> | <td class="metric">{{ count }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| <section id="stats-recent-datasets" class="module-content tab-content"> | <section id="stats-recent-datasets" class="module-content tab-content"> |
| <h2>{{ _('Recent Datasets') }}</h2> | <h2>{{ _('Recent Datasets') }}</h2> |
| {% if c.recent_datasets %} | {% if c.recent_datasets %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Date') }}</th> | <th>{{ _('Date') }}</th> |
| <th>{{ _('Dataset') }}</th> | <th>{{ _('Dataset') }}</th> |
| <th>{{ _('New/Modified') }}</th> | <th>{{ _('New/Modified') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for date,package,newmodified in c.recent_datasets %} | {% for date,package,newmodified in c.recent_datasets %} |
| <tr> | <tr> |
| <td>{{ date }}</td> | <td>{{ date }}</td> |
| <td>{{ h.link_to(package.title or package.name, h.url_for(controller='package', action='read', id=package.name)) }}</td> | <td>{{ h.link_to(package.title or package.name, h.url_for(controller='package', action='read', id=package.name)) }}</td> |
| <td>{{ newmodified }}</td> | <td>{{ newmodified }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| <section id="stats-user-access-list" class="module-content tab-content"> | <section id="stats-user-access-list" class="module-content tab-content"> |
| <h2>{{ _('User Access List') }}</h2> | <h2>{{ _('User Access List') }}</h2> |
| {% if c.user_access_list %} | {% if c.user_access_list %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Username') }}</th> | <th>{{ _('Username') }}</th> |
| <th>{{ _('Sysadmin') }}</th> | <th>{{ _('Sysadmin') }}</th> |
| <th class="metric">{{ _('Organisational Role') }}</th> | <th class="metric">{{ _('Organisational Role') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for username,sysadmin,role in c.user_access_list %} | {% for username,sysadmin,role in c.user_access_list %} |
| <tr> | <tr> |
| <td>{{ username }}</td> | <td>{{ username }}</td> |
| <td>{{ sysadmin }}</td> | <td>{{ sysadmin }}</td> |
| <td>{{ role }}</td> | <td>{{ role }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| {% endif %} | {% endif %} |
| <section id="stats-total-datasets" class="module-content tab-content active"> | <section id="stats-total-datasets" class="module-content tab-content active"> |
| <h2>{{ _('Total number of Datasets') }}</h2> | <h2>{{ _('Total number of Datasets') }}</h2> |
| {% set xaxis = {'mode': 'time', 'timeformat': '%y-%b'} %} | {% set xaxis = {'mode': 'time', 'timeformat': '%y-%b'} %} |
| {% set yaxis = {'min': 0} %} | {% set yaxis = {'min': 0} %} |
| <table class="table table-chunky table-bordered table-striped" data-module="plot" data-module-xaxis="{{ h.dump_json(xaxis) }}" data-module-yaxis="{{ h.dump_json(yaxis) }}"> | <table class="table table-chunky table-bordered table-striped" data-module="plot" data-module-xaxis="{{ h.dump_json(xaxis) }}" data-module-yaxis="{{ h.dump_json(yaxis) }}"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _("Date") }}</th> | <th>{{ _("Date") }}</th> |
| <th>{{ _("Total datasets") }}</th> | <th>{{ _("Total datasets") }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for row in c.raw_packages_by_week %} | {% for row in c.raw_packages_by_week %} |
| <tr> | <tr> |
| <th data-type="date" data-value="{{ row.date.strftime("%s") }}"><time datetime="{{ row.date.isoformat() }}">{{ h.render_datetime(row.date) }}</time></th> | <th data-type="date" data-value="{{ row.date.strftime("%s") }}"><time datetime="{{ row.date.isoformat() }}">{{ h.render_datetime(row.date) }}</time></th> |
| <td>{{ row.total_packages }}</td> | <td>{{ row.total_packages }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| </section> | </section> |
| <section id="stats-dataset-revisions" class="module-content tab-content"> | <section id="stats-dataset-revisions" class="module-content tab-content"> |
| <h2>{{ _('Dataset Revisions per Week') }}</h2> | <h2>{{ _('Dataset Revisions per Week') }}</h2> |
| {% set xaxis = {'mode': 'time', 'timeformat': '%y-%b'} %} | {% set xaxis = {'mode': 'time', 'timeformat': '%y-%b'} %} |
| {% set lines = {'fill': 1} %} | {% set lines = {'fill': 1} %} |
| <table class="table table-chunky table-bordered table-striped" data-module="plot" data-module-xaxis="{{ h.dump_json(xaxis) }}" data-module-lines="{{ h.dump_json(lines) }}"> | <table class="table table-chunky table-bordered table-striped" data-module="plot" data-module-xaxis="{{ h.dump_json(xaxis) }}" data-module-lines="{{ h.dump_json(lines) }}"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _("Date") }}</th> | <th>{{ _("Date") }}</th> |
| <th>{{ _("All dataset revisions") }}</th> | <th>{{ _("All dataset revisions") }}</th> |
| <th>{{ _("New datasets") }}</th> | <th>{{ _("New datasets") }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for row in c.raw_all_package_revisions %} | {% for row in c.raw_all_package_revisions %} |
| <tr> | <tr> |
| <th data-type="date" data-value="{{ row.date.strftime("%s") }}"><time datetime="{{ row.date.isoformat() }}">{{ h.render_datetime(row.date) }}</time></th> | <th data-type="date" data-value="{{ row.date.strftime("%s") }}"><time datetime="{{ row.date.isoformat() }}">{{ h.render_datetime(row.date) }}</time></th> |
| <td>{{ row.total_revisions }}</td> | <td>{{ row.total_revisions }}</td> |
| <td>{{ c.raw_new_datasets[loop.index0].new_packages }}</td> | <td>{{ c.raw_new_datasets[loop.index0].new_packages }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| </section> | </section> |
| <section id="stats-most-edited" class="module-content tab-content"> | <section id="stats-most-edited" class="module-content tab-content"> |
| <h2>{{ _('Most Edited Datasets') }}</h2> | <h2>{{ _('Most Edited Datasets') }}</h2> |
| {% if c.most_edited_packages %} | {% if c.most_edited_packages %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Dataset') }}</th> | <th>{{ _('Dataset') }}</th> |
| <th class="metric">{{ _('Number of edits') }}</th> | <th class="metric">{{ _('Number of edits') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for package, edits in c.most_edited_packages %} | {% for package, edits in c.most_edited_packages %} |
| <tr py:for="package, edits in c.most_edited_packages"> | <tr py:for="package, edits in c.most_edited_packages"> |
| <td>{{ h.link_to(package.title or package.name, h.url_for(controller='package', action='read', id=package.name)) }}</td> | <td>{{ h.link_to(package.title or package.name, h.url_for(controller='package', action='read', id=package.name)) }}</td> |
| <td class="metric">{{ edits }}</td> | <td class="metric">{{ edits }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No edited datasets') }}</p> | <p class="empty">{{ _('No edited datasets') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| <section id="stats-largest-groups" class="module-content tab-content"> | <section id="stats-largest-groups" class="module-content tab-content"> |
| <h2>{{ _('Largest Groups') }}</h2> | <h2>{{ _('Largest Groups') }}</h2> |
| {% if c.largest_groups %} | {% if c.largest_groups %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Group') }}</th> | <th>{{ _('Group') }}</th> |
| <th class="metric">{{ _('Number of datasets') }}</th> | <th class="metric">{{ _('Number of datasets') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for group, num_packages in c.largest_groups %} | {% for group, num_packages in c.largest_groups %} |
| <tr> | <tr> |
| <td>{{ h.link_to(group.title or group.name, h.url_for(controller='group', action='read', id=group.name)) }}</td> | <td>{{ h.link_to(group.title or group.name, h.url_for(controller='group', action='read', id=group.name)) }}</td> |
| <td class="metric">{{ num_packages }}</td> | <td class="metric">{{ num_packages }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| <section id="stats-by-org" class="module-content tab-content"> | <section id="stats-by-org" class="module-content tab-content"> |
| <h2>{{ _('Datasets by Organization') }}</h2> | <h2>{{ _('Datasets by Organization') }}</h2> |
| {% if c.by_org %} | {% if c.by_org %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Organisation') }}</th> | <th>{{ _('Organisation') }}</th> |
| <th>{{ _('Public/Archived') }}</th> | <th>{{ _('Public/Archived') }}</th> |
| <th class="metric">{{ _('Number of datasets') }}</th> | <th class="metric">{{ _('Number of datasets') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for group,private, num_packages in c.by_org %} | {% for group,private, num_packages in c.by_org %} |
| {% if private == False or h.check_access('sysadmin') %} | {% if private == False or h.check_access('sysadmin') %} |
| <tr> | <tr> |
| <td>{{ h.link_to(group.title or group.name, h.url_for(controller='organization', action='read', id=group.name)) }}</td> | <td>{{ h.link_to(group.title or group.name, h.url_for(controller='organization', action='read', id=group.name)) }}</td> |
| {% if private == True %} | {% if private == True %} |
| <td>Archived</td> | <td>Archived</td> |
| {% else %} | {% else %} |
| <td>Public</td> | <td>Public</td> |
| {% endif %} | {% endif %} |
| <td class="metric">{{ num_packages }}</td> | <td class="metric">{{ num_packages }}</td> |
| </tr> | </tr> |
| {% endif %} | {% endif %} |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| <section id="stats-res-by-org" class="module-content tab-content"> | <section id="stats-res-by-org" class="module-content tab-content"> |
| <h2>{{ _('Resources by Organization') }}</h2> | <h2>{{ _('Resources by Organization') }}</h2> |
| {% if c.res_by_org %} | {% if c.res_by_org %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Organisation') }}</th> | <th>{{ _('Organisation') }}</th> |
| <th>{{ _('Tabular') }}</th> | <th>{{ _('Tabular') }}</th> |
| <th>{{ _('Spatial') }}</th> | <th>{{ _('Spatial') }}</th> |
| <th>{{ _('Other') }}</th> | <th>{{ _('Other') }}</th> |
| <th class="metric">{{ _('Total') }}</th> | <th class="metric">{{ _('Total') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for group,t,s,o,tot in c.res_by_org %} | {% for group,t,s,o,tot in c.res_by_org %} |
| <tr> | <tr> |
| <td>{{ h.link_to(group.title or group.name, h.url_for(controller='organization', action='read', id=group.name)) }}</td> | <td>{{ h.link_to(group.title or group.name, h.url_for(controller='organization', action='read', id=group.name)) }}</td> |
| <td>{{ t }}</td> | <td>{{ t }}</td> |
| <td>{{ s }}</td> | <td>{{ s }}</td> |
| <td>{{ o }}</td> | <td>{{ o }}</td> |
| <td class="metric">{{ tot }}</td> | <td class="metric">{{ tot }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| <section id="stats-activity-org" class="module-content tab-content"> | <section id="stats-activity-org" class="module-content tab-content"> |
| <h2>{{ _('Most Active Organisations') }}</h2> | <h2>{{ _('Most Active Organisations') }}</h2> |
| {% if c.top_active_orgs %} | {% if c.top_active_orgs %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Organisation') }}</th> | <th>{{ _('Organisation') }}</th> |
| <th class="metric">{{ _('Number of datasets updated recently') }}</th> | <th class="metric">{{ _('Number of datasets updated recently') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for group, num_packages in c.top_active_orgs %} | {% for group, num_packages in c.top_active_orgs %} |
| <tr> | <tr> |
| <td>{{ h.link_to(group.title or group.name, h.url_for(controller='organization', action='read', id=group.name)) }}</td> | <td>{{ h.link_to(group.title or group.name, h.url_for(controller='organization', action='read', id=group.name)) }}</td> |
| <td class="metric">{{ num_packages }}</td> | <td class="metric">{{ num_packages }}</td> |
| </tr> | </tr> |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| <section id="stats-summary" class="module-content tab-content"> | <section id="stats-summary" class="module-content tab-content"> |
| <h2>{{ _('Summary') }}</h2> | <h2>{{ _('Summary') }}</h2> |
| {% if c.summary_stats %} | {% if c.summary_stats %} |
| <table class="table table-chunky table-bordered table-striped"> | <table class="table table-chunky table-bordered table-striped"> |
| <thead> | <thead> |
| <tr> | <tr> |
| <th>{{ _('Measure') }}</th> | <th>{{ _('Measure') }}</th> |
| <th class="metric">{{ _('Value') }}</th> | <th class="metric">{{ _('Value') }}</th> |
| </tr> | </tr> |
| </thead> | </thead> |
| <tbody> | <tbody> |
| {% for measure,value in c.summary_stats %} | {% for measure,value in c.summary_stats %} |
| {% if 'Archived' not in measure or h.check_access('sysadmin') %} | {% if 'Archived' not in measure or h.check_access('sysadmin') %} |
| <tr> | <tr> |
| <td>{{measure}}</td> | <td>{{measure}}</td> |
| <td class="metric">{{ value }}</td> | <td class="metric">{{ value }}</td> |
| </tr> | </tr> |
| {% endif %} | {% endif %} |
| {% endfor %} | {% endfor %} |
| </tbody> | </tbody> |
| </table> | </table> |
| {% else %} | {% else %} |
| <p class="empty">{{ _('No groups') }}</p> | <p class="empty">{{ _('No groups') }}</p> |
| {% endif %} | {% endif %} |
| </section> | </section> |
| </article> | </article> |
| {% endblock %} | {% endblock %} |
| {% block secondary_content %} | {% block secondary_content %} |
| <section class="module module-narrow"> | <section class="module module-narrow"> |
| <h2 class="module-heading"><i class="icon-bar-chart icon-medium"></i> {{ _('Statistics Menu') }}</h2> | <h2 class="module-heading"><i class="icon-bar-chart icon-medium"></i> {{ _('Statistics Menu') }}</h2> |
| <nav data-module="stats-nav"> | <nav data-module="stats-nav"> |
| <ul class="unstyled nav nav-simple"> | <ul class="unstyled nav nav-simple"> |
| {% if h.check_access('sysadmin') %} | {% if h.check_access('sysadmin') %} |
| <li class="nav-item"><a href="#stats-recent-datasets" data-toggle="tab">{{ _('Recent Datasets') }}</a></li> | <li class="nav-item"><a href="#stats-recent-datasets" data-toggle="tab">{{ _('Recent Datasets') }}</a></li> |
| <li class="nav-item"><a href="#stats-user-access-list" data-toggle="tab">{{ _('User Access List') }}</a></li> | <li class="nav-item"><a href="#stats-user-access-list" data-toggle="tab">{{ _('User Access List') }}</a></li> |
| {% endif %} | {% endif %} |
| <li class="nav-item"><a href="#stats-total-datasets" data-toggle="tab">{{ _('Total Number of Datasets') }}</a></li> | <li class="nav-item"><a href="#stats-total-datasets" data-toggle="tab">{{ _('Total Number of Datasets') }}</a></li> |
| <li class="nav-item"><a href="#stats-dataset-revisions" data-toggle="tab">{{ _('Dataset Revisions per Week') }}</a></li> | <li class="nav-item"><a href="#stats-dataset-revisions" data-toggle="tab">{{ _('Dataset Revisions per Week') }}</a></li> |
| <li class="nav-item"><a href="#stats-most-edited" data-toggle="tab">{{ _('Most Edited Datasets') }}</a></li> | <li class="nav-item"><a href="#stats-most-edited" data-toggle="tab">{{ _('Most Edited Datasets') }}</a></li> |
| <li class="nav-item"><a href="#stats-by-org" data-toggle="tab">{{ _('Datasets by Organization') }}</a></li> | <li class="nav-item"><a href="#stats-by-org" data-toggle="tab">{{ _('Datasets by Organization') }}</a></li> |
| <li class="nav-item"><a href="#stats-res-by-org" data-toggle="tab">{{ _('Resources by Organization') }}</a></li> | <li class="nav-item"><a href="#stats-res-by-org" data-toggle="tab">{{ _('Resources by Organization') }}</a></li> |