This commit is contained in:
Christian Grothoff 2017-10-16 12:11:49 +02:00
parent 2cddf524a8
commit 4a84520514
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 59 additions and 13 deletions

View File

@ -1,3 +1,6 @@
Mon Oct 16 12:10:35 CEST 2017
Realize JSON-based report formats from auditor (#4963). -CG
Sun Sep 17 16:46:13 CEST 2017 Sun Sep 17 16:46:13 CEST 2017
Implement /keys cherry picking (#4840). -CG Implement /keys cherry picking (#4840). -CG

View File

@ -25,7 +25,6 @@
* given in the 'wire_out' table. This needs to be checked separately! * given in the 'wire_out' table. This needs to be checked separately!
* *
* KNOWN BUGS: * KNOWN BUGS:
* - calculate, store and report aggregation fee balance!
* - error handling if denomination keys are used that are not known to the * - error handling if denomination keys are used that are not known to the
* auditor is, eh, awful / non-existent. We just throw the DB's constraint * auditor is, eh, awful / non-existent. We just throw the DB's constraint
* violation back at the user. Great UX. * violation back at the user. Great UX.

View File

@ -129,6 +129,16 @@ static void *out_wire_off;
*/ */
static size_t wire_off_size; static size_t wire_off_size;
/**
* Array of reports about row inconsitencies.
*/
static json_t *report_row_inconsistencies;
/**
* Array of reports about minor row inconcistencies.
*/
static json_t *report_row_minor_inconsistencies;
/* ***************************** Shutdown **************************** */ /* ***************************** Shutdown **************************** */
@ -240,6 +250,21 @@ free_roi (void *cls,
static void static void
do_shutdown (void *cls) do_shutdown (void *cls)
{ {
if (NULL != report_row_inconsistencies)
{
json_t *report;
GNUNET_assert (NULL != report_row_minor_inconsistencies);
report = json_pack ("{s:o, s:o}",
"row-inconsistencies", report_row_inconsistencies,
"row-minor-inconsistencies", report_row_minor_inconsistencies);
json_dumpf (report,
stdout,
JSON_INDENT (2));
json_decref (report);
report_row_inconsistencies = NULL;
report_row_minor_inconsistencies = NULL;
}
if (NULL != hh) if (NULL != hh)
{ {
wp->get_history_cancel (wp->cls, wp->get_history_cancel (wp->cls,
@ -283,6 +308,23 @@ do_shutdown (void *cls)
/* ***************************** Report logic **************************** */ /* ***************************** Report logic **************************** */
/**
* Add @a object to the report @a array. Fail hard if this fails.
*
* @param array report array to append @a object to
* @param object object to append, should be check that it is not NULL
*/
static void
report (json_t *array,
json_t *object)
{
GNUNET_assert (NULL != object);
GNUNET_assert (0 ==
json_array_append_new (array,
object));
}
/** /**
* Report a (serious) inconsistency in the exchange's database. * Report a (serious) inconsistency in the exchange's database.
* *
@ -295,12 +337,11 @@ report_row_inconsistency (const char *table,
uint64_t rowid, uint64_t rowid,
const char *diagnostic) const char *diagnostic)
{ {
// TODO (#4963): implement proper reporting logic writing to file. report (report_row_inconsistencies,
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, json_pack ("{s:s, s:I, s:s}",
"Database inconsistency detected in table %s at row %llu: %s\n", "table", table,
table, "row", (json_int_t) rowid,
(unsigned long long) rowid, "diagnostic", diagnostic));
diagnostic);
} }
@ -317,12 +358,11 @@ report_row_minor_inconsistency (const char *table,
uint64_t rowid, uint64_t rowid,
const char *diagnostic) const char *diagnostic)
{ {
// TODO (#4963): implement proper reporting logic writing to file. report (report_row_minor_inconsistencies,
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, json_pack ("{s:s, s:I, s:s}",
"Minor inconsistency detected in table %s at row %llu: %s\n", "table", table,
table, "row", (json_int_t) rowid,
(unsigned long long) rowid, "diagnostic", diagnostic));
diagnostic);
} }
@ -961,6 +1001,10 @@ run (void *cls,
GNUNET_SCHEDULER_shutdown (); GNUNET_SCHEDULER_shutdown ();
return; return;
} }
GNUNET_assert (NULL !=
(report_row_inconsistencies = json_array ()));
GNUNET_assert (NULL !=
(report_row_minor_inconsistencies = json_array ()));
qsx = adb->get_wire_auditor_progress (adb->cls, qsx = adb->get_wire_auditor_progress (adb->cls,
asession, asession,
&master_pub, &master_pub,