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 }