chore: update project changes
This commit is contained in:
@@ -19,6 +19,7 @@ func Configure(service string, level slog.Leveler) *slog.Logger {
|
||||
attr.Key = "timestamp"
|
||||
case slog.LevelKey:
|
||||
attr.Key = "severity"
|
||||
attr.Value = slog.StringValue(levelName(attr.Value))
|
||||
case slog.MessageKey:
|
||||
attr.Key = "message"
|
||||
case slog.SourceKey:
|
||||
@@ -32,6 +33,16 @@ func Configure(service string, level slog.Leveler) *slog.Logger {
|
||||
return logger
|
||||
}
|
||||
|
||||
func levelName(value slog.Value) string {
|
||||
if value.Kind() == slog.KindInt64 {
|
||||
return slog.Level(value.Int64()).String()
|
||||
}
|
||||
if level, ok := value.Any().(slog.Level); ok {
|
||||
return level.String()
|
||||
}
|
||||
return value.String()
|
||||
}
|
||||
|
||||
type traceHandler struct{ slog.Handler }
|
||||
|
||||
func (h *traceHandler) Handle(ctx context.Context, record slog.Record) error {
|
||||
|
||||
@@ -86,6 +86,42 @@ func (r *JournalRepository) Stats(ctx context.Context) (explorer.Stats, error) {
|
||||
return stats, nil
|
||||
}
|
||||
|
||||
func (r *JournalRepository) SettlementDashboard(ctx context.Context, limit int) (explorer.SettlementStats, []explorer.Settlement, error) {
|
||||
if limit <= 0 || limit > 100 {
|
||||
limit = 12
|
||||
}
|
||||
var stats explorer.SettlementStats
|
||||
if err := r.database.QueryRow(ctx, `SELECT
|
||||
count(*) FILTER (WHERE status='PENDING'),
|
||||
count(*) FILTER (WHERE status='RETRYABLE'),
|
||||
count(*) FILTER (WHERE status='CONFIRMED'),
|
||||
count(*) FILTER (WHERE status='MANUAL_REVIEW')
|
||||
FROM kuknos_settlements`).Scan(&stats.Pending, &stats.Retryable, &stats.Confirmed, &stats.ManualReview); err != nil {
|
||||
return explorer.SettlementStats{}, nil, fmt.Errorf("read settlement stats: %w", err)
|
||||
}
|
||||
rows, err := r.database.Query(ctx, `SELECT id, source_service, source_transaction_id, status,
|
||||
network, transaction_hash, attempts, last_error, updated_at
|
||||
FROM kuknos_settlements ORDER BY updated_at DESC LIMIT $1`, limit)
|
||||
if err != nil {
|
||||
return explorer.SettlementStats{}, nil, fmt.Errorf("list recent settlements: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
settlements := make([]explorer.Settlement, 0, limit)
|
||||
for rows.Next() {
|
||||
var settlement explorer.Settlement
|
||||
if err := rows.Scan(&settlement.ID, &settlement.SourceService, &settlement.SourceTransactionID,
|
||||
&settlement.Status, &settlement.Network, &settlement.TransactionHash, &settlement.Attempts,
|
||||
&settlement.LastError, &settlement.UpdatedAt); err != nil {
|
||||
return explorer.SettlementStats{}, nil, fmt.Errorf("scan recent settlement: %w", err)
|
||||
}
|
||||
settlements = append(settlements, settlement)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return explorer.SettlementStats{}, nil, fmt.Errorf("iterate recent settlements: %w", err)
|
||||
}
|
||||
return stats, settlements, nil
|
||||
}
|
||||
|
||||
func (r *JournalRepository) TopHolders(ctx context.Context, assetLimit, holderLimit int) ([]explorer.Holder, error) {
|
||||
if assetLimit <= 0 || assetLimit > 20 {
|
||||
assetLimit = 5
|
||||
|
||||
Reference in New Issue
Block a user