diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/Makefile.am | 10 | ||||
-rw-r--r-- | contrib/auditor-report.tex.j2 | 86 | ||||
-rwxr-xr-x | contrib/render.py | 58 |
3 files changed, 84 insertions, 70 deletions
diff --git a/contrib/Makefile.am b/contrib/Makefile.am index eb4ad312d..76443cbca 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -6,6 +6,8 @@ tosendir=$(pkgdatadir)/tos/en # English (en) ppendir=$(pkgdatadir)/pp/en +rdatadir=$(pkgdatadir) + tosen_DATA = \ tos/en/0.txt \ tos/en/0.pdf \ @@ -20,6 +22,9 @@ ppen_DATA = \ pp/en/0.xml \ pp/en/0.html +rdata_DATA = \ + auditor-report.tex.j2 + bin_SCRIPTS = \ taler-bank-manage-testing \ taler-exchange-revoke @@ -39,11 +44,10 @@ EXTRA_DIST = \ pp/tos.rst \ pp/conf.py \ pp/locale/pp/LC_MESSAGES/pp.po \ - auditor-report.tex.j2 \ + $(data_DATA) \ coverage.sh \ gnunet.tag \ - microhttpd.tag \ - render.py + microhttpd.tag # Change the set of supported languages here. You should # also update tos'XX'data and EXTRA_DIST accordingly. diff --git a/contrib/auditor-report.tex.j2 b/contrib/auditor-report.tex.j2 index ccb249dd3..d826de446 100644 --- a/contrib/auditor-report.tex.j2 +++ b/contrib/auditor-report.tex.j2 @@ -467,9 +467,49 @@ the financial damage done to the customer). Note that the deltas only sum up the issues where $P \not= 0$ as only then we can tell if the problem lead to a profit or loss. +The {\bf P} colum is set to "1" if the arithmetic problem was be determined to be +profitable for the exchange, "-1" if the problem resulted in a net loss for +the exchange, and "0" if this is unclear or at least the gain/loss is not +easily determined from the amounts and thus not included in the totals. + +\subsubsection{For aggregation} + +% Table generation tested by testcase #XX in test-auditor.sh + +{% if aggregation.amount_arithmetic_inconsistencies|length() == 0 %} + {\bf No arithmetic problems detected.} +{% else %} + \begin{longtable}{p{3.5cm}|r|r|r|c} + {\bf Operation} & {\bf Row} & {\bf Exchange} & {\bf Auditor} & {\bf P} \\ + \hline \hline +\endfirsthead + {\bf Operation} & {\bf Row} & {\bf Exchange} & {\bf Auditor} & {\bf P} \\ \hline \hline +\endhead + \hline \hline + {\bf Operation} & {\bf Row} & {\bf Exchange} & {\bf Auditor} & {\bf P} \\ +\endfoot + \hline \hline + \multicolumn{2}{l|}{ {\bf $\sum$ Deltas (Auditor-Exchange)} } & + + {{ aggregation.total_arithmetic_delta_plus }} & + - {{ aggregation.total_arithmetic_delta_minus }} & \\ + \caption{Arithmetic inconsistencies.} + \label{table:amount:arithmetic:inconsistencies:aggregation} +\endlastfoot +{% for item in aggregation.amount_arithmetic_inconsistencies %} + \truncate{3.3cm}{ {\tiny {{ item.operation }} } } & + {{ item.rowid }} & + {{ item.exchange }} & + {{ item.auditor }} & + {{ item.profitable }} \\ \hline +{% endfor %} + \end{longtable} +{% endif %} + +\subsubsection{For coins} + % Table generation tested by testcase #18 in test-auditor.sh -{% if data.amount_arithmetic_inconsistencies|length() == 0 %} +{% if coins.amount_arithmetic_inconsistencies|length() == 0 %} {\bf No arithmetic problems detected.} {% else %} \begin{longtable}{p{3.5cm}|r|r|r|c} @@ -483,12 +523,12 @@ then we can tell if the problem lead to a profit or loss. \endfoot \hline \hline \multicolumn{2}{l|}{ {\bf $\sum$ Deltas (Auditor-Exchange)} } & - + {{ data.total_arithmetic_delta_plus }} & - - {{ data.total_arithmetic_delta_minus }} & \\ + + {{ coins.total_arithmetic_delta_plus }} & + - {{ coins.total_arithmetic_delta_minus }} & \\ \caption{Arithmetic inconsistencies.} - \label{table:amount:arithmetic:inconsistencies} + \label{table:amount:arithmetic:inconsistencies:coins} \endlastfoot -{% for item in data.amount_arithmetic_inconsistencies %} +{% for item in coins.amount_arithmetic_inconsistencies %} \truncate{3.3cm}{ {\tiny {{ item.operation }} } } & {{ item.rowid }} & {{ item.exchange }} & @@ -496,11 +536,39 @@ then we can tell if the problem lead to a profit or loss. {{ item.profitable }} \\ \hline {% endfor %} \end{longtable} +{% endif %} -The {\bf P} colum is set to "1" if the arithmetic problem was be determined to be -profitable for the exchange, "-1" if the problem resulted in a net loss for -the exchange, and "0" if this is unclear or at least the gain/loss is not -easily determined from the amounts and thus not included in the totals. +\subsubsection{For reserves} + +% Table generation tested by testcase #XX in test-auditor.sh + +{% if reserves.amount_arithmetic_inconsistencies|length() == 0 %} + {\bf No arithmetic problems detected.} +{% else %} + \begin{longtable}{p{3.5cm}|r|r|r|c} + {\bf Operation} & {\bf Row} & {\bf Exchange} & {\bf Auditor} & {\bf P} \\ + \hline \hline +\endfirsthead + {\bf Operation} & {\bf Row} & {\bf Exchange} & {\bf Auditor} & {\bf P} \\ \hline \hline +\endhead + \hline \hline + {\bf Operation} & {\bf Row} & {\bf Exchange} & {\bf Auditor} & {\bf P} \\ +\endfoot + \hline \hline + \multicolumn{2}{l|}{ {\bf $\sum$ Deltas (Auditor-Exchange)} } & + + {{ reserves.total_arithmetic_delta_plus }} & + - {{ reserves.total_arithmetic_delta_minus }} & \\ + \caption{Arithmetic inconsistencies.} + \label{table:amount:arithmetic:inconsistencies:reserves} +\endlastfoot +{% for item in reserves.amount_arithmetic_inconsistencies %} + \truncate{3.3cm}{ {\tiny {{ item.operation }} } } & + {{ item.rowid }} & + {{ item.exchange }} & + {{ item.auditor }} & + {{ item.profitable }} \\ \hline +{% endfor %} + \end{longtable} {% endif %} diff --git a/contrib/render.py b/contrib/render.py deleted file mode 100755 index cd50f7164..000000000 --- a/contrib/render.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/python3 -# This file is in the public domain. - -"""Expand Jinja2 templates based on JSON input. - -First command-line argument must be the JSON input from taler-auditor. -Second command-line argument must be the JSON input from the -taler-wire-auditor. - -The tool then reads the template from stdin and writes the expanded -output to stdout. - -TODO: proper installation, man page, error handling, --help option. - -@author Christian Grothoff - -""" - -import sys -import json -import jinja2 -from jinja2 import BaseLoader - - -class StdinLoader(BaseLoader): - def __init__ (self): - self.path = '-' - def get_source(self, environment, template): - source = sys.stdin.read() - return source, self.path, lambda: false - - -jsonFile1 = open (sys.argv[1], 'r') -jsonData1 = json.load(jsonFile1) - -jsonFile2 = open (sys.argv[2], 'r') -jsonData2 = json.load(jsonFile2) - -jsonFile3 = open (sys.argv[3], 'r') -jsonData3 = json.load(jsonFile3) - -jsonFile4 = open (sys.argv[4], 'r') -jsonData4 = json.load(jsonFile4) - -jsonFile5 = open (sys.argv[5], 'r') -jsonData5 = json.load(jsonFile5) - -jsonFile6 = open (sys.argv[6], 'r') -jsonData6 = json.load(jsonFile6) - -jinjaEnv = jinja2.Environment(loader=StdinLoader(), - lstrip_blocks=True, - trim_blocks=True, - undefined=jinja2.StrictUndefined, - autoescape=False) -tmpl = jinjaEnv.get_template('stdin'); - -print(tmpl.render(data = jsonData1, wire = jsonData2, aggregation = jsonData3, coins = jsonData4, deposits = jsonData5, reserves = jsonData6)) |