diff options
author | Christian Grothoff <christian@grothoff.org> | 2020-01-17 15:00:22 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-01-17 15:00:32 +0100 |
commit | 01456098909a4ebddf5a84729242be235af2fdbb (patch) | |
tree | e06394fcadf2266687b886ec797837a0f90a0b35 /src | |
parent | e369dcfc25f1a25c59e0e6dd816397855a45d5bd (diff) | |
download | exchange-01456098909a4ebddf5a84729242be235af2fdbb.tar.xz |
fix FIXME: total up irregular paybacks and add to report
Diffstat (limited to 'src')
-rw-r--r-- | src/auditor/taler-auditor.c | 28 | ||||
-rw-r--r-- | src/auditordb/0001.sql | 2 | ||||
-rw-r--r-- | src/auditordb/plugin_auditordb_postgres.c | 29 | ||||
-rw-r--r-- | src/auditordb/test_auditordb.c | 17 | ||||
-rw-r--r-- | src/include/taler_auditordb_plugin.h | 15 |
5 files changed, 71 insertions, 20 deletions
diff --git a/src/auditor/taler-auditor.c b/src/auditor/taler-auditor.c index a3f6eae21..3a44c55f7 100644 --- a/src/auditor/taler-auditor.c +++ b/src/auditor/taler-auditor.c @@ -319,6 +319,11 @@ static struct TALER_Amount total_risk; static struct TALER_Amount total_payback_loss; /** + * Paybacks we made on denominations that were not revoked (!?). + */ +static struct TALER_Amount total_irregular_paybacks; + +/** * Total withdraw fees earned. */ static struct TALER_Amount total_withdraw_fee_income; @@ -1339,9 +1344,10 @@ handle_payback_by_reserve (void *cls, report_row_inconsistency ("payback", rowid, "denomination key not in revocation set"); - /* FIXME: add amount involved to some loss statistic!? - It's kind-of not a loss (we just paid back), OTOH, it is - certainly irregular and involves some amount. */ + GNUNET_break (GNUNET_OK == + TALER_amount_add (&total_irregular_paybacks, + &total_irregular_paybacks, + amount)); } else { @@ -4628,7 +4634,8 @@ analyze_coins (void *cls) &total_melt_fee_income, &total_refund_fee_income, &total_risk, - &total_payback_loss); + &total_payback_loss, + &total_irregular_paybacks); if (0 > qsx) { GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qsx); @@ -4727,7 +4734,8 @@ analyze_coins (void *cls) &total_melt_fee_income, &total_refund_fee_income, &total_risk, - &total_payback_loss); + &total_payback_loss, + &total_irregular_paybacks); else qs = adb->insert_balance_summary (adb->cls, asession, @@ -4737,7 +4745,8 @@ analyze_coins (void *cls) &total_melt_fee_income, &total_refund_fee_income, &total_risk, - &total_payback_loss); + &total_payback_loss, + &total_irregular_paybacks); if (0 >= qs) { GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs); @@ -5318,6 +5327,9 @@ run (void *cls, &total_payback_loss)); GNUNET_assert (GNUNET_OK == TALER_amount_get_zero (currency, + &total_irregular_paybacks)); + GNUNET_assert (GNUNET_OK == + TALER_amount_get_zero (currency, &total_withdraw_fee_income)); GNUNET_assert (GNUNET_OK == TALER_amount_get_zero (currency, @@ -5598,7 +5610,9 @@ run (void *cls, GNUNET_STRINGS_absolute_time_to_string (start_time)), "auditor_end_time", json_string ( GNUNET_STRINGS_absolute_time_to_string ( - GNUNET_TIME_absolute_get ())) + GNUNET_TIME_absolute_get ())), + "total_irregular_paybacks", + TALER_JSON_from_amount (&total_irregular_paybacks) ); GNUNET_break (NULL != report); json_dumpf (report, diff --git a/src/auditordb/0001.sql b/src/auditordb/0001.sql index 425436e28..f770d67ef 100644 --- a/src/auditordb/0001.sql +++ b/src/auditordb/0001.sql @@ -172,6 +172,8 @@ CREATE TABLE IF NOT EXISTS auditor_balance_summary ,risk_frac INT4 NOT NULL ,loss_val INT8 NOT NULL ,loss_frac INT4 NOT NULL + ,irregular_payback_val INT8 NOT NULL + ,irregular_payback_frac INT4 NOT NULL ); -- Table with historic profits; basically, when a denom_pub has -- expired and everything associated with it is garbage collected, diff --git a/src/auditordb/plugin_auditordb_postgres.c b/src/auditordb/plugin_auditordb_postgres.c index 0d552ff12..a1e71ade2 100644 --- a/src/auditordb/plugin_auditordb_postgres.c +++ b/src/auditordb/plugin_auditordb_postgres.c @@ -614,9 +614,11 @@ postgres_get_session (void *cls) ",risk_frac" ",loss_val" ",loss_frac" + ",irregular_payback_val" + ",irregular_payback_frac" ") VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10," - " $11,$12,$13);", - 13), + " $11,$12,$13,$14,$15);", + 15), /* Used in #postgres_update_balance_summary() */ GNUNET_PQ_make_prepare ("auditor_balance_summary_update", "UPDATE auditor_balance_summary SET" @@ -632,8 +634,10 @@ postgres_get_session (void *cls) ",risk_frac=$10" ",loss_val=$11" ",loss_frac=$12" - " WHERE master_pub=$13;", - 13), + ",irregular_payback_val=$13" + ",irregular_payback_frac=$14" + " WHERE master_pub=$15;", + 15), /* Used in #postgres_get_balance_summary() */ GNUNET_PQ_make_prepare ("auditor_balance_summary_select", "SELECT" @@ -649,6 +653,8 @@ postgres_get_session (void *cls) ",risk_frac" ",loss_val" ",loss_frac" + ",irregular_payback_val" + ",irregular_payback_frac" " FROM auditor_balance_summary" " WHERE master_pub=$1;", 1), @@ -2620,6 +2626,7 @@ postgres_get_denomination_balance (void *cls, * @param refund_fee_balance total refund fees collected for this DK * @param risk maximum risk exposure of the exchange * @param loss materialized @a risk from payback + * @param irregular_payback paybacks on non-revoked coins * @return transaction status code */ static enum GNUNET_DB_QueryStatus @@ -2632,7 +2639,8 @@ postgres_insert_balance_summary (void *cls, const struct TALER_Amount *melt_fee_balance, const struct TALER_Amount *refund_fee_balance, const struct TALER_Amount *risk, - const struct TALER_Amount *loss) + const struct TALER_Amount *loss, + const struct TALER_Amount *irregular_payback) { struct GNUNET_PQ_QueryParam params[] = { GNUNET_PQ_query_param_auto_from_type (master_pub), @@ -2642,6 +2650,7 @@ postgres_insert_balance_summary (void *cls, TALER_PQ_query_param_amount (refund_fee_balance), TALER_PQ_query_param_amount (risk), TALER_PQ_query_param_amount (loss), + TALER_PQ_query_param_amount (irregular_payback), GNUNET_PQ_query_param_end }; @@ -2675,6 +2684,7 @@ postgres_insert_balance_summary (void *cls, * @param refund_fee_balance total refund fees collected for this DK * @param risk maximum risk exposure of the exchange * @param loss materialized @a risk from payback + * @param irregular_payback paybacks made on non-revoked coins * @return transaction status code */ static enum GNUNET_DB_QueryStatus @@ -2687,7 +2697,8 @@ postgres_update_balance_summary (void *cls, const struct TALER_Amount *melt_fee_balance, const struct TALER_Amount *refund_fee_balance, const struct TALER_Amount *risk, - const struct TALER_Amount *loss) + const struct TALER_Amount *loss, + const struct TALER_Amount *irregular_payback) { struct GNUNET_PQ_QueryParam params[] = { TALER_PQ_query_param_amount (denom_balance), @@ -2696,6 +2707,7 @@ postgres_update_balance_summary (void *cls, TALER_PQ_query_param_amount (refund_fee_balance), TALER_PQ_query_param_amount (risk), TALER_PQ_query_param_amount (loss), + TALER_PQ_query_param_amount (irregular_payback), GNUNET_PQ_query_param_auto_from_type (master_pub), GNUNET_PQ_query_param_end }; @@ -2718,6 +2730,7 @@ postgres_update_balance_summary (void *cls, * @param[out] refund_fee_balance total refund fees collected for this DK * @param[out] risk maximum risk exposure of the exchange * @param[out] loss losses from payback (on revoked denominations) + * @param[out] irregular_payback paybacks on NOT revoked denominations * @return transaction status code */ static enum GNUNET_DB_QueryStatus @@ -2729,7 +2742,8 @@ postgres_get_balance_summary (void *cls, struct TALER_Amount *melt_fee_balance, struct TALER_Amount *refund_fee_balance, struct TALER_Amount *risk, - struct TALER_Amount *loss) + struct TALER_Amount *loss, + struct TALER_Amount *irregular_payback) { struct PostgresClosure *pg = cls; struct GNUNET_PQ_QueryParam params[] = { @@ -2743,6 +2757,7 @@ postgres_get_balance_summary (void *cls, TALER_PQ_RESULT_SPEC_AMOUNT ("refund_fee_balance", refund_fee_balance), TALER_PQ_RESULT_SPEC_AMOUNT ("risk", risk), TALER_PQ_RESULT_SPEC_AMOUNT ("loss", loss), + TALER_PQ_RESULT_SPEC_AMOUNT ("irregular_payback", irregular_payback), GNUNET_PQ_result_spec_end }; diff --git a/src/auditordb/test_auditordb.c b/src/auditordb/test_auditordb.c index 9b97d47bd..863b20cc8 100644 --- a/src/auditordb/test_auditordb.c +++ b/src/auditordb/test_auditordb.c @@ -392,6 +392,8 @@ run (void *cls) struct TALER_Amount rbalance2; struct TALER_Amount loss; struct TALER_Amount loss2; + struct TALER_Amount iirp; + struct TALER_Amount iirp2; uint64_t nissued; GNUNET_assert (GNUNET_OK == @@ -415,6 +417,9 @@ run (void *cls) GNUNET_assert (GNUNET_OK == TALER_string_to_amount (CURRENCY ":1.6", &loss)); + GNUNET_assert (GNUNET_OK == + TALER_string_to_amount (CURRENCY ":1.1", + &iirp)); FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != plugin->insert_denomination_balance (plugin->cls, @@ -474,7 +479,8 @@ run (void *cls) &deposit_fee_balance, &denom_balance, &rbalance, - &loss)); + &loss, + &iirp)); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Test: update_balance_summary\n"); @@ -488,7 +494,8 @@ run (void *cls) &melt_fee_balance, &refund_fee_balance, &rbalance, - &loss)); + &loss, + &iirp)); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Test: get_balance_summary\n"); @@ -499,6 +506,7 @@ run (void *cls) ZR_BLK (&refund_fee_balance2); ZR_BLK (&rbalance2); ZR_BLK (&loss2); + ZR_BLK (&iirp2); FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != plugin->get_balance_summary (plugin->cls, @@ -509,7 +517,8 @@ run (void *cls) &melt_fee_balance2, &refund_fee_balance2, &rbalance2, - &loss2)); + &loss2, + &iirp2)); FAILIF ( (0 != GNUNET_memcmp (&denom_balance2, &denom_balance) ) || @@ -523,6 +532,8 @@ run (void *cls) &rbalance)); FAILIF (0 != GNUNET_memcmp (&loss2, &loss)); + FAILIF (0 != GNUNET_memcmp (&iirp2, + &iirp)); GNUNET_log (GNUNET_ERROR_TYPE_INFO, diff --git a/src/include/taler_auditordb_plugin.h b/src/include/taler_auditordb_plugin.h index 18558c692..0ce1d229f 100644 --- a/src/include/taler_auditordb_plugin.h +++ b/src/include/taler_auditordb_plugin.h @@ -1302,6 +1302,8 @@ struct TALER_AUDITORDB_Plugin * @param refund_fee_balance total refund fees collected for this DK * @param risk maximum risk exposure of the exchange * @param payback_loss actual losses from payback (actualized @a risk) + * @param irregular_paybacks paybacks made of non-revoked coins (reduces + * risk, but should never happen) * @return transaction status code */ enum GNUNET_DB_QueryStatus @@ -1313,7 +1315,8 @@ struct TALER_AUDITORDB_Plugin const struct TALER_Amount *melt_fee_balance, const struct TALER_Amount *refund_fee_balance, const struct TALER_Amount *risk, - const struct TALER_Amount *payback_loss); + const struct TALER_Amount *payback_loss, + const struct TALER_Amount *irregular_paybacks); /** @@ -1329,6 +1332,8 @@ struct TALER_AUDITORDB_Plugin * @param refund_fee_balance total refund fees collected for this DK * @param risk maximum risk exposure of the exchange * @param payback_loss actual losses from payback (actualized @a risk) + * @param irregular_paybacks paybacks made of non-revoked coins (reduces + * risk, but should never happen) * @return transaction status code */ enum GNUNET_DB_QueryStatus @@ -1340,7 +1345,8 @@ struct TALER_AUDITORDB_Plugin const struct TALER_Amount *melt_fee_balance, const struct TALER_Amount *refund_fee_balance, const struct TALER_Amount *risk, - const struct TALER_Amount *payback_loss); + const struct TALER_Amount *payback_loss, + const struct TALER_Amount *irregular_paybacks); /** @@ -1355,6 +1361,8 @@ struct TALER_AUDITORDB_Plugin * @param[out] refund_fee_balance total refund fees collected for this DK * @param[out] risk maximum risk exposure of the exchange * @param[out] payback_loss actual losses from payback (actualized @a risk) + * @param[out] irregular_paybacks paybacks made of non-revoked coins (reduces + * risk, but should never happen) * @return transaction status code */ enum GNUNET_DB_QueryStatus @@ -1366,7 +1374,8 @@ struct TALER_AUDITORDB_Plugin struct TALER_Amount *melt_fee_balance, struct TALER_Amount *refund_fee_balance, struct TALER_Amount *risk, - struct TALER_Amount *payback_loss); + struct TALER_Amount *payback_loss, + struct TALER_Amount *irregular_payback); /** |