Skip to content

Commit

Permalink
Merge pull request Azure#128 from tonytheleg/ARO-6379-add-resourceid-…
Browse files Browse the repository at this point in the history
…crud

updates db client setup with new config creation
  • Loading branch information
mbarnes authored May 20, 2024
2 parents a87ee6d + d2d6cdb commit e46d4fa
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 18 deletions.
52 changes: 38 additions & 14 deletions frontend/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,54 @@ const (
// DBClient defines the needed values to perform CRUD operations against the async DB
type DBClient struct {
client *azcosmos.Client
DBName string
DBUrl string
config *DBConfig
}

// DBConfig stores database and client configuration data
type DBConfig struct {
DBName string
DBUrl string
ClientOptions *azidentity.DefaultAzureCredentialOptions
}

// NewDatabaseConfig configures database configuration values for access
func NewDatabaseConfig() *DBConfig {
opt := &azidentity.DefaultAzureCredentialOptions{}
c := &DBConfig{
DBName: os.Getenv("DB_NAME"),
DBUrl: os.Getenv("DB_URL"),
ClientOptions: opt,
}
return c
}

// NewDatabaseClient instanstiates a Cosmos DatabaseClient targeting Frontends async DB
func NewDatabaseClient() *DBClient {
cred, _ := azidentity.NewDefaultAzureCredential(nil)
func NewDatabaseClient(config *DBConfig) (*DBClient, error) {
cred, err := azidentity.NewDefaultAzureCredential(config.ClientOptions)
if err != nil {
return nil, err
}

d := &DBClient{
DBName: os.Getenv("DB_NAME"),
DBUrl: os.Getenv("DB_URL"),
config: config,
}

client, err := azcosmos.NewClient(d.config.DBUrl, cred, nil)
if err != nil {
return nil, err
}
client, _ := azcosmos.NewClient(d.DBUrl, cred, nil)
d.client = client

return d
d.client = client
return d, nil
}

// DBConnectionTest checks the async database is accessible on startup
func (d *DBClient) DBConnectionTest(ctx context.Context) (string, error) {
if d.DBName == "none" || d.DBName == "" {
if d.config.DBName == "none" || d.config.DBName == "" {
return "No database configured, skipping", nil
}

database, err := d.client.NewDatabase(d.DBName)
database, err := d.client.NewDatabase(d.config.DBName)
if err != nil {
return "", err
}
Expand All @@ -53,7 +77,7 @@ func (d *DBClient) DBConnectionTest(ctx context.Context) (string, error) {

// GetCluster retreives a cluster document from async DB using resource ID
func (d *DBClient) GetClusterDoc(ctx context.Context, resourceID string, partitionKey string) (*HCPOpenShiftClusterDocument, bool, error) {
container, err := d.client.NewContainer(d.DBName, clustersContainer)
container, err := d.client.NewContainer(d.config.DBName, clustersContainer)
if err != nil {
return nil, false, err
}
Expand Down Expand Up @@ -95,7 +119,7 @@ func (d *DBClient) SetClusterDoc(ctx context.Context, doc *HCPOpenShiftClusterDo
return err
}

container, err := d.client.NewContainer(d.DBName, clustersContainer)
container, err := d.client.NewContainer(d.config.DBName, clustersContainer)
if err != nil {
return err
}
Expand All @@ -118,7 +142,7 @@ func (d *DBClient) DeleteClusterDoc(ctx context.Context, resourceID string, part
return err
}

container, err := d.client.NewContainer(d.DBName, clustersContainer)
container, err := d.client.NewContainer(d.config.DBName, clustersContainer)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions frontend/frontend.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func MuxPattern(method string, segments ...string) string {
return fmt.Sprintf("%s /%s", method, strings.ToLower(path.Join(segments...)))
}

func NewFrontend(logger *slog.Logger, listener net.Listener, emitter metrics.Emitter) *Frontend {
func NewFrontend(logger *slog.Logger, listener net.Listener, emitter metrics.Emitter, dbClient *DBClient) *Frontend {
f := &Frontend{
logger: logger,
listener: listener,
Expand All @@ -65,7 +65,7 @@ func NewFrontend(logger *slog.Logger, listener net.Listener, emitter metrics.Emi
},
},
cache: *NewCache(),
dbClient: *NewDatabaseClient(),
dbClient: *dbClient,
done: make(chan struct{}),
}

Expand Down
13 changes: 11 additions & 2 deletions frontend/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,18 @@ func main() {

// Init prometheus emitter
prometheusEmitter := NewPrometheusEmitter()
frontend := NewFrontend(logger, listener, prometheusEmitter)
// Verify the Async DB is available and accessible

// Configure database configuration and client
dbConfig := NewDatabaseConfig()

dbClient, err := NewDatabaseClient(dbConfig)
if err != nil {
logger.Error(fmt.Sprintf("Creating the database client failed: %v", err))
}

frontend := NewFrontend(logger, listener, prometheusEmitter, dbClient)

// Verify the Async DB is available and accessible
logger.Info("Testing DB Access")
result, err := frontend.dbClient.DBConnectionTest(ctx)
if err != nil {
Expand Down

0 comments on commit e46d4fa

Please sign in to comment.