mirror of
https://github.com/EZ-Api/ez-api.git
synced 2026-01-13 17:47:51 +00:00
feat(log): wire log db, metrics, and body toggle
This commit is contained in:
28
internal/service/log_indexes.go
Normal file
28
internal/service/log_indexes.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// EnsureLogIndexes creates log_records indexes if missing.
|
||||
func EnsureLogIndexes(db *gorm.DB) error {
|
||||
if db == nil {
|
||||
return nil
|
||||
}
|
||||
stmts := []string{
|
||||
`CREATE INDEX IF NOT EXISTS idx_log_records_created_at ON log_records(created_at);`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_log_records_key_id ON log_records(key_id);`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_log_records_model_name ON log_records(model_name);`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_log_records_group ON log_records("group");`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_log_records_status_code ON log_records(status_code);`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_log_records_created_key ON log_records(created_at, key_id);`,
|
||||
}
|
||||
for _, stmt := range stmts {
|
||||
if err := db.Exec(stmt).Error; err != nil {
|
||||
return fmt.Errorf("ensure log indexes: %w", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"expvar"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
@@ -9,6 +10,11 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
logBatchWriteTotal = expvar.NewInt("log_write_batch_total")
|
||||
logQueueDropped = expvar.NewInt("log_queue_dropped_total")
|
||||
)
|
||||
|
||||
// LogWriter batches log records to reduce IO overhead.
|
||||
type LogWriter struct {
|
||||
ch chan model.LogRecord
|
||||
@@ -48,6 +54,8 @@ func (w *LogWriter) Start(ctx context.Context) {
|
||||
}
|
||||
if err := w.db.Create(&buf).Error; err != nil {
|
||||
slog.Default().Error("log batch insert failed", "err", err)
|
||||
} else {
|
||||
logBatchWriteTotal.Add(1)
|
||||
}
|
||||
buf = buf[:0]
|
||||
}
|
||||
@@ -75,5 +83,6 @@ func (w *LogWriter) Write(rec model.LogRecord) {
|
||||
case w.ch <- rec:
|
||||
default:
|
||||
// drop to avoid blocking hot path
|
||||
logQueueDropped.Add(1)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user