Files
lingniu-vehicle-ingest/vehicle-data-platform/apps/api/internal/app/server.go
2026-07-04 00:55:43 +08:00

47 lines
1.4 KiB
Go

package app
import (
"context"
"database/sql"
"log"
"net/http"
"time"
"lingniu/vehicle-data-platform/apps/api/internal/config"
"lingniu/vehicle-data-platform/apps/api/internal/platform"
"lingniu/vehicle-data-platform/apps/api/internal/static"
)
func NewServer(cfg config.Config) http.Handler {
var store platform.Store = platform.NewMockStore()
if cfg.MySQLDSN != "" {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
db, err := platform.OpenSQL(ctx, "mysql", cfg.MySQLDSN)
if err != nil {
log.Printf("production mysql store disabled: %v", err)
} else {
var tdengine *sql.DB
if cfg.TDengineDSN != "" {
tdengine, err = platform.OpenSQL(ctx, cfg.TDengineDriver, cfg.TDengineDSN)
if err != nil {
log.Printf("production tdengine store disabled: %v", err)
} else {
log.Printf("production tdengine store enabled")
}
}
store = platform.NewProductionStore(db, tdengine, cfg.TDengineDatabase)
log.Printf("production mysql store enabled")
}
}
api := platform.NewHandler(platform.NewService(store))
return withRequestTimeout(static.Handler(cfg.StaticDir, api), cfg.RequestTimeout)
}
func withRequestTimeout(next http.Handler, timeout time.Duration) http.Handler {
if timeout <= 0 {
return next
}
return http.TimeoutHandler(next, timeout, `{"error":{"code":"REQUEST_TIMEOUT","message":"请求处理超时"},"traceId":"timeout","timestamp":0}`)
}