62e076111f
Co-authored-by: Copilot <copilot@github.com>
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package audit
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"strings"
|
|
"time"
|
|
|
|
"gitea.gangary.cn/gary/Hugs-Proxy/internal/db"
|
|
)
|
|
|
|
type Entry struct {
|
|
RequestIP string
|
|
UserID int64
|
|
HasUser bool
|
|
TokenID int64
|
|
HasToken bool
|
|
OriginalURL string
|
|
HTTPStatus int
|
|
Success bool
|
|
ErrorReason string
|
|
CountAsSuccess bool
|
|
OccurredAt time.Time
|
|
}
|
|
|
|
type Logger struct {
|
|
store *db.Store
|
|
}
|
|
|
|
func NewLogger(store *db.Store) *Logger {
|
|
return &Logger{store: store}
|
|
}
|
|
|
|
func (l *Logger) Log(ctx context.Context, entry Entry) error {
|
|
usage := db.UsageEntry{
|
|
RequestIP: strings.TrimSpace(entry.RequestIP),
|
|
OriginalURL: strings.TrimSpace(entry.OriginalURL),
|
|
HTTPStatus: entry.HTTPStatus,
|
|
Success: entry.Success,
|
|
ErrorReason: strings.TrimSpace(entry.ErrorReason),
|
|
OccurredAt: entry.OccurredAt,
|
|
}
|
|
if entry.HasUser {
|
|
usage.UserID = sql.NullInt64{Int64: entry.UserID, Valid: true}
|
|
}
|
|
if entry.HasToken {
|
|
usage.TokenID = sql.NullInt64{Int64: entry.TokenID, Valid: true}
|
|
}
|
|
|
|
return l.store.RecordUsageAndMaybeIncrement(ctx, usage, entry.CountAsSuccess)
|
|
}
|