Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/pgcreate.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ printed as text. Use --output json, yaml, or text for non-interactive output.`,

cmd.Flags().Int("disk-size-gb", 0, "Set the disk size in GB. Must be 1 or a multiple of 5. Server picks a sensible default based on compute size if unset.")
cmd.Flags().Bool("disk-autoscaling", false, "Enable disk autoscaling")
cmd.Flags().String("connection-pool", "none", "Set connection pool to 'none' or 'pgbouncer'")
cmd.Flags().Bool("high-availability", false, "Enable high availability (Pro plans and above)")

cmd.Flags().String("datadog-api-key", "", "Set the Datadog API key for monitoring")
Expand Down
2 changes: 2 additions & 0 deletions cmd/pgcreate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ func TestPGCreate_AllFlags(t *testing.T) {
"--database-user", "metrics_user",
"--disk-size-gb", "105",
"--disk-autoscaling",
"--connection-pool", "pgbouncer",
"--high-availability",
"--datadog-api-key", "dd-key",
"--datadog-site", "US3",
Expand All @@ -67,6 +68,7 @@ func TestPGCreate_AllFlags(t *testing.T) {
require.NotNil(t, pg.DiskSizeGB)
assert.Equal(t, 105, *pg.DiskSizeGB)
assert.True(t, pg.DiskAutoscalingEnabled)
assert.Equal(t, "pgbouncer", pg.ConnectionPool)
assert.True(t, pg.HighAvailabilityEnabled)
require.Len(t, pg.IpAllowList, 1)
assert.Equal(t, "10.0.0.0/8", pg.IpAllowList[0].CidrBlock)
Expand Down
1 change: 1 addition & 0 deletions cmd/pgupdate.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ mutually exclusive.`,

cmd.Flags().Int("disk-size-gb", 0, "Set the disk size in GB. Must be 1 or a multiple of 5.")
cmd.Flags().Bool("disk-autoscaling", false, "Enable disk autoscaling. Pass --disk-autoscaling=false to disable.")
cmd.Flags().String("connection-pool", "none", "Set connection pool to 'none' or 'pgbouncer'")
cmd.Flags().Bool("high-availability", false, "Enable high availability (Pro plans and above). Pass --high-availability=false to disable.")

