diff --git a/out/static/lookup-rank.js b/out/static/lookup-rank.js new file mode 100644 index 0000000..c462b74 --- /dev/null +++ b/out/static/lookup-rank.js @@ -0,0 +1,43 @@ +function lookup_rank_js(bundle_id) { + loadJSON('/stats/rank.json', function(response) { + let json = JSON.parse(response); + if (!json) { return; } + let rank = json[bundle_id]; + let rank_max = json['_ranks']; + if (!rank || !rank_max) { return; } + + let best = json['_min']; + let worst = json['_max']; + + function update(i, id, fmt=String) { + let r = (rank[i] - 1) / (rank_max - 1); + let target = document.getElementById(id); + let bar = target.querySelector('.percentile'); + bar.classList.add(r < 0.5 ? 'g' : 'b'); + bar.firstChild.style.left = r * 100 + '%'; + let meta = target.lastElementChild.children; + meta[0].innerHTML = rank[i]; + meta[1].innerHTML = fmt(best[i]); + meta[2].innerHTML = fmt(worst[i]); + } + // formatting + function dot1(x) { return Math.round(x * 10) / 10; } + function as_percent(x) { return dot1(x * 100) + '%'; } + function as_pm(x) { return dot1(x) + '/min'; } + function HHmmss(seconds) { + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = Math.round(seconds % 60); + return (h<10?'0'+h:h)+':'+(m<10?'0'+m:m)+':'+(s<10?'0'+s:s); + } + // order is important! + update(0, 'sum_rec'); + update(1, 'avg_time', HHmmss); + update(2, 'sum_time', HHmmss); + update(3, 'avg_logs_pm', as_pm); + update(4, 'sum_logs_pm', as_pm); + update(5, 'pardom'); + update(6, 'subdom'); + update(7, 'tracker_percent', as_percent); + }); +} \ No newline at end of file diff --git a/src/html_bundle.py b/src/html_bundle.py index 5561224..2ab7ec1 100755 --- a/src/html_bundle.py +++ b/src/html_bundle.py @@ -7,7 +7,6 @@ import common_lib as mylib import download_itunes # get_genres import bundle_combine # get_evaluated, fname_evaluated import index_app_names # get_name -import index_meta # get_rank def gen_dotgraph(sorted_arr): @@ -94,27 +93,22 @@ def gen_html(bundle_id, obj): hours, minutes = divmod(minutes, 60) return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds) - def stat(col, title, rank, value, optional=None, fmt=str, fmt2=None): - # percent = int(rank[0] / max_rank * 100) - r = rank[0] / max_rank - detail = fmt2(value) if fmt2 else fmt(value) + def stat(col, title, ident, value, optional=None): if optional: - x = fmt(optional) if fmt2 else optional - detail += '({})'.format(x) - return f''' -
- Rank: {rank[0]}, - best: {fmt(rank[1])}, - worst: {fmt(rank[2])}
-Download: json
''', title=name) +Download: json
+ +''', title=name) def process(bundle_ids): diff --git a/src/index_meta.py b/src/index_meta.py index 72aef58..8fbbdce 100755 --- a/src/index_meta.py +++ b/src/index_meta.py @@ -22,32 +22,34 @@ def load_json_from_disk(fname): def json_to_list(json): return [ json['sum_rec'], - json['sum_logs'], - json['sum_logs_pm'], - json['sum_time'], - json['avg_logs'], - json['avg_logs_pm'], json['avg_time'], - json['last_date'], + json['sum_time'], + json['avg_logs_pm'], + json['sum_logs_pm'], len(json['pardom']), len(json['subdom']), - json['tracker_percent'] + json['tracker_percent'], + # v- not part of rank -v + json['sum_logs'], + json['avg_logs'], + json['last_date'], ] def list_to_json(list): return { 'sum_rec': list[0], - 'sum_logs': list[1], - 'sum_logs_pm': list[2], - 'sum_time': list[3], - 'avg_logs': list[4], - 'avg_logs_pm': list[5], - 'avg_time': list[6], - 'last_date': list[7], - 'pardom': list[8], - 'subdom': list[9], - 'tracker_percent': list[10] + 'avg_time': list[1], + 'sum_time': list[2], + 'avg_logs_pm': list[3], + 'sum_logs_pm': list[4], + 'pardom': list[5], + 'subdom': list[6], + 'tracker_percent': list[7], + # v- not part of rank -v + 'sum_logs': list[8], + 'avg_logs': list[9], + 'last_date': list[10], } @@ -65,7 +67,7 @@ def write_summary_index(index, bundle_ids, deleteOnly=False): total = [0, 0] for val in index.values(): total[0] += val[0] - total[1] += val[1] + total[1] += val[8] index['_sum'] = total mylib.json_write(fname_app_summary(), index, pretty=False) @@ -75,7 +77,7 @@ def write_rank_index(index): mins = [] maxs = [] if len(index) > 0: - for i in range(11): # equal to number of array entries + for i in range(8): # exclude unused columns tmp = {} # make temporary reverse index for bid, val in index.items(): @@ -85,7 +87,7 @@ def write_rank_index(index): tmp[val[i]] = [bid] # read index position from temp reverse index r = 1 - ordered = sorted(tmp.items(), reverse=i in [0, 3, 6, 7]) + ordered = sorted(tmp.items(), reverse=i in [0, 1, 2]) for idx, (_, ids) in enumerate(ordered): for bid in ids: index[bid][i] = r @@ -95,7 +97,10 @@ def write_rank_index(index): index['_ranks'] = len(index) index['_min'] = mins index['_max'] = maxs - mylib.json_write(fname_app_rank(), index, pretty=False) + # write evaluated file + fname = fname_app_rank() + mylib.json_write(fname, index, pretty=False) + mylib.symlink(fname, mylib.path_out('stats', 'rank.json')) def get_total_counts(): @@ -105,18 +110,6 @@ def get_total_counts(): return [0, 0] -def get_rank(bundle_id): - ''' Return tuples with (rank, max_rank, min_value, max_value) ''' - global _rank_dict - if not _rank_dict: - _rank_dict = load_json_from_disk(fname_app_rank()) - return list_to_json(list(zip( - _rank_dict[bundle_id], - _rank_dict['_min'], - _rank_dict['_max'], - ))), _rank_dict['_ranks'] - - def process(bundle_ids, deleteOnly=False): print('writing index: meta ...') fname = fname_app_summary()