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:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"expvar"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -92,14 +93,45 @@ func main() {
|
||||
}
|
||||
logger.Info("connected to postgresql successfully")
|
||||
|
||||
logDB := db
|
||||
if cfg.Log.DSN != "" {
|
||||
logDB, err = gorm.Open(postgres.Open(cfg.Log.DSN), &gorm.Config{})
|
||||
if err != nil {
|
||||
fatal(logger, "failed to connect to log database", "err", err)
|
||||
}
|
||||
sqlLogDB, err := logDB.DB()
|
||||
if err != nil {
|
||||
fatal(logger, "failed to get log database object", "err", err)
|
||||
}
|
||||
if err := sqlLogDB.Ping(); err != nil {
|
||||
fatal(logger, "failed to ping log database", "err", err)
|
||||
}
|
||||
logger.Info("connected to log database successfully")
|
||||
}
|
||||
|
||||
// Auto Migrate
|
||||
if err := db.AutoMigrate(&model.Master{}, &model.Key{}, &model.Provider{}, &model.Model{}, &model.Binding{}, &model.LogRecord{}); err != nil {
|
||||
fatal(logger, "failed to auto migrate", "err", err)
|
||||
if logDB != db {
|
||||
if err := db.AutoMigrate(&model.Master{}, &model.Key{}, &model.Provider{}, &model.Model{}, &model.Binding{}); err != nil {
|
||||
fatal(logger, "failed to auto migrate", "err", err)
|
||||
}
|
||||
if err := logDB.AutoMigrate(&model.LogRecord{}); err != nil {
|
||||
fatal(logger, "failed to auto migrate log tables", "err", err)
|
||||
}
|
||||
if err := service.EnsureLogIndexes(logDB); err != nil {
|
||||
fatal(logger, "failed to ensure log indexes", "err", err)
|
||||
}
|
||||
} else {
|
||||
if err := db.AutoMigrate(&model.Master{}, &model.Key{}, &model.Provider{}, &model.Model{}, &model.Binding{}, &model.LogRecord{}); err != nil {
|
||||
fatal(logger, "failed to auto migrate", "err", err)
|
||||
}
|
||||
if err := service.EnsureLogIndexes(db); err != nil {
|
||||
fatal(logger, "failed to ensure log indexes", "err", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 4. Setup Services and Handlers
|
||||
syncService := service.NewSyncService(rdb)
|
||||
logWriter := service.NewLogWriter(db, cfg.Log.QueueCapacity, cfg.Log.BatchSize, cfg.Log.FlushInterval)
|
||||
logWriter := service.NewLogWriter(logDB, cfg.Log.QueueCapacity, cfg.Log.BatchSize, cfg.Log.FlushInterval)
|
||||
logCtx, cancelLogs := context.WithCancel(context.Background())
|
||||
defer cancelLogs()
|
||||
logWriter.Start(logCtx)
|
||||
@@ -107,7 +139,7 @@ func main() {
|
||||
quotaCtx, cancelQuota := context.WithCancel(context.Background())
|
||||
defer cancelQuota()
|
||||
go quotaResetter.Start(quotaCtx)
|
||||
logCleaner := cron.NewLogCleaner(db, rdb, cfg.Log.RetentionDays, int64(cfg.Log.MaxRecords), time.Hour)
|
||||
logCleaner := cron.NewLogCleaner(logDB, rdb, cfg.Log.RetentionDays, int64(cfg.Log.MaxRecords), time.Hour)
|
||||
cleanerCtx, cancelCleaner := context.WithCancel(context.Background())
|
||||
defer cancelCleaner()
|
||||
go logCleaner.Start(cleanerCtx)
|
||||
@@ -119,9 +151,9 @@ func main() {
|
||||
masterService := service.NewMasterService(db)
|
||||
healthService := service.NewHealthCheckService(db, rdb)
|
||||
|
||||
handler := api.NewHandler(db, syncService, logWriter, rdb)
|
||||
adminHandler := api.NewAdminHandler(db, masterService, syncService)
|
||||
masterHandler := api.NewMasterHandler(db, masterService, syncService)
|
||||
handler := api.NewHandler(db, logDB, syncService, logWriter, rdb)
|
||||
adminHandler := api.NewAdminHandler(db, logDB, masterService, syncService)
|
||||
masterHandler := api.NewMasterHandler(db, logDB, masterService, syncService)
|
||||
internalHandler := api.NewInternalHandler(db)
|
||||
featureHandler := api.NewFeatureHandler(rdb)
|
||||
modelRegistryService := service.NewModelRegistryService(db, rdb, service.ModelRegistryConfig{
|
||||
@@ -179,6 +211,7 @@ func main() {
|
||||
internalGroup.Use(middleware.InternalAuthMiddleware(cfg.Internal.StatsToken))
|
||||
{
|
||||
internalGroup.POST("/stats/flush", internalHandler.FlushStats)
|
||||
internalGroup.GET("/metrics", gin.WrapH(expvar.Handler()))
|
||||
}
|
||||
|
||||
// Admin Routes
|
||||
|
||||
Reference in New Issue
Block a user