Skip to content
Merged
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
17 changes: 17 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -249,3 +249,20 @@ linters:
issues:
max-issues-per-linter: 0
max-same-issues: 0

formatters:
enable:
- gci
- gofmt
settings:
gci:
sections:
- standard
- default
- prefix(github.com/stokaro/dev-postgres-mcp)
exclusions:
generated: lax
paths:
- 'third_party$'
- 'builtin$'
- 'examples$'
1 change: 0 additions & 1 deletion internal/docker/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"fmt"
"log/slog"


"github.com/docker/docker/api/types/container"
imagetypes "github.com/docker/docker/api/types/image"
"github.com/docker/docker/client"
Expand Down
6 changes: 3 additions & 3 deletions internal/docker/health.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ const (

// HealthCheck represents a health check result.
type HealthCheck struct {
Status HealthStatus `json:"status"`
Message string `json:"message"`
Timestamp time.Time `json:"timestamp"`
Status HealthStatus `json:"status"`
Message string `json:"message"`
Timestamp time.Time `json:"timestamp"`
Duration time.Duration `json:"duration"`
}

Expand Down
1 change: 0 additions & 1 deletion internal/docker/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"strconv"
"time"


"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/filters"
"github.com/docker/go-connections/nat"
Expand Down
24 changes: 12 additions & 12 deletions internal/mcp/logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func SetupLogging(config LoggingConfig) {
var handler slog.Handler

opts := &slog.HandlerOptions{
Level: level,
Level: level,
AddSource: level == slog.LevelDebug, // Add source info for debug level
}

Expand Down Expand Up @@ -133,75 +133,75 @@ func LoggerWithContext(ctx context.Context, attrs ...slog.Attr) *slog.Logger {
// LogMCPOperation logs an MCP operation with standard fields.
func LogMCPOperation(ctx context.Context, operation string, attrs ...slog.Attr) {
logger := LoggerWithContext(ctx)

baseAttrs := []slog.Attr{
slog.String("operation", operation),
slog.Time("timestamp", time.Now()),
}

baseAttrs = append(baseAttrs, attrs...)
logger.LogAttrs(ctx, slog.LevelInfo, "MCP operation", baseAttrs...)
}

// LogDockerOperation logs a Docker operation with standard fields.
func LogDockerOperation(ctx context.Context, operation string, containerID string, attrs ...slog.Attr) {
logger := LoggerWithContext(ctx)

baseAttrs := []slog.Attr{
slog.String("operation", operation),
slog.String("container_id", containerID),
slog.Time("timestamp", time.Now()),
}

baseAttrs = append(baseAttrs, attrs...)
logger.LogAttrs(ctx, slog.LevelInfo, "Docker operation", baseAttrs...)
}

// LogPostgreSQLOperation logs a PostgreSQL operation with standard fields.
func LogPostgreSQLOperation(ctx context.Context, operation string, instanceID string, attrs ...slog.Attr) {
logger := LoggerWithContext(ctx)

baseAttrs := []slog.Attr{
slog.String("operation", operation),
slog.String("instance_id", instanceID),
slog.Time("timestamp", time.Now()),
}

baseAttrs = append(baseAttrs, attrs...)
logger.LogAttrs(ctx, slog.LevelInfo, "PostgreSQL operation", baseAttrs...)
}

// LogError logs an error with context and additional attributes.
func LogError(ctx context.Context, err error, message string, attrs ...slog.Attr) {
logger := LoggerWithContext(ctx)

baseAttrs := []slog.Attr{
slog.String("error", err.Error()),
slog.Time("timestamp", time.Now()),
}

baseAttrs = append(baseAttrs, attrs...)
logger.LogAttrs(ctx, slog.LevelError, message, baseAttrs...)
}

// LogPerformance logs performance metrics for operations.
func LogPerformance(ctx context.Context, operation string, duration time.Duration, attrs ...slog.Attr) {
logger := LoggerWithContext(ctx)

baseAttrs := []slog.Attr{
slog.String("operation", operation),
slog.Duration("duration", duration),
slog.Time("timestamp", time.Now()),
}

baseAttrs = append(baseAttrs, attrs...)
logger.LogAttrs(ctx, slog.LevelInfo, "Performance metric", baseAttrs...)
}

// LogHealthCheck logs health check results.
func LogHealthCheck(ctx context.Context, instanceID string, status string, duration time.Duration, message string) {
logger := LoggerWithContext(ctx)

logger.LogAttrs(ctx, slog.LevelInfo, "Health check completed",
slog.String("instance_id", instanceID),
slog.String("status", status),
Expand Down
2 changes: 1 addition & 1 deletion internal/postgres/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ func generatePassword(length int) (string, error) {

// Use base64 encoding to ensure printable characters
password := base64.URLEncoding.EncodeToString(bytes)

// Trim to desired length
if len(password) > length {
password = password[:length]
Expand Down
3 changes: 1 addition & 2 deletions pkg/types/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ package types
import (
"time"


"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/container"
)

// PostgreSQLInstance represents a PostgreSQL database instance.
Expand Down
2 changes: 1 addition & 1 deletion test/unit/postgres_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func TestDSNGeneration(t *testing.T) {
Password: "testpass",
SSLMode: "disable",
Options: map[string]string{
"connect_timeout": "10",
"connect_timeout": "10",
"application_name": "test_app",
},
},
Expand Down
Loading