cashless2ecash

cashless2ecash: pay with cards for digital cash (experimental)
Log | Files | Refs | README

commit 187b16bfeb3554225d525bc9d7bf384134596072
parent 3cd5faf1ed94005524792c3b3ef45956f3f75c1f
Author: Joel-Haeberli <haebu@rubigen.ch>
Date:   Mon,  3 Jun 2024 19:21:51 +0200

fix: enhance logging

Diffstat:
Mc2ec/db-postgres.go | 18+++++++++++++-----
Mc2ec/proc-transfer.go | 149++++++++++++++++++++++++++++++++++++++++---------------------------------------
2 files changed, 88 insertions(+), 79 deletions(-)

diff --git a/c2ec/db-postgres.go b/c2ec/db-postgres.go @@ -575,6 +575,7 @@ func (db *C2ECPostgres) GetProviderByTerminal(terminalId int) (*Provider, error) PS_GET_PROVIDER_BY_TERMINAL, terminalId, ); err != nil { + LogWarn("postgres", "failed query="+PS_GET_PROVIDER_BY_TERMINAL) LogError("postgres", err) if row != nil { row.Close() @@ -602,6 +603,7 @@ func (db *C2ECPostgres) GetTerminalProviderByName(name string) (*Provider, error PS_GET_PROVIDER_BY_NAME, name, ); err != nil { + LogWarn("postgres", "failed query="+PS_GET_PROVIDER_BY_NAME) LogError("postgres", err) if row != nil { row.Close() @@ -613,6 +615,7 @@ func (db *C2ECPostgres) GetTerminalProviderByName(name string) (*Provider, error provider, err := pgx.CollectExactlyOneRow(row, pgx.RowToAddrOfStructByName[Provider]) if err != nil { + LogWarn("postgres", "failed query="+PS_GET_PROVIDER_BY_NAME) LogError("postgres", err) return nil, err } @@ -625,12 +628,12 @@ func (db *C2ECPostgres) GetTerminalProviderByName(name string) (*Provider, error func (db *C2ECPostgres) GetTerminalProviderByPaytoTargetType(paytoTargetType string) (*Provider, error) { LogInfo("postgres", "loading provider for payto-target-type="+paytoTargetType) - if row, err := db.pool.Query( db.ctx, PS_GET_PROVIDER_BY_PAYTO_TARGET_TYPE, paytoTargetType, ); err != nil { + LogWarn("postgres", "failed query="+PS_GET_PROVIDER_BY_PAYTO_TARGET_TYPE) LogError("postgres", err) if row != nil { row.Close() @@ -642,6 +645,7 @@ func (db *C2ECPostgres) GetTerminalProviderByPaytoTargetType(paytoTargetType str provider, err := pgx.CollectExactlyOneRow(row, pgx.RowToAddrOfStructByName[Provider]) if err != nil { + LogWarn("postgres", "failed query="+PS_GET_PROVIDER_BY_PAYTO_TARGET_TYPE) LogError("postgres", err) return nil, err } @@ -658,6 +662,7 @@ func (db *C2ECPostgres) GetTerminalById(id int) (*Terminal, error) { PS_GET_TERMINAL_BY_ID, id, ); err != nil { + LogWarn("postgres", "failed query="+PS_GET_TERMINAL_BY_ID) LogError("postgres", err) if row != nil { row.Close() @@ -669,6 +674,7 @@ func (db *C2ECPostgres) GetTerminalById(id int) (*Terminal, error) { terminal, err := pgx.CollectExactlyOneRow(row, pgx.RowToAddrOfStructByName[Terminal]) if err != nil { + LogWarn("postgres", "failed query="+PS_GET_TERMINAL_BY_ID) LogError("postgres", err) return nil, err } @@ -685,7 +691,7 @@ func (db *C2ECPostgres) GetTransferById(requestUid []byte) (*Transfer, error) { PS_GET_TRANSFER_BY_ID, requestUid, ); err != nil { - LogWarn("postgres", "error from query execution") + LogWarn("postgres", "failed query="+PS_GET_TRANSFER_BY_ID) LogError("postgres", err) if rows != nil { rows.Close() @@ -735,7 +741,7 @@ func (db *C2ECPostgres) AddTransfer( ts.Unix(), ) if err != nil { - LogInfo("postgres", "query="+PS_ADD_TRANSFER) + LogInfo("postgres", "failed query="+PS_ADD_TRANSFER) LogError("postgres", err) return err } @@ -759,7 +765,7 @@ func (db *C2ECPostgres) UpdateTransfer( requestUid, ) if err != nil { - LogInfo("postgres", "query="+PS_UPDATE_TRANSFER) + LogInfo("postgres", "failed query="+PS_UPDATE_TRANSFER) LogError("postgres", err) return err } @@ -811,8 +817,8 @@ func (db *C2ECPostgres) GetTransfers(start int, delta int, since time.Time) ([]* ) } - LogInfo("postgres", "query="+query) if err != nil { + LogWarn("postgres", "failed query="+query) LogError("postgres", err) if row != nil { row.Close() @@ -824,6 +830,7 @@ func (db *C2ECPostgres) GetTransfers(start int, delta int, since time.Time) ([]* transfers, err := pgx.CollectRows(row, pgx.RowToAddrOfStructByName[Transfer]) if err != nil { + LogWarn("postgres", "failed query="+query) LogError("postgres", err) return nil, err } @@ -850,6 +857,7 @@ func (db *C2ECPostgres) GetTransfersByState(status int) ([]*Transfer, error) { transfers, err := pgx.CollectRows(rows, pgx.RowToAddrOfStructByName[Transfer]) if err != nil { + LogWarn("postgres", "failed query="+PS_GET_TRANSFERS_BY_STATUS) LogError("postgres", err) return nil, err } diff --git a/c2ec/proc-transfer.go b/c2ec/proc-transfer.go @@ -2,7 +2,6 @@ package main import ( "context" - "encoding/base64" "errors" "fmt" "time" @@ -50,78 +49,78 @@ func RunTransferrer( }() } -func transferCallback(notification *Notification, errs chan error) { - - LogInfo("proc-transfer", fmt.Sprintf("retrieved information on channel=%s with payload=%s", notification.Channel, notification.Payload)) - - transferRequestUidBase64 := notification.Payload - if transferRequestUidBase64 == "" { - errs <- errors.New("the transfer to refund is not specified") - return - } - - transferRequestUid, err := base64.StdEncoding.DecodeString(transferRequestUidBase64) - if err != nil { - errs <- errors.New("malformed transfer request uid: " + err.Error()) - return - } - - transfer, err := DB.GetTransferById(transferRequestUid) - if err != nil { - LogWarn("proc-transfer", "unable to retrieve transfer with requestUid") - LogError("proc-transfer", err) - transferFailed(transfer, errs) - errs <- err - return - } - - if transfer == nil { - err := errors.New("expected an existing transfer. very strange") - LogError("proc-transfer", err) - transferFailed(transfer, errs) - errs <- err - return - } - - paytoTargetType, tid, err := ParsePaytoUri(transfer.CreditAccount) - LogInfo("proc-transfer", "parsed payto-target-type="+paytoTargetType) - if err != nil { - LogWarn("proc-transfer", "unable to parse payto-uri="+transfer.CreditAccount) - errs <- errors.New("malformed transfer request uid: " + err.Error()) - transferFailed(transfer, errs) - return - } - - provider, err := DB.GetTerminalProviderByPaytoTargetType(paytoTargetType) - if err != nil { - LogWarn("proc-transfer", "unable to find provider for provider-target-type="+paytoTargetType) - LogError("proc-transfer", err) - transferFailed(transfer, errs) - errs <- err - } - - client := PROVIDER_CLIENTS[provider.Name] - if client == nil { - errs <- errors.New("no provider client registered for provider " + provider.Name) - } - - err = client.Refund(tid) - if err != nil { - LogError("proc-transfer", err) - transferFailed(transfer, errs) - return - } - - err = DB.UpdateTransfer( - transfer.RequestUid, - time.Now().Unix(), - TRANSFER_STATUS_SUCCESS, // success - transfer.Retries, - ) - if err != nil { - errs <- err - } -} +// func transferCallback(notification *Notification, errs chan error) { + +// LogInfo("proc-transfer", fmt.Sprintf("retrieved information on channel=%s with payload=%s", notification.Channel, notification.Payload)) + +// transferRequestUidBase64 := notification.Payload +// if transferRequestUidBase64 == "" { +// errs <- errors.New("the transfer to refund is not specified") +// return +// } + +// transferRequestUid, err := base64.StdEncoding.DecodeString(transferRequestUidBase64) +// if err != nil { +// errs <- errors.New("malformed transfer request uid: " + err.Error()) +// return +// } + +// transfer, err := DB.GetTransferById(transferRequestUid) +// if err != nil { +// LogWarn("proc-transfer", "unable to retrieve transfer with requestUid") +// LogError("proc-transfer", err) +// transferFailed(transfer, errs) +// errs <- err +// return +// } + +// if transfer == nil { +// err := errors.New("expected an existing transfer. very strange") +// LogError("proc-transfer", err) +// transferFailed(transfer, errs) +// errs <- err +// return +// } + +// paytoTargetType, tid, err := ParsePaytoUri(transfer.CreditAccount) +// LogInfo("proc-transfer", "parsed payto-target-type="+paytoTargetType) +// if err != nil { +// LogWarn("proc-transfer", "unable to parse payto-uri="+transfer.CreditAccount) +// errs <- errors.New("malformed transfer request uid: " + err.Error()) +// transferFailed(transfer, errs) +// return +// } + +// provider, err := DB.GetTerminalProviderByPaytoTargetType(paytoTargetType) +// if err != nil { +// LogWarn("proc-transfer", "unable to find provider for provider-target-type="+paytoTargetType) +// LogError("proc-transfer", err) +// transferFailed(transfer, errs) +// errs <- err +// } + +// client := PROVIDER_CLIENTS[provider.Name] +// if client == nil { +// errs <- errors.New("no provider client registered for provider " + provider.Name) +// } + +// err = client.Refund(tid) +// if err != nil { +// LogError("proc-transfer", err) +// transferFailed(transfer, errs) +// return +// } + +// err = DB.UpdateTransfer( +// transfer.RequestUid, +// time.Now().Unix(), +// TRANSFER_STATUS_SUCCESS, // success +// transfer.Retries, +// ) +// if err != nil { +// errs <- err +// } +// } func executePendingTransfers(errs chan error, lastlog time.Time) { @@ -139,7 +138,9 @@ func executePendingTransfers(errs chan error, lastlog time.Time) { shouldRetry := ShouldStartRetry(time.Unix(t.TransferTs, 0), int(t.Retries), MAX_TRANSFER_BACKOFF_MS) if !shouldRetry { - LogInfo("proc-transfer", fmt.Sprintf("not retrying transfer %d, because backoff not yet exceeded", t.RowId)) + if lastlog.Before(time.Now().Add(time.Second * -30)) { + LogInfo("proc-transfer", fmt.Sprintf("not retrying transfer id=%d, because backoff not yet exceeded", t.RowId)) + } continue }