package main import ( "database/sql" "fmt" "os" _ "github.com/go-sql-driver/mysql" "github.com/sirupsen/logrus" ) var db *sql.DB type DBConfig struct { Host string `json:"host"` Port int `json:"port"` User string `json:"user"` Password string `json:"password"` Database string `json:"database"` } func initDB() error { cfg := DBConfig{ Host: os.Getenv("DB_HOST"), Port: 3306, User: os.Getenv("DB_USER"), Password: os.Getenv("DB_PASSWORD"), Database: os.Getenv("DB_NAME"), } if cfg.Host == "" { cfg.Host = "localhost" } if cfg.User == "" { return fmt.Errorf("database user not configured") } if cfg.Password == "" { return fmt.Errorf("database password not configured") } if cfg.Database == "" { cfg.Database = "rtsp_config" } dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=true", cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.Database) var err error db, err = sql.Open("mysql", dsn) if err != nil { return fmt.Errorf("failed to connect to database: %v", err) } err = db.Ping() if err != nil { return fmt.Errorf("failed to ping database: %v", err) } log.WithFields(logrus.Fields{ "module": "database", "func": "initDB", }).Info("Database connection established") return nil }