diff --git a/base/core/config.go b/base/core/config.go index 62a7c9c3e..42506ec4f 100644 --- a/base/core/config.go +++ b/base/core/config.go @@ -14,13 +14,22 @@ var ( dbWait = utils.PodConfig.GetString("wait_for_db", "empty") ) -func ConfigureApp() { +func configureBaseApp() { utils.ConfigureLogging() - database.Configure() metrics.Configure() database.DBWait(dbWait) } +func ConfigureApp() { + database.Configure() + configureBaseApp() +} + +func ConfigureAdminApp() { + database.ConfigureAdmin() + configureBaseApp() +} + func SetupTestEnvironment() { utils.SetDefaultEnvOrFail("LOG_LEVEL", "debug") ConfigureApp() diff --git a/base/database/setup.go b/base/database/setup.go index c468c6634..9bee4f698 100644 --- a/base/database/setup.go +++ b/base/database/setup.go @@ -12,33 +12,46 @@ import ( ) var ( - DB *gorm.DB - DBReadReplica *gorm.DB - OtherAdvisoryTypes []string - AdvisoryTypes map[int]string - globalPgConfig *PostgreSQLConfig + DB *gorm.DB + DBReadReplica *gorm.DB + OtherAdvisoryTypes []string + AdvisoryTypes map[int]string + globalPgConfig PostgreSQLConfig + globalPgReadReplicaConfig PostgreSQLConfig ) -func InitDB() { - pgConfig := loadEnvPostgreSQLConfig(false) - if DB != nil && pgConfig == globalPgConfig { - // reuse connection - check(DB) - return +func initDB(db *gorm.DB, pgConfig PostgreSQLConfig, globalPgConfig *PostgreSQLConfig) *gorm.DB { + if db == nil || pgConfig != *globalPgConfig { + // create new connection if not already exists + *globalPgConfig = pgConfig + db = openPostgreSQL(globalPgConfig) } - globalPgConfig = pgConfig - DB = openPostgreSQL(pgConfig) - check(DB) - if utils.CoreCfg.DBReadReplicaEnabled { - pgConfig := loadEnvPostgreSQLConfig(ReadReplicaConfigured()) - DBReadReplica = openPostgreSQL(pgConfig) - check(DBReadReplica) + check(db) + return db +} + +func InitAdminDB() { + pgConfig := createPostgreSQLPrimaryAdminConfig() + DB = initDB(DB, pgConfig, &globalPgConfig) +} + +func InitUserDB() { + pgConfig := createPostgreSQLPrimaryUserConfig() + DB = initDB(DB, pgConfig, &globalPgConfig) + if utils.CoreCfg.DBReadReplicaEnabled && ReadReplicaConfigured() { + pgConfig := createPostgreSQLReplicaConfig() + DBReadReplica = initDB(DBReadReplica, pgConfig, &globalPgReadReplicaConfig) } } // Configure Configure database, PostgreSQL or SQLite connection func Configure() { - InitDB() + InitUserDB() + loadAdditionalParamsFromDB() +} + +func ConfigureAdmin() { + InitAdminDB() loadAdditionalParamsFromDB() } @@ -104,19 +117,11 @@ func check(db *gorm.DB) { } // load database config from environment vars using inserted prefix -func loadEnvPostgreSQLConfig(useReadReplica bool) *PostgreSQLConfig { - host := utils.CoreCfg.DBHost - port := utils.CoreCfg.DBPort - if useReadReplica { - host = utils.CoreCfg.DBReadReplicaHost - port = utils.CoreCfg.DBReadReplicaPort - } +func createPostgreSQLPrimaryConfig() PostgreSQLConfig { config := PostgreSQLConfig{ - User: utils.CoreCfg.DBUser, - Host: host, - Port: port, + Host: utils.CoreCfg.DBHost, + Port: utils.CoreCfg.DBPort, Database: utils.CoreCfg.DBName, - Passwd: utils.CoreCfg.DBPassword, SSLMode: utils.CoreCfg.DBSslMode, SSLRootCert: utils.CoreCfg.DBSslRootCert, Debug: utils.CoreCfg.DBDebug, @@ -125,7 +130,30 @@ func loadEnvPostgreSQLConfig(useReadReplica bool) *PostgreSQLConfig { MaxIdleConnections: utils.CoreCfg.DBMaxIdleConnections, MaxConnectionLifetimeS: utils.CoreCfg.DBMaxConnectionLifetimeS, } - return &config + return config +} + +func createPostgreSQLReplicaConfig() PostgreSQLConfig { + config := createPostgreSQLPrimaryConfig() + config.User = utils.CoreCfg.DBUser + config.Passwd = utils.CoreCfg.DBPassword + config.Host = utils.CoreCfg.DBReadReplicaHost + config.Port = utils.CoreCfg.DBReadReplicaPort + return config +} + +func createPostgreSQLPrimaryUserConfig() PostgreSQLConfig { + config := createPostgreSQLPrimaryConfig() + config.User = utils.CoreCfg.DBUser + config.Passwd = utils.CoreCfg.DBPassword + return config +} + +func createPostgreSQLPrimaryAdminConfig() PostgreSQLConfig { + config := createPostgreSQLPrimaryConfig() + config.User = utils.CoreCfg.DBAdminUser + config.Passwd = utils.CoreCfg.DBAdminPassword + return config } // create "data source" config string needed for database connection opening diff --git a/base/utils/rpm.go b/base/utils/rpm.go index 4f70a3c4d..1bfab2e05 100644 --- a/base/utils/rpm.go +++ b/base/utils/rpm.go @@ -6,7 +6,7 @@ import ( "strconv" "strings" - rpm "github.com/ezamriy/gorpm" + rpm "github.com/MichaelMraka/gorpm" "github.com/pkg/errors" ) diff --git a/evaluator/package_cache.go b/evaluator/package_cache.go index a23cabc61..b94e117d6 100644 --- a/evaluator/package_cache.go +++ b/evaluator/package_cache.go @@ -9,7 +9,7 @@ import ( "strings" "time" - rpm "github.com/ezamriy/gorpm" + rpm "github.com/MichaelMraka/gorpm" lru "github.com/hashicorp/golang-lru/v2" "gorm.io/gorm" ) diff --git a/go.mod b/go.mod index 49e363824..cfffe3f71 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module app go 1.24.4 require ( + github.com/MichaelMraka/gorpm v0.0.0-20251128174203-65cf25f01bac github.com/aws/aws-sdk-go v1.55.7 github.com/bytedance/sonic v1.14.2 - github.com/ezamriy/gorpm v0.0.0-20160905202458-25f7273cbf51 github.com/getkin/kin-openapi v0.133.0 github.com/gin-contrib/timeout v1.0.2 github.com/gin-gonic/gin v1.11.0 @@ -19,7 +19,7 @@ require ( github.com/lib/pq v1.10.9 github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 - github.com/project-kessel/kessel-sdk-go v1.3.0 + github.com/project-kessel/kessel-sdk-go v1.4.0 github.com/prometheus/client_golang v1.23.0 github.com/redhatinsights/app-common-go v1.6.9 github.com/redhatinsights/platform-go-middlewares v1.0.0 @@ -137,6 +137,4 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace github.com/ezamriy/gorpm v0.0.0-20160905202458-25f7273cbf51 => github.com/MichaelMraka/gorpm v0.0.0-20210923131407-e21b5950f175 - replace github.com/segmentio/kafka-go v0.4.49 => github.com/MichaelMraka/kafka-go v0.0.0-20251014134425-230b5408c208 diff --git a/go.sum b/go.sum index cb7a1367e..a72b5a597 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= -github.com/MichaelMraka/gorpm v0.0.0-20210923131407-e21b5950f175 h1:KkjlVN/HUw3OStvTnsAKt6bzLfWz/qDzfdNKRAo9Ef0= -github.com/MichaelMraka/gorpm v0.0.0-20210923131407-e21b5950f175/go.mod h1:R3iHBCKh4OIuNrIzJl+81N08s7dD92MLffdRy+wbtnk= +github.com/MichaelMraka/gorpm v0.0.0-20251128174203-65cf25f01bac h1:qxH8XNTYCJvelLn1tm6iwPI2WIOzUu9x4Wzdui5+pUI= +github.com/MichaelMraka/gorpm v0.0.0-20251128174203-65cf25f01bac/go.mod h1:R3iHBCKh4OIuNrIzJl+81N08s7dD92MLffdRy+wbtnk= github.com/MichaelMraka/kafka-go v0.0.0-20251014134425-230b5408c208 h1:+BepVnwpCIO1xQFu5ZxRoPVwadiGaevazv5/RFMDlRw= github.com/MichaelMraka/kafka-go v0.0.0-20251014134425-230b5408c208/go.mod h1:Y1gn60kzLEEaW28YshXyk2+VCUKbJ3Qr6DrnT3i4+9E= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -253,8 +253,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/project-kessel/kessel-sdk-go v1.3.0 h1:9pN66fPL6glNMHMqMmbp44h6hAFKSG6je/8xuowGAVk= -github.com/project-kessel/kessel-sdk-go v1.3.0/go.mod h1:wPQReT5OgUvuipd7ZKSdwwpmFHVSlDiA+ueeueK6R38= +github.com/project-kessel/kessel-sdk-go v1.4.0 h1:k4V/a6G4Es8j//OG1iAd0NF3xZ8o8QymtVlhCSKI4x4= +github.com/project-kessel/kessel-sdk-go v1.4.0/go.mod h1:66IfMGKX5odNiyRa+XxwPdCEoW4wFp5+h23NKN12LLI= github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= diff --git a/scripts/feed_db.go b/scripts/feed_db.go index ee399ac77..f567d4057 100644 --- a/scripts/feed_db.go +++ b/scripts/feed_db.go @@ -6,7 +6,7 @@ import ( ) func main() { - database.InitDB() + database.InitAdminDB() if len(os.Args) > 1 { switch os.Args[1] { case "inventory_hosts": diff --git a/turnpike/admin_api.go b/turnpike/admin_api.go index efb42ff5b..084614f04 100644 --- a/turnpike/admin_api.go +++ b/turnpike/admin_api.go @@ -24,7 +24,7 @@ import ( // @BasePath /api/patch/admin func RunAdminAPI() { - core.ConfigureApp() + core.ConfigureAdminApp() // Toggle Turnpike authentication for internal API (manual sync, re-calc) enableTurnpikeAuth := utils.PodConfig.GetBool("turnpike_auth", true)