Files
lingniu-vehicle-ingest/vehicle-data-platform/apps/api/cmd/open-platform-api/main.go
2026-07-27 16:46:15 +08:00

83 lines
2.2 KiB
Go

package main
import (
"context"
"database/sql"
"log"
"net/http"
"os"
"strconv"
"time"
_ "github.com/go-sql-driver/mysql"
_ "github.com/taosdata/driver-go/v3/taosWS"
"lingniu/vehicle-data-platform/apps/api/internal/openplatform"
)
func main() {
mysqlDSN := os.Getenv("MYSQL_DSN")
if mysqlDSN == "" {
log.Fatal("MYSQL_DSN is required")
}
db, err := sql.Open("mysql", mysqlDSN)
if err != nil {
log.Fatal(err)
}
defer db.Close()
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := db.PingContext(ctx); err != nil {
log.Fatalf("connect MySQL: %v", err)
}
tdengineDSN := os.Getenv("TDENGINE_DSN")
if tdengineDSN == "" {
log.Fatal("TDENGINE_DSN is required")
}
tdengineDriver := env("TDENGINE_DRIVER", "taosWS")
tdengineDB, err := sql.Open(tdengineDriver, tdengineDSN)
if err != nil {
log.Fatal(err)
}
defer tdengineDB.Close()
tdCtx, tdCancel := context.WithTimeout(context.Background(), 5*time.Second)
defer tdCancel()
if err := tdengineDB.PingContext(tdCtx); err != nil {
log.Fatalf("connect TDengine: %v", err)
}
addr := env("OPEN_PLATFORM_HTTP_ADDR", ":20310")
handler := openplatform.NewStandaloneServer(db, openplatform.StandaloneConfig{
StaticDir: os.Getenv("OPEN_PLATFORM_STATIC_DIR"),
SessionTTL: time.Duration(envInt("OPEN_PLATFORM_SESSION_TTL_HOURS", 12)) * time.Hour,
RequestTimeout: time.Duration(envInt("OPEN_PLATFORM_REQUEST_TIMEOUT_MS", 10000)) * time.Millisecond,
Release: os.Getenv("OPEN_PLATFORM_RELEASE"),
TDengine: tdengineDB,
TDengineDatabase: env("TDENGINE_DATABASE", "lingniu_vehicle_ts"),
})
server := &http.Server{
Addr: addr,
Handler: handler,
ReadHeaderTimeout: 5 * time.Second,
IdleTimeout: 60 * time.Second,
}
log.Printf("vehicle open platform listening on %s", addr)
if err := server.ListenAndServe(); err != nil {
log.Fatal(err)
}
}
func env(name, fallback string) string {
if value := os.Getenv(name); value != "" {
return value
}
return fallback
}
func envInt(name string, fallback int) int {
value, err := strconv.Atoi(os.Getenv(name))
if err != nil {
return fallback
}
return value
}