cmd.Flags().String("datadog-api-key", "", "Set the Datadog API key for monitoring. Pass an empty string to remove.")
Expand Down
5 changes: 5 additions & 0 deletions internal/fakes/renderapi/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ func postgresListItem(pg *client.PostgresDetail) client.Postgres {
DatabaseName: pg.DatabaseName,
DatabaseUser: pg.DatabaseUser,
DiskAutoscalingEnabled: pg.DiskAutoscalingEnabled,
ConnectionPool: pg.ConnectionPool,
DiskSizeGB: pg.DiskSizeGB,
EnvironmentId: pg.EnvironmentId,
ExpiresAt: pg.ExpiresAt,
Expand Down Expand Up @@ -853,6 +854,7 @@ func NewServer(t *testing.T) *Server {
DatabaseUser: databaseUser,
DiskSizeGB: body.DiskSizeGB,
DiskAutoscalingEnabled: pointers.ValueOrDefault(body.EnableDiskAutoscaling, false),
ConnectionPool: pointers.ValueOrDefault(body.ConnectionPool, "none"),
HighAvailabilityEnabled: pointers.ValueOrDefault(body.EnableHighAvailability, false),
EnvironmentId: body.EnvironmentId,
IpAllowList: ipAllowList,
Expand Down Expand Up @@ -991,6 +993,9 @@ func NewServer(t *testing.T) *Server {
if body.EnableDiskAutoscaling != nil {
pg.DiskAutoscalingEnabled = *body.EnableDiskAutoscaling
}
if body.ConnectionPool != nil {
pg.ConnectionPool = *body.ConnectionPool
}
if body.EnableHighAvailability != nil {
pg.HighAvailabilityEnabled = *body.EnableHighAvailability
}
Expand Down
69 changes: 69 additions & 0 deletions pkg/client/events/events_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions pkg/client/eventtypes/eventtypes_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 19 additions & 8 deletions pkg/client/types_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pkg/postgres/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ type CreateRequestInput struct {
HighAvailability *bool
DiskSizeGB *int
DiskAutoscaling *bool
ConnectionPool *string
DatadogAPIKey *string
DatadogSite *string
IPAllowList []string
Expand Down Expand Up @@ -69,6 +70,7 @@ func buildRequestInput(in pgtypes.CreatePostgresInput, ownerID string, environme
HighAvailability: in.HighAvailability,
DiskSizeGB: in.DiskSizeGB,
DiskAutoscaling: in.DiskAutoscaling,
ConnectionPool: in.ConnectionPool,
DatadogAPIKey: in.DatadogAPIKey,
DatadogSite: in.DatadogSite,
IPAllowList: in.IPAllowList,
Expand Down Expand Up @@ -107,6 +109,7 @@ func BuildCreateRequest(input CreateRequestInput) (client.CreatePostgresJSONRequ
DatadogSite: input.DatadogSite,
DiskSizeGB: input.DiskSizeGB,
EnableDiskAutoscaling: input.DiskAutoscaling,
ConnectionPool: input.ConnectionPool,
EnableHighAvailability: input.HighAvailability,
EnvironmentId: input.EnvironmentID,
ReadReplicas: buildReadReplicas(input.ReadReplicas),
Expand Down
3 changes: 3 additions & 0 deletions pkg/postgres/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ func TestBuildCreateRequest_AllFieldsSpecified(t *testing.T) {
HighAvailability: pointers.From(true),
DiskSizeGB: pointers.From(100),
DiskAutoscaling: pointers.From(true),
ConnectionPool: pointers.From("pgbouncer"),
DatadogAPIKey: pointers.From("dd-key"),
DatadogSite: pointers.From("US3"),
IPAllowList: []string{
Expand All @@ -96,6 +97,7 @@ func TestBuildCreateRequest_AllFieldsSpecified(t *testing.T) {
assert.Equal(t, pointers.From(true), body.EnableHighAvailability)
assert.Equal(t, pointers.From(100), body.DiskSizeGB)
assert.Equal(t, pointers.From(true), body.EnableDiskAutoscaling)
assert.Equal(t, pointers.From("pgbouncer"), body.ConnectionPool)
assert.Equal(t, pointers.From("dd-key"), body.DatadogAPIKey)
assert.Equal(t, pointers.From("US3"), body.DatadogSite)
assert.Equal(t, &envID, body.EnvironmentId)
Expand Down Expand Up @@ -129,6 +131,7 @@ func TestBuildCreateRequest_OmitsOptionalsWhenUnset(t *testing.T) {
assert.Nil(t, body.EnableHighAvailability)
assert.Nil(t, body.DiskSizeGB)
assert.Nil(t, body.EnableDiskAutoscaling)
assert.Nil(t, body.ConnectionPool)
assert.Nil(t, body.DatadogAPIKey)
assert.Nil(t, body.DatadogSite)
assert.Nil(t, body.EnvironmentId)
Expand Down
4 changes: 4 additions & 0 deletions pkg/postgres/output.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ type PostgresUpdateDiff struct {
Plan *PostgresFieldDiff[pgclient.PostgresPlans] `json:"plan,omitempty"`
DiskSizeGB *PostgresFieldDiff[*int] `json:"diskSizeGB,omitempty"`
DiskAutoscalingEnabled *PostgresFieldDiff[bool] `json:"diskAutoscalingEnabled,omitempty"`
ConnectionPool *PostgresFieldDiff[string] `json:"connectionPool,omitempty"`
HighAvailabilityEnabled *PostgresFieldDiff[bool] `json:"highAvailabilityEnabled,omitempty"`
IPAllowList *PostgresFieldDiff[[]client.CidrBlockAndDescription] `json:"ipAllowList,omitempty"`
}
Expand Down Expand Up @@ -151,6 +152,9 @@ func newPostgresUpdateDiff(before *client.PostgresDetail, after *PostgresOut) Po
if before.DiskAutoscalingEnabled != after.DiskAutoscalingEnabled {
diff.DiskAutoscalingEnabled = newPostgresFieldDiff(before.DiskAutoscalingEnabled, after.DiskAutoscalingEnabled)
}
if before.ConnectionPool != after.ConnectionPool {
diff.ConnectionPool = newPostgresFieldDiff(before.ConnectionPool, after.ConnectionPool)
}
if before.HighAvailabilityEnabled != after.HighAvailabilityEnabled {
diff.HighAvailabilityEnabled = newPostgresFieldDiff(before.HighAvailabilityEnabled, after.HighAvailabilityEnabled)
}
Expand Down
6 changes: 6 additions & 0 deletions pkg/postgres/output_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ func TestNewPostgresListOut_ConstructsItems(t *testing.T) {
DatabaseUser: "analytics_user",
DiskSizeGB: &diskSizeGB,
DiskAutoscalingEnabled: true,
ConnectionPool: "pgbouncer",
HighAvailabilityEnabled: true,
IpAllowList: nil,
ReadReplicas: client.ReadReplicas{{Id: "dpg-replica-2", Name: "analytics-replica-2", ParameterOverrides: &replicaOverrides}},
Expand Down Expand Up @@ -85,6 +86,7 @@ func TestNewPostgresGetOut_JSONSerialization(t *testing.T) {
DatabaseUser: "analytics_user",
DiskSizeGB: pointers.From(20),
DiskAutoscalingEnabled: true,
ConnectionPool: "none",
HighAvailabilityEnabled: true,
IpAllowList: []client.CidrBlockAndDescription{{CidrBlock: "203.0.113.5/32", Description: "office"}},
ReadReplicas: client.ReadReplicas{{Id: "dpg-replica", Name: "analytics-replica", ParameterOverrides: &replicaOverrides}},
Expand Down Expand Up @@ -131,6 +133,7 @@ func TestNewPostgresGetOut_JSONSerialization(t *testing.T) {
"databaseUser": "analytics_user",
"diskSizeGB": float64(20),
"diskAutoscalingEnabled": true,
"connectionPool": "none",
"highAvailabilityEnabled": true,
"ipAllowList": []any{map[string]any{"cidrBlock": "203.0.113.5/32", "description": "office"}},
"readReplicas": []any{map[string]any{"id": "dpg-replica", "name": "analytics-replica"}},
Expand Down Expand Up @@ -263,6 +266,7 @@ func TestNewPostgresUpdateOut(t *testing.T) {
Plan: pgclient.Pro4gb,
DiskSizeGB: &beforeDiskSize,
DiskAutoscalingEnabled: false,
ConnectionPool: "pgbouncer",
HighAvailabilityEnabled: false,
IpAllowList: []client.CidrBlockAndDescription{{CidrBlock: "203.0.113.5/32", Description: "office"}},
ParameterOverrides: &beforeOverrides,
Expand All @@ -276,6 +280,7 @@ func TestNewPostgresUpdateOut(t *testing.T) {
Plan: pgclient.Pro8gb,
DiskSizeGB: &afterDiskSize,
DiskAutoscalingEnabled: true,
ConnectionPool: "none",
HighAvailabilityEnabled: true,
IpAllowList: []client.CidrBlockAndDescription{},
ParameterOverrides: &afterOverrides,
Expand All @@ -295,6 +300,7 @@ func TestNewPostgresUpdateOut(t *testing.T) {
"plan": map[string]any{"before": "pro_4gb", "after": "pro_8gb"},
"diskSizeGB": map[string]any{"before": float64(10), "after": float64(20)},
"diskAutoscalingEnabled": map[string]any{"before": false, "after": true},
"connectionPool": map[string]any{"before": "pgbouncer", "after": "none"},
"highAvailabilityEnabled": map[string]any{"before": false, "after": true},
"ipAllowList": map[string]any{
"before": []any{map[string]any{"cidrBlock": "203.0.113.5/32", "description": "office"}},
Expand Down
4 changes: 4 additions & 0 deletions pkg/postgres/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ func BuildUpdateRequest(input pgtypes.UpdatePostgresInput) (client.UpdatePostgre
body.EnableDiskAutoscaling = input.DiskAutoscaling
}

if input.ConnectionPool != nil {
body.ConnectionPool = input.ConnectionPool
}

if input.HighAvailability != nil {
body.EnableHighAvailability = input.HighAvailability
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/postgres/update_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ func TestBuildUpdateRequest_OnlyNameSet(t *testing.T) {
assert.Nil(t, body.Plan)
assert.Nil(t, body.DiskSizeGB)
assert.Nil(t, body.EnableDiskAutoscaling)
assert.Nil(t, body.ConnectionPool)
assert.Nil(t, body.EnableHighAvailability)
assert.Nil(t, body.DatadogAPIKey)
assert.Nil(t, body.DatadogSite)
Expand Down Expand Up @@ -82,6 +83,7 @@ func TestBuildUpdateRequest_AllScalarFields(t *testing.T) {
Plan: pointers.From("standard"),
DiskSizeGB: pointers.From(100),
DiskAutoscaling: pointers.From(true),
ConnectionPool: pointers.From("pgbouncer"),
HighAvailability: pointers.From(true),
DatadogAPIKey: pointers.From("dd-key"),
DatadogSite: pointers.From("US3"),
Expand All @@ -94,6 +96,7 @@ func TestBuildUpdateRequest_AllScalarFields(t *testing.T) {
assert.Equal(t, pgclient.PostgresPlans("standard"), *body.Plan)
assert.Equal(t, pointers.From(100), body.DiskSizeGB)
assert.Equal(t, pointers.From(true), body.EnableDiskAutoscaling)
assert.Equal(t, pointers.From("pgbouncer"), body.ConnectionPool)
assert.Equal(t, pointers.From(true), body.EnableHighAvailability)
assert.Equal(t, pointers.From("dd-key"), body.DatadogAPIKey)
assert.Equal(t, pointers.From("US3"), body.DatadogSite)
Expand Down
4 changes: 4 additions & 0 deletions pkg/text/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ func PostgresDetail(pg *postgres.PostgresOut) string {
lines = append(lines, fmt.Sprintf("Disk size: %d GB", *pg.DiskSizeGB))
}
lines = append(lines, fmt.Sprintf("Disk autoscaling: %s", boolLabel(pg.DiskAutoscalingEnabled)))
lines = append(lines, fmt.Sprintf("Connection pool: %s", pg.ConnectionPool))
lines = append(lines, fmt.Sprintf("High availability: %s", boolLabel(pg.HighAvailabilityEnabled)))
lines = append(lines, fmt.Sprintf("Dashboard: %s", pg.DashboardUrl))
if block := readReplicasBlock(pg.ReadReplicas); block != "" {
Expand Down Expand Up @@ -138,6 +139,9 @@ func PostgresUpdateDiff(diff postgres.PostgresUpdateDiff) string {
if diff.DiskAutoscalingEnabled != nil {
lines = append(lines, fmt.Sprintf(" %-20s%s → %s", "Disk autoscaling:", boolLabel(diff.DiskAutoscalingEnabled.Before), boolLabel(diff.DiskAutoscalingEnabled.After)))
}
if diff.ConnectionPool != nil {
lines = append(lines, fmt.Sprintf(" %-20s%s → %s", "Connection pool:", diff.ConnectionPool.Before, diff.ConnectionPool.After))
}
if diff.HighAvailabilityEnabled != nil {
lines = append(lines, fmt.Sprintf(" %-20s%s → %s", "High availability:", boolLabel(diff.HighAvailabilityEnabled.Before), boolLabel(diff.HighAvailabilityEnabled.After)))
}
Expand Down
7 changes: 7 additions & 0 deletions pkg/text/postgres_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,13 @@ func TestPostgresDetail_OptionalFields(t *testing.T) {
out := basicPostgresOut(pg)
assert.Contains(t, text.PostgresDetail(&out), "Environment: evm-123")
})

t.Run("includes connection pool when set", func(t *testing.T) {
pg := basicPostgres()
pg.ConnectionPool = pointers.From("pgbouncer")
out := basicPostgresOut(pg)
assert.Contains(t, text.PostgresDetail(&out), "Connection Pool: pgbouncer")
})
}

func TestPostgresDetail_BoolLabels(t *testing.T) {
Expand Down
Loading