implement #5967: have ranges in auditor reports, untested because right now tests somehow do not work
This commit is contained in:
parent
6c5d46327b
commit
25a0b60f12
@ -64,6 +64,72 @@ This report is based on a template licensed under the Affero General Public
|
|||||||
License, either version 3, or (at your option) any later version.
|
License, either version 3, or (at your option) any later version.
|
||||||
The source code for the template is available at \url{https://git.taler.net/}.
|
The source code for the template is available at \url{https://git.taler.net/}.
|
||||||
|
|
||||||
|
The report was generated by the auditor started at
|
||||||
|
{\bf {{ data.auditor_start_time }} } and concluded at
|
||||||
|
{\bf {{ data.auditor_end_time }} }.
|
||||||
|
|
||||||
|
In that time, the auditor processed the following table ranges:
|
||||||
|
\begin{center}
|
||||||
|
\begin{table}
|
||||||
|
\begin{tabular}{l|r|r}
|
||||||
|
Table & Start & End \\ \hline \hline
|
||||||
|
Reserves Incoming & {{ data.start_ppr_reserve_in_serial_id }}
|
||||||
|
& {{ data.ppr_reserve_in_serial_id }} \\ \hline
|
||||||
|
Reserves Out (withdraw) & {{ data.start_ppr_reserve_out_serial_id }}
|
||||||
|
& {{ data.ppr_reserve_out_serial_id }} \\ \hline
|
||||||
|
Reserves Payback & {{ data.start_ppr_reserve_payback_serial_id }}
|
||||||
|
& {{ data.ppr_reserve_payback_serial_id }} \\ \hline
|
||||||
|
Reserves Close & {{ data.start_ppr_reserve_close_serial_id }}
|
||||||
|
& {{ data.ppr_reserve_close_serial_id }} \\ \hline
|
||||||
|
Aggregation & {{ data.start_ppa_wire_out_serial_id }}
|
||||||
|
& {{ data.ppa_wire_out_serial_id }} \\ \hline
|
||||||
|
Coin withdraw & {{ data.start_ppc_withdraw_serial_id }}
|
||||||
|
& {{ data.ppc_withdraw_serial_id }} \\ \hline
|
||||||
|
Coin deposit & {{ data.start_ppc_deposit_serial_id }}
|
||||||
|
& {{ data.ppc_deposit_serial_id }} \\ \hline
|
||||||
|
Coin melt & {{ data.start_ppc_melt_serial_id }}
|
||||||
|
& {{ data.ppc_melt_serial_id }} \\ \hline
|
||||||
|
Coin refund & {{ data.start_ppc_refund_serial_id }}
|
||||||
|
& {{ data.ppc_refund_serial_id }} \\ \hline
|
||||||
|
Coin payback & {{ data.start_ppc_payback_serial_id }}
|
||||||
|
& {{ data.ppc_payback_serial_id }} \\ \hline
|
||||||
|
Coin payback refresh & {{ data.start_ppc_payback_refresh_serial_id }}
|
||||||
|
& {{ data.ppc_payback_refresh_serial_id }} \\
|
||||||
|
\end{tabular}
|
||||||
|
\caption{Serial number ranges of the tables processed by the audit.}
|
||||||
|
\label{table:auditor_range}
|
||||||
|
\end{table}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
The report was generated by the wire auditor started at
|
||||||
|
{\bf {{ wire.wire_auditor_start_time }} } and concluded at
|
||||||
|
{\bf {{ wire.wire_auditor_end_time }} }.
|
||||||
|
|
||||||
|
{% if wire.account_progress|length() == 0 %}
|
||||||
|
In that time, the auditor processed NO accounts at all.
|
||||||
|
{% else %}
|
||||||
|
In that time, the auditor processed the following table ranges:
|
||||||
|
\begin{center}
|
||||||
|
\begin{longtable}{l|c|r|r}
|
||||||
|
Account & Table & Start & End \\ \hline \hline
|
||||||
|
\endfirsthead
|
||||||
|
Account & Table & Start & End \\ \hline \hline
|
||||||
|
\endhead
|
||||||
|
\endfoot
|
||||||
|
\caption{Range of account data processed by the wire auditor.}
|
||||||
|
\label{table:account_range}
|
||||||
|
\endlastfoot
|
||||||
|
{% for item in wire.account_progress %}
|
||||||
|
{{ item.account }} &
|
||||||
|
Reserves Incoming & {{ item.start_reserve_in }}
|
||||||
|
& {{ item.end_reserve_in }} \\ \hline
|
||||||
|
Outgoing wire transfers & {{ item.start_wire_out }}
|
||||||
|
& {{ item.end_wire_out }} \\ \hline
|
||||||
|
{% endfor %}
|
||||||
|
\end{longtable}
|
||||||
|
{% endif %}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
|
||||||
\section{Operations}
|
\section{Operations}
|
||||||
|
|
||||||
|
@ -135,6 +135,21 @@ static struct TALER_AUDITORDB_ProgressPointAggregation ppa;
|
|||||||
*/
|
*/
|
||||||
static struct TALER_AUDITORDB_ProgressPointCoin ppc;
|
static struct TALER_AUDITORDB_ProgressPointCoin ppc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checkpointing our progress for reserves.
|
||||||
|
*/
|
||||||
|
static struct TALER_AUDITORDB_ProgressPointReserve ppr_start;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checkpointing our progress for aggregations.
|
||||||
|
*/
|
||||||
|
static struct TALER_AUDITORDB_ProgressPointAggregation ppa_start;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checkpointing our progress for coins.
|
||||||
|
*/
|
||||||
|
static struct TALER_AUDITORDB_ProgressPointCoin ppc_start;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array of reports about denomination keys with an
|
* Array of reports about denomination keys with an
|
||||||
* emergency (more value deposited than withdrawn)
|
* emergency (more value deposited than withdrawn)
|
||||||
@ -349,6 +364,11 @@ static json_t *report_refreshs_hanging;
|
|||||||
*/
|
*/
|
||||||
static struct TALER_Amount total_refresh_hanging;
|
static struct TALER_Amount total_refresh_hanging;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* At what time did the auditor process start?
|
||||||
|
*/
|
||||||
|
static struct GNUNET_TIME_Absolute start_time;
|
||||||
|
|
||||||
|
|
||||||
/* ********************************* helpers *************************** */
|
/* ********************************* helpers *************************** */
|
||||||
|
|
||||||
@ -1870,6 +1890,7 @@ analyze_reserves (void *cls)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
ppr_start = ppr;
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
_ ("Resuming reserve audit at %llu/%llu/%llu/%llu\n"),
|
_ ("Resuming reserve audit at %llu/%llu/%llu/%llu\n"),
|
||||||
(unsigned long long) ppr.last_reserve_in_serial_id,
|
(unsigned long long) ppr.last_reserve_in_serial_id,
|
||||||
@ -3064,6 +3085,7 @@ analyze_aggregations (void *cls)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
ppa_start = ppa;
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
_ ("Resuming aggregation audit at %llu\n"),
|
_ ("Resuming aggregation audit at %llu\n"),
|
||||||
(unsigned long long) ppa.last_wire_out_serial_id);
|
(unsigned long long) ppa.last_wire_out_serial_id);
|
||||||
@ -4638,6 +4660,7 @@ analyze_coins (void *cls)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
ppc_start = ppc;
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
_ ("Resuming coin audit at %llu/%llu/%llu/%llu/%llu\n"),
|
_ ("Resuming coin audit at %llu/%llu/%llu/%llu/%llu\n"),
|
||||||
(unsigned long long) ppc.last_deposit_serial_id,
|
(unsigned long long) ppc.last_deposit_serial_id,
|
||||||
@ -5173,6 +5196,7 @@ run (void *cls,
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"Launching auditor\n");
|
"Launching auditor\n");
|
||||||
cfg = c;
|
cfg = c;
|
||||||
|
start_time = GNUNET_TIME_absolute_get ();
|
||||||
if (0 == GNUNET_memcmp (&zeromp,
|
if (0 == GNUNET_memcmp (&zeromp,
|
||||||
&master_pub))
|
&master_pub))
|
||||||
{
|
{
|
||||||
@ -5428,7 +5452,11 @@ run (void *cls,
|
|||||||
" s:o, s:o, s:o, s:o, s:o,"
|
" s:o, s:o, s:o, s:o, s:o,"
|
||||||
" s:o, s:o, s:o, s:o, s:I,"
|
" s:o, s:o, s:o, s:o, s:I,"
|
||||||
" s:o, s:o, s:o, s:o, s:o,"
|
" s:o, s:o, s:o, s:o, s:o,"
|
||||||
" s:o }",
|
" s:o, s:I, s:I, s:I, s:I,"
|
||||||
|
" s:I, s:I, s:I, s:I, s:I,"
|
||||||
|
" s:I, s:I, s:I, s:I, s:I,"
|
||||||
|
" s:I, s:I, s:I, s:I, s:I,"
|
||||||
|
" s:I, s:I, s:I, s:o, s:o }",
|
||||||
/* blocks of 5 for easier counting/matching to format string */
|
/* blocks of 5 for easier counting/matching to format string */
|
||||||
/* block */
|
/* block */
|
||||||
"reserve_balance_insufficient_inconsistencies",
|
"reserve_balance_insufficient_inconsistencies",
|
||||||
@ -5542,7 +5570,61 @@ run (void *cls,
|
|||||||
/* block */
|
/* block */
|
||||||
/* Tested in test-auditor.sh #18 */
|
/* Tested in test-auditor.sh #18 */
|
||||||
"emergencies_loss_by_count",
|
"emergencies_loss_by_count",
|
||||||
TALER_JSON_from_amount (&reported_emergency_loss_by_count)
|
TALER_JSON_from_amount (
|
||||||
|
&reported_emergency_loss_by_count),
|
||||||
|
"start_ppr_reserve_in_serial_id",
|
||||||
|
(json_int_t) ppr_start.last_reserve_in_serial_id,
|
||||||
|
"start_ppr_reserve_out_serial_id",
|
||||||
|
(json_int_t) ppr_start.last_reserve_out_serial_id,
|
||||||
|
"start_ppr_reserve_payback_serial_id",
|
||||||
|
(json_int_t) ppr_start.last_reserve_payback_serial_id,
|
||||||
|
"start_ppr_reserve_close_serial_id",
|
||||||
|
(json_int_t) ppr_start.last_reserve_close_serial_id,
|
||||||
|
/* block */
|
||||||
|
"end_ppr_reserve_in_serial_id",
|
||||||
|
(json_int_t) ppr.last_reserve_in_serial_id,
|
||||||
|
"end_ppr_reserve_out_serial_id",
|
||||||
|
(json_int_t) ppr.last_reserve_out_serial_id,
|
||||||
|
"end_ppr_reserve_payback_serial_id",
|
||||||
|
(json_int_t) ppr.last_reserve_payback_serial_id,
|
||||||
|
"end_ppr_reserve_close_serial_id",
|
||||||
|
(json_int_t) ppr.last_reserve_close_serial_id,
|
||||||
|
"start_ppa_wire_out_serial_id",
|
||||||
|
(json_int_t) ppa_start.last_wire_out_serial_id,
|
||||||
|
/* block */
|
||||||
|
"end_ppa_wire_out_serial_id",
|
||||||
|
(json_int_t) ppa.last_wire_out_serial_id,
|
||||||
|
"start_ppc_withdraw_serial_id",
|
||||||
|
(json_int_t) ppc_start.last_withdraw_serial_id,
|
||||||
|
"start_ppc_deposit_serial_id",
|
||||||
|
(json_int_t) ppc_start.last_deposit_serial_id,
|
||||||
|
"start_ppc_melt_serial_id",
|
||||||
|
(json_int_t) ppc_start.last_melt_serial_id,
|
||||||
|
"start_ppc_refund_serial_id",
|
||||||
|
(json_int_t) ppc_start.last_refund_serial_id,
|
||||||
|
/* block */
|
||||||
|
"start_ppc_payback_serial_id",
|
||||||
|
(json_int_t) ppc_start.last_payback_serial_id,
|
||||||
|
"start_ppc_payback_refresh_serial_id",
|
||||||
|
(json_int_t) ppc_start.last_payback_refresh_serial_id,
|
||||||
|
"end_ppc_withdraw_serial_id",
|
||||||
|
(json_int_t) ppc.last_withdraw_serial_id,
|
||||||
|
"end_ppc_deposit_serial_id",
|
||||||
|
(json_int_t) ppc.last_deposit_serial_id,
|
||||||
|
"end_ppc_melt_serial_id",
|
||||||
|
(json_int_t) ppc.last_melt_serial_id,
|
||||||
|
/* block */
|
||||||
|
"end_ppc_refund_serial_id",
|
||||||
|
(json_int_t) ppc.last_refund_serial_id,
|
||||||
|
"end_ppc_payback_serial_id",
|
||||||
|
(json_int_t) ppc.last_payback_serial_id,
|
||||||
|
"end_ppc_payback_refresh_serial_id",
|
||||||
|
(json_int_t) ppc.last_payback_refresh_serial_id,
|
||||||
|
"auditor_start_time", json_string (
|
||||||
|
GNUNET_STRINGS_absolute_time_to_string (start_time)),
|
||||||
|
"auditor_end_time", json_string (
|
||||||
|
GNUNET_STRINGS_absolute_time_to_string (
|
||||||
|
GNUNET_TIME_absolute_get ()))
|
||||||
);
|
);
|
||||||
GNUNET_break (NULL != report);
|
GNUNET_break (NULL != report);
|
||||||
json_dumpf (report,
|
json_dumpf (report,
|
||||||
|
@ -84,6 +84,11 @@ struct WireAccount
|
|||||||
*/
|
*/
|
||||||
struct TALER_AUDITORDB_WireAccountProgressPoint pp;
|
struct TALER_AUDITORDB_WireAccountProgressPoint pp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initial progress point for this account.
|
||||||
|
*/
|
||||||
|
struct TALER_AUDITORDB_WireAccountProgressPoint start_pp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Where we are in the inbound (CREDIT) transaction history.
|
* Where we are in the inbound (CREDIT) transaction history.
|
||||||
*/
|
*/
|
||||||
@ -159,6 +164,11 @@ static int global_ret;
|
|||||||
*/
|
*/
|
||||||
static int restart;
|
static int restart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Time when we started the wire audit.
|
||||||
|
*/
|
||||||
|
static struct GNUNET_TIME_Absolute start_time;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle to access the exchange's database.
|
* Handle to access the exchange's database.
|
||||||
*/
|
*/
|
||||||
@ -227,6 +237,11 @@ static enum GNUNET_DB_QueryStatus qsx;
|
|||||||
*/
|
*/
|
||||||
static struct TALER_AUDITORDB_WireProgressPoint pp;
|
static struct TALER_AUDITORDB_WireProgressPoint pp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last reserve_in / wire_out serial IDs seen.
|
||||||
|
*/
|
||||||
|
static struct TALER_AUDITORDB_WireProgressPoint start_pp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array of reports about row inconsitencies in wire_out table.
|
* Array of reports about row inconsitencies in wire_out table.
|
||||||
*/
|
*/
|
||||||
@ -269,6 +284,11 @@ static json_t *report_lags;
|
|||||||
*/
|
*/
|
||||||
static json_t *report_closure_lags;
|
static json_t *report_closure_lags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of per-account progress data.
|
||||||
|
*/
|
||||||
|
static json_t *report_account_progress;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Amount that is considered "tiny"
|
* Amount that is considered "tiny"
|
||||||
*/
|
*/
|
||||||
@ -483,7 +503,8 @@ do_shutdown (void *cls)
|
|||||||
report = json_pack ("{s:o, s:o, s:o, s:o, s:o,"
|
report = json_pack ("{s:o, s:o, s:o, s:o, s:o,"
|
||||||
" s:o, s:o, s:o, s:o, s:o,"
|
" s:o, s:o, s:o, s:o, s:o,"
|
||||||
" s:o, s:o, s:o, s:o, s:o,"
|
" s:o, s:o, s:o, s:o, s:o,"
|
||||||
" s:o }",
|
" s:o, s:o, s:o, s:I, s:I,"
|
||||||
|
" s:s, s:s, s:o }",
|
||||||
/* blocks of 5 */
|
/* blocks of 5 */
|
||||||
/* Tested in test-auditor.sh #11, #15, #20 */
|
/* Tested in test-auditor.sh #11, #15, #20 */
|
||||||
"wire_out_amount_inconsistencies",
|
"wire_out_amount_inconsistencies",
|
||||||
@ -533,7 +554,28 @@ do_shutdown (void *cls)
|
|||||||
/* blocks of 5 */
|
/* blocks of 5 */
|
||||||
/* Tested in test-auditor.sh #22 */
|
/* Tested in test-auditor.sh #22 */
|
||||||
"reserve_lag_details",
|
"reserve_lag_details",
|
||||||
report_closure_lags);
|
report_closure_lags,
|
||||||
|
"wire_auditor_start_time", json_string (
|
||||||
|
GNUNET_STRINGS_absolute_time_to_string (start_time)),
|
||||||
|
"wire_auditor_end_time", json_string (
|
||||||
|
GNUNET_STRINGS_absolute_time_to_string (
|
||||||
|
GNUNET_TIME_absolute_get ())),
|
||||||
|
"start_pp_reserve_close_uuid",
|
||||||
|
(json_int_t) start_pp.last_reserve_close_uuid,
|
||||||
|
"end_pp_reserve_close_uuid",
|
||||||
|
(json_int_t) pp.last_reserve_close_uuid,
|
||||||
|
/* blocks of 5 */
|
||||||
|
"start_pp_last_timestamp",
|
||||||
|
json_string (
|
||||||
|
GNUNET_STRINGS_absolute_time_to_string (
|
||||||
|
start_pp.last_timestamp)),
|
||||||
|
"end_pp_last_timestamp",
|
||||||
|
json_string (
|
||||||
|
GNUNET_STRINGS_absolute_time_to_string (
|
||||||
|
pp.last_timestamp)),
|
||||||
|
"account_progress",
|
||||||
|
report_account_progress
|
||||||
|
);
|
||||||
GNUNET_break (NULL != report);
|
GNUNET_break (NULL != report);
|
||||||
json_dumpf (report,
|
json_dumpf (report,
|
||||||
stdout,
|
stdout,
|
||||||
@ -546,6 +588,7 @@ do_shutdown (void *cls)
|
|||||||
report_missattribution_in_inconsistencies = NULL;
|
report_missattribution_in_inconsistencies = NULL;
|
||||||
report_lags = NULL;
|
report_lags = NULL;
|
||||||
report_closure_lags = NULL;
|
report_closure_lags = NULL;
|
||||||
|
report_account_progress = NULL;
|
||||||
report_wire_format_inconsistencies = NULL;
|
report_wire_format_inconsistencies = NULL;
|
||||||
}
|
}
|
||||||
if (NULL != reserve_closures)
|
if (NULL != reserve_closures)
|
||||||
@ -717,6 +760,26 @@ commit (enum GNUNET_DB_QueryStatus qs)
|
|||||||
NULL != wa;
|
NULL != wa;
|
||||||
wa = wa->next)
|
wa = wa->next)
|
||||||
{
|
{
|
||||||
|
GNUNET_assert (0 ==
|
||||||
|
json_array_append_new (report_account_progress,
|
||||||
|
json_pack (
|
||||||
|
"{s:s, s:I, s:I, s:I, s:I}",
|
||||||
|
"account",
|
||||||
|
wa->section_name,
|
||||||
|
"start_reserve_in",
|
||||||
|
(json_int_t) wa->start_pp.
|
||||||
|
last_reserve_in_serial_id,
|
||||||
|
"end_reserve_in",
|
||||||
|
(json_int_t) wa->pp.
|
||||||
|
last_reserve_in_serial_id,
|
||||||
|
"start_wire_out",
|
||||||
|
(json_int_t) wa->start_pp.
|
||||||
|
last_wire_out_serial_id,
|
||||||
|
"end_wire_out",
|
||||||
|
(json_int_t) wa->pp.
|
||||||
|
last_wire_out_serial_id
|
||||||
|
))
|
||||||
|
);
|
||||||
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsx)
|
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qsx)
|
||||||
qs = adb->update_wire_auditor_account_progress (adb->cls,
|
qs = adb->update_wire_auditor_account_progress (adb->cls,
|
||||||
asession,
|
asession,
|
||||||
@ -1983,6 +2046,7 @@ begin_transaction ()
|
|||||||
GNUNET_SCHEDULER_shutdown ();
|
GNUNET_SCHEDULER_shutdown ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
wa->start_pp = wa->pp;
|
||||||
}
|
}
|
||||||
qsx = adb->get_wire_auditor_progress (adb->cls,
|
qsx = adb->get_wire_auditor_progress (adb->cls,
|
||||||
asession,
|
asession,
|
||||||
@ -2003,6 +2067,7 @@ begin_transaction ()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
start_pp = pp;
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Resuming audit at %s / %llu\n",
|
"Resuming audit at %s / %llu\n",
|
||||||
GNUNET_STRINGS_absolute_time_to_string (pp.last_timestamp),
|
GNUNET_STRINGS_absolute_time_to_string (pp.last_timestamp),
|
||||||
@ -2228,6 +2293,8 @@ run (void *cls,
|
|||||||
(report_lags = json_array ()));
|
(report_lags = json_array ()));
|
||||||
GNUNET_assert (NULL !=
|
GNUNET_assert (NULL !=
|
||||||
(report_closure_lags = json_array ()));
|
(report_closure_lags = json_array ()));
|
||||||
|
GNUNET_assert (NULL !=
|
||||||
|
(report_account_progress = json_array ()));
|
||||||
GNUNET_assert (GNUNET_OK ==
|
GNUNET_assert (GNUNET_OK ==
|
||||||
TALER_amount_get_zero (currency,
|
TALER_amount_get_zero (currency,
|
||||||
&total_bad_amount_out_plus));
|
&total_bad_amount_out_plus));
|
||||||
|
Loading…
Reference in New Issue
Block a user