From 6d79479347752e450e9a8eeb4fbac84691044c67 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Tue, 7 Jul 2020 17:10:38 -0700 Subject: update container view stats - show release type counts - new-style preservation status (single bar) - show release_type preservation break down on coverage page --- python/fatcat_web/routes.py | 5 ++ python/fatcat_web/search.py | 10 +-- python/fatcat_web/templates/container_view.html | 50 ++++++------ .../templates/container_view_coverage.html | 89 +++++++++------------- python/fatcat_web/templates/entity_macros.html | 89 ++++++++++++++++++++++ 5 files changed, 158 insertions(+), 85 deletions(-) (limited to 'python') diff --git a/python/fatcat_web/routes.py b/python/fatcat_web/routes.py index 34cf2d50..93522fec 100644 --- a/python/fatcat_web/routes.py +++ b/python/fatcat_web/routes.py @@ -200,6 +200,10 @@ def generic_entity_view(entity_type, ident, view_template): metadata.pop('extra') entity._metadata = metadata + if view_template == "container_view_coverage.html": + entity._type_preservation = get_elastic_container_preservation_by_type(ident) + print(entity._type_preservation) + return render_template(view_template, entity_type=entity_type, entity=entity, editgroup_id=None) def generic_entity_revision_view(entity_type, revision_id, view_template): @@ -240,6 +244,7 @@ def container_underscore_view(ident): @app.route('/container//coverage', methods=['GET']) def container_view_coverage(ident): + # note: there is a special hack to add entity._type_preservation for this endpoint return generic_entity_view('container', ident, 'container_view_coverage.html') @app.route('/container//metadata', methods=['GET']) diff --git a/python/fatcat_web/search.py b/python/fatcat_web/search.py index 9703a434..78cde383 100644 --- a/python/fatcat_web/search.py +++ b/python/fatcat_web/search.py @@ -417,6 +417,7 @@ def get_elastic_container_stats(ident, issnl=None): container_stats = resp.aggregations.container_stats.buckets preservation_bucket = agg_to_dict(resp.aggregations.preservation) + preservation_bucket['total'] = resp.hits.total for k in ('bright', 'dark', 'shadows_only', 'none'): if not k in preservation_bucket: preservation_bucket[k] = 0 @@ -429,7 +430,7 @@ def get_elastic_container_stats(ident, issnl=None): 'in_kbart': container_stats['in_kbart']['doc_count'], 'is_preserved': container_stats['is_preserved']['doc_count'], 'preservation': preservation_bucket, - 'release_types': release_type_bucket, + 'release_type': release_type_bucket, } return stats @@ -632,7 +633,6 @@ def get_elastic_container_preservation_by_type(container_id: str) -> List[dict]: "terms": { "field": "release_type", }, - "missing": "_unknown", }}, {"preservation": { "terms": { @@ -645,14 +645,14 @@ def get_elastic_container_preservation_by_type(container_id: str) -> List[dict]: resp = wrap_es_execution(search) - buckets = resp.aggregations.volume_preservation.buckets + buckets = resp.aggregations.type_preservation.buckets type_set = set([h['key']['release_type'] for h in buckets]) type_dicts = dict() for k in type_set: - type_dicts[k] = dict(release_type=t, bright=0, dark=0, shadows_only=0, none=0, total=0) + type_dicts[k] = dict(release_type=k, bright=0, dark=0, shadows_only=0, none=0, total=0) for row in buckets: type_dicts[row['key']['release_type']][row['key']['preservation']] = int(row['doc_count']) for k in type_set: for p in ('bright', 'dark', 'shadows_only', 'none'): type_dicts[k]['total'] += type_dicts[k][p] - return sorted(type_dicts.values(), key=lambda x: x['total']) + return sorted(type_dicts.values(), key=lambda x: x['total'], reverse=True) diff --git a/python/fatcat_web/templates/container_view.html b/python/fatcat_web/templates/container_view.html index cf444956..785ad1ee 100644 --- a/python/fatcat_web/templates/container_view.html +++ b/python/fatcat_web/templates/container_view.html @@ -64,35 +64,33 @@
Known Releases
+ +
+ Preservation Status
{% if container._stats.total >= 1 %} - - {% set frac_kbart = container._stats.in_kbart/container._stats.total %} - {% set frac_preserved = container._stats.is_preserved/container._stats.total %} - {% set frac_web = container._stats.in_web/container._stats.total %} - -
-
-
{{ (frac_web*100)|int }}%
-
-
- {{ "{:,}".format(container._stats.in_web) }} preserved and available (bright) - -
-
-
{{ (frac_preserved*100)|int }}%
-
-
- {{ "{:,}".format(container._stats.is_preserved) }} preserved at all (bright or dark) - -
-
-
{{ (frac_kbart*100)|int }}%
-
-
- {{ "{:,}".format(container._stats.in_kbart ) }} preserved by Keeper (dark) - + {{ entity_macros.preservation_bar(container._stats.preservation) }} + {{ entity_macros.preservation_small_table(container._stats.preservation) }} {% endif %}
+{% if container._stats.total >= 1 %} +{% endif %} +
+ Work Types
+ + + {% for type_row in container._stats.release_type %} + + +
+ {% if type_row == "_unknown" %} + Unknown + {% else %} + {{ type_row }} + {% endif %} + {{ container._stats.release_type[type_row] }} + {% endfor %} +
+
{% endif %} {% if container.issnl != None or container.wikidata_qid != None %} diff --git a/python/fatcat_web/templates/container_view_coverage.html b/python/fatcat_web/templates/container_view_coverage.html index fc643f81..fd173cd4 100644 --- a/python/fatcat_web/templates/container_view_coverage.html +++ b/python/fatcat_web/templates/container_view_coverage.html @@ -14,73 +14,54 @@
Known Releases
{% if container._stats.total >= 1 %} - - {% set frac_kbart = container._stats.in_kbart/container._stats.total %} - {% set frac_preserved = container._stats.is_preserved/container._stats.total %} - {% set frac_web = container._stats.in_web/container._stats.total %} - - {% set pstats = container._stats.preservation %} - {% set frac_bright = container._stats.preservation.bright/container._stats.total %} - {% set frac_dark = container._stats.preservation.dark/container._stats.total %} - {% set frac_shadows_only = container._stats.preservation.shadows_only/container._stats.total %} - {% set frac_none = container._stats.preservation.none/container._stats.total %} - -
-
-
{# {{ (frac_bright*100)|int }}% #}
-
-
-
{# {{ (frac_dark*100)|int }}% #}
-
-
-
{# {{ (frac_shadows_only*100)|int }}% #}
-
-
-
{# {{ (frac_none*100)|int }}% #}
-
-
- - - - - - - -
- {{ "{:,}".format(pstats.bright) }} - {{ (frac_bright*100)|round(2,method='ceil') }}% - preserved and publicly available (bright) -
- {{ "{:,}".format(pstats.dark) }} - {{ (frac_dark*100)|round(2,method='ceil') }}% - preserved but not publicly accessible (dark) -
- {{ "{:,}".format(pstats.shadows_only) }} - {{ (frac_shadows_only*100)|round(2,method='ceil') }}% - only independently preserved in "shadow" libraries -
- {{ "{:,}".format(pstats.none) }} - {{ (frac_none*100)|round(2,method='ceil') }}% - no known independent preservation -
- + {{ entity_macros.preservation_bar(container._stats.preservation, extra_class="large") }} + {{ entity_macros.preservation_table(container._stats.preservation) }} {% endif %} {% if container._stats.total >= 1 %} -
-
+

Perpetual Access Coverage by Year

- + +
+ +
+ Download as JSON +
+ +

+

Perpetual Access Coverage by Volume

+ +
+
- Download as JSON + Download as JSON
+ +

+

Perpetual Access Coverage by Release Type

+ + + + + + {% for type_row in container._type_preservation %} + + +
Release Type + Total Count + Coverage +
{{ type_row.release_type }} + {{ type_row.total }} + {{ entity_macros.preservation_bar(type_row) }} + {% endfor %} +
{% endif %} {% endblock %} diff --git a/python/fatcat_web/templates/entity_macros.html b/python/fatcat_web/templates/entity_macros.html index 8e4c4f6a..c3ae099a 100644 --- a/python/fatcat_web/templates/entity_macros.html +++ b/python/fatcat_web/templates/entity_macros.html @@ -260,3 +260,92 @@ yellow {% endif %} {%- endmacro %} + +{% macro preservation_bar(stats, extra_class="") -%} + + {% set frac_bright = stats.bright/stats.total %} + {% set frac_dark = stats.dark/stats.total %} + {% set frac_shadows_only = stats.shadows_only/stats.total %} + {% set frac_none = stats.none/stats.total %} + +
+
+
{# {{ (frac_bright*100)|int }}% #}
+
+
+
{# {{ (frac_dark*100)|int }}% #}
+
+
+
{# {{ (frac_shadows_only*100)|int }}% #}
+
+
+
{# {{ (frac_none*100)|int }}% #}
+
+
+ + +{%- endmacro %} + +{% macro preservation_table(stats) -%} + + {% set frac_bright = stats.bright/stats.total %} + {% set frac_dark = stats.dark/stats.total %} + {% set frac_shadows_only = stats.shadows_only/stats.total %} + {% set frac_none = stats.none/stats.total %} + + + + + + + + +
+ {{ "{:,}".format(stats.bright) }} + {{ (frac_bright*100)|round(2,method='ceil') }}% + preserved and publicly available (bright) +
+ {{ "{:,}".format(stats.dark) }} + {{ (frac_dark*100)|round(2,method='ceil') }}% + preserved but not publicly accessible (dark) +
+ {{ "{:,}".format(stats.shadows_only) }} + {{ (frac_shadows_only*100)|round(2,method='ceil') }}% + only independently preserved in "shadow" libraries +
+ {{ "{:,}".format(stats.none) }} + {{ (frac_none*100)|round(2,method='ceil') }}% + no known independent preservation +
+ +{%- endmacro %} + +{% macro preservation_small_table(stats) -%} + + {% set frac_bright = stats.bright/stats.total %} + {% set frac_dark = stats.dark/stats.total %} + {% set frac_shadows_only = stats.shadows_only/stats.total %} + {% set frac_none = stats.none/stats.total %} + + + + + + + + +
+ {{ "{:,}".format(stats.bright) }} + preserved and accessble (bright) +
+ {{ "{:,}".format(stats.dark) }} + preserved, inaccessible (dark) +
+ {{ "{:,}".format(stats.shadows_only) }} + shadow library only +
+ {{ "{:,}".format(stats.none) }} + no known preservation +
+ +{%- endmacro %} -- cgit v1.2.3