diff --git a/tools/donate-cpu-server.py b/tools/donate-cpu-server.py index 1a2afc290..4b25ac294 100644 --- a/tools/donate-cpu-server.py +++ b/tools/donate-cpu-server.py @@ -2,6 +2,7 @@ # Server for 'donate-cpu.py' import glob +import json import os import socket import re @@ -242,36 +243,22 @@ def diffReport(resultsPath): outToday = {} today = strDateTime()[:10] - for filename in sorted(glob.glob(resultsPath + '/*')): + for filename in sorted(glob.glob(resultsPath + '/*.diff')): if not os.path.isfile(filename): continue - uploadedToday = False - firstLine = True - for line in open(filename, 'rt'): - if firstLine: - if line.startswith(today): - uploadedToday = True - firstLine = False - continue - line = line.strip() - if not line.endswith(']'): - continue - index = None - if line.startswith(OLD_VERSION + ' '): - index = 0 - elif line.startswith('head '): - index = 1 - else: - continue - messageId = line[line.rfind('[')+1:len(line)-1] - + with open(filename, 'rt') as f: + data = json.loads(f.read()) + uploadedToday = data['date'] == today + for messageId, sums in data['sums']: if messageId not in out: out[messageId] = [0, 0] - out[messageId][index] += 1 + out[messageId][0] += sums[OLD_VERSION] + out[messageId][1] += sums['head'] if uploadedToday: if messageId not in outToday: outToday[messageId] = [0, 0] - outToday[messageId][index] += 1 + outToday[messageId][0] += sums[OLD_VERSION] + outToday[messageId][1] += sums['head'] html = 'Diff report\n' html += '

Diff report

\n' @@ -283,6 +270,46 @@ def diffReport(resultsPath): return html +def generate_package_diff_statistics(filename): + is_diff = False + + sums = {} + + for line in open(filename, 'rt'): + line = line.strip() + if line == 'diff:': + is_diff = True + continue + elif not is_diff: + continue + if not line.endswith(']'): + continue + + version = None + if line.startswith(OLD_VERSION + ' '): + version = OLD_VERSION + elif line.startswith('head '): + version = 'head' + else: + continue + + messageId = line[line.rfind('[')+1:len(line)-1] + + if messageId not in sums: + sums[messageId] = { OLD_VERSION: 0, 'head': 0 } + + sums[messageId][version] += 1 + + output = { 'date': strDateTime()[:10], 'sums': sums } + + filename_diff = filename + '.diff' + if sums: + with open(filename_diff, 'wt') as f: + f.write(json.dumps(output)) + elif os.path.isfile(filename_diff): + os.remove(filename_diff) + + def diffMessageIdReport(resultPath, messageId): text = messageId + '\n' e = '[' + messageId + ']\n' @@ -823,7 +850,7 @@ def server(server_address_port, packages, packageIndex, resultPath): if old_version_wrong: continue print('results added for package ' + res.group(1)) - filename = resultPath + '/' + res.group(1) + filename = os.path.join(resultPath, res.group(1)) with open(filename, 'wt') as f: f.write(strDateTime() + '\n' + data) # track latest added results.. @@ -832,6 +859,8 @@ def server(server_address_port, packages, packageIndex, resultPath): latestResults.append(filename) with open('latest.txt', 'wt') as f: f.write(' '.join(latestResults)) + # generate package.diff.. + generate_package_diff_statistics(filename) elif cmd.startswith('write_info\nftp://'): # read data data = cmd[11:]