From e7a68296dbbf7be4270bda5759212ec69baa14d0 Mon Sep 17 00:00:00 2001 From: gmolinas <90208075+gmolinas@users.noreply.github.com> Date: Wed, 29 Mar 2023 16:28:31 -0300 Subject: [PATCH 1/7] feat(healthchecks): Add healthchecks for SQL Server in health-go/v5 library This commit adds healthchecks for SQL Server in the health-go/v5 library from github.com/hellofresh. The healthchecks include connectivity tests to ensure that SQL Server is responding and accessible. The healthchecks were added in the healthchecks package, and can be accessed by importing the package and calling the appropriate function. --- README.md | 1 + Taskfile.yaml | 3 + checks/sqlserver/check.go | 56 ++++++++++++++++++ checks/sqlserver/check_test.go | 102 +++++++++++++++++++++++++++++++++ docker-compose.yml | 13 +++++ docs/index.md | 1 + go.mod | 12 +++- go.sum | 54 +++++++++++++++-- 8 files changed, 237 insertions(+), 5 deletions(-) create mode 100644 checks/sqlserver/check.go create mode 100644 checks/sqlserver/check_test.go diff --git a/README.md b/README.md index b1966e2..e69a4e0 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ * HTTP * MongoDB * MySQL + * SQLServer * gRPC * Memcached * InfluxDB diff --git a/Taskfile.yaml b/Taskfile.yaml index b961256..5e3babe 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -46,6 +46,8 @@ tasks: sh: docker-compose port mongo 27017 MYSQL_HOST: sh: docker-compose port mysql 3306 + SQLSERVER_HOST: + sh: docker-compose port sqlserver 1433 MEMCACHED_HOST: sh: docker-compose port memcached 11211 INFLUX_HOST: @@ -59,5 +61,6 @@ tasks: HEALTH_GO_RD_DSN: 'redis://{{.REDIS_HOST}}/' HEALTH_GO_MG_DSN: 'mongodb://{{.MONGO_HOST}}/' HEALTH_GO_MS_DSN: 'test:test@tcp({{.MYSQL_HOST}})/test?charset=utf8' + HEALTH_GO_SS_DSN: 'sqlserver://test:test@{{.SQLSERVER_HOST}}?database=test' HEALTH_GO_MD_DSN: 'memcached://localhost:{{.MEMCACHED_HOST}}/' HEALTH_GO_INFLUXDB_URL: 'http://{{.INFLUX_HOST}}' diff --git a/checks/sqlserver/check.go b/checks/sqlserver/check.go new file mode 100644 index 0000000..ae669ee --- /dev/null +++ b/checks/sqlserver/check.go @@ -0,0 +1,56 @@ +package sqlserver + +import ( + "context" + "database/sql" + "fmt" + + "github.com/microsoft/go-mssqldb/azuread" +) + +// Config is the SQL Server checker configuration settings container. +type Config struct { + // DSN is the SQL Server instance connection DSN. Required. + DSN string +} + +// New creates new SQL Server health check that verifies the following: +// - connection establishing +// - doing the ping command +// - selecting SQL Server version +func New(config Config) func(ctx context.Context) error { + return func(ctx context.Context) (checkErr error) { + db, err := sql.Open(azuread.DriverName, config.DSN) + if err != nil { + checkErr = fmt.Errorf("SQL Server health check failed on connect: %w", err) + return + } + + defer func() { + // override checkErr only if there were no other errors + if err = db.Close(); err != nil && checkErr == nil { + checkErr = fmt.Errorf("SQL Server health check failed on connection closing: %w", err) + } + }() + + err = db.PingContext(ctx) + if err != nil { + checkErr = fmt.Errorf("SQL Server health check failed on ping: %w", err) + return + } + + rows, err := db.QueryContext(ctx, `SELECT @@VERSION`) + if err != nil { + checkErr = fmt.Errorf("SQL Server health check failed on select: %w", err) + return + } + defer func() { + // override checkErr only if there were no other errors + if err = rows.Close(); err != nil && checkErr == nil { + checkErr = fmt.Errorf("SQL Server health check failed on rows closing: %w", err) + } + }() + + return + } +} diff --git a/checks/sqlserver/check_test.go b/checks/sqlserver/check_test.go new file mode 100644 index 0000000..e10f603 --- /dev/null +++ b/checks/sqlserver/check_test.go @@ -0,0 +1,102 @@ +package sqlserver + +import ( + "context" + "database/sql" + "os" + "sync" + "testing" + "time" + + "github.com/microsoft/go-mssqldb/azuread" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +const sqlServerDSNEnv = "HEALTH_SS_DSN" + +func TestNew(t *testing.T) { + initDB(t) + + check := New(Config{ + DSN: getDSN(t), + }) + + err := check(context.Background()) + require.NoError(t, err) +} + +func TestEnsureConnectionIsClosed(t *testing.T) { + initDB(t) + + sqlServerDSN := getDSN(t) + + db, err := sql.Open(azuread.DriverName, sqlServerDSN) + require.NoError(t, err) + + defer func() { + err := db.Close() + assert.NoError(t, err) + }() + + var ( + initialConnections int + ) + row := db.QueryRow(`SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'User Connections' AND instance_name = 'Total'`) + err = row.Scan(&initialConnections) + require.NoError(t, err) + + check := New(Config{ + DSN: sqlServerDSN, + }) + + ctx := context.Background() + for i := 0; i < 10; i++ { + err := check(ctx) + assert.NoError(t, err) + time.Sleep(100 * time.Millisecond) + } + + var currentConnections int + row = db.QueryRow(`SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'User Connections' AND instance_name = 'Total'`) + err = row.Scan(¤tConnections) + require.NoError(t, err) + + assert.Equal(t, initialConnections, currentConnections) +} + +func getDSN(t *testing.T) string { + t.Helper() + + sqlServerDSN, ok := os.LookupEnv(sqlServerDSNEnv) + require.True(t, ok) + + return sqlServerDSN +} + +var dbInit sync.Once + +func initDB(t *testing.T) { + t.Helper() + + dbInit.Do(func() { + db, err := sql.Open("sqlserver", getDSN(t)) + require.NoError(t, err) + + defer func() { + err := db.Close() + assert.NoError(t, err) + }() + + _, err = db.Exec(` +CREATE TABLE IF NOT EXISTS test ( + id INT NOT NULL IDENTITY(1,1) PRIMARY KEY , + secret VARCHAR(256) NOT NULL, + extra VARCHAR(256) NOT NULL, + redirect_uri VARCHAR(256) NOT NULL +); +`) + require.NoError(t, err) + }) +} diff --git a/docker-compose.yml b/docker-compose.yml index f214906..22205ed 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -101,6 +101,19 @@ services: timeout: 5s retries: 5 + sqlserver: + image: microsoft/mssql-server-linux:2022-latest + ports: + - "1433" + environment: + ACCEPT_EULA: Y + SA_PASSWORD: test + healthcheck: + test: [ "CMD", "sqlcmd", "-U", "sa", "-P", "test", "-Q", "SELECT 1" ] + interval: 10s + timeout: 5s + retries: 5 + memcached: image: memcached:1.6.9-alpine ports: diff --git a/docs/index.md b/docs/index.md index 184b915..2b46009 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,6 +10,7 @@ * HTTP * MongoDB * MySQL + * SQLServer * gRPC * Memcached diff --git a/go.mod b/go.mod index 2bdd1f0..62ad2c9 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,9 @@ require ( github.com/go-sql-driver/mysql v1.6.0 github.com/influxdata/influxdb-client-go/v2 v2.9.0 github.com/jackc/pgx/v4 v4.16.1 + github.com/jackc/pgx/v5 v5.2.0 github.com/lib/pq v1.10.6 + github.com/microsoft/go-mssqldb v0.21.0 github.com/rabbitmq/amqp091-go v1.3.4 github.com/stretchr/testify v1.8.0 github.com/vitorsalgado/mocha/v2 v2.0.2 @@ -19,11 +21,18 @@ require ( ) require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deepmap/oapi-codegen v1.11.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/go-stack/stack v1.8.0 // indirect + github.com/golang-jwt/jwt/v4 v4.4.2 // indirect + github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect + github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.1 // indirect github.com/google/uuid v1.3.0 // indirect @@ -35,8 +44,9 @@ require ( github.com/jackc/pgproto3/v2 v2.3.0 // indirect github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect github.com/jackc/pgtype v1.11.0 // indirect - github.com/jackc/pgx/v5 v5.2.0 // indirect github.com/klauspost/compress v1.13.6 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/objx v0.4.0 // indirect diff --git a/go.sum b/go.sum index 50aeebe..2612f8e 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,13 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2 h1:lneMk5qtUMulXa/eVxjVd+/bDYMEDIqYpLzLa2/EsNI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 h1:T8quHYlUGyb/oqtSTwqlCr1ilJHrDv+ZtpSfo+hm1BU= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1/go.mod h1:gLa1CL2RNE4s7M3yopJ/p0iq5DdY6Yv5ZUt9MTRZOQM= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 h1:oPdPEZFSbl7oSPEAIPMPBMUmiL+mqgzBJwM/9qYcwNg= +github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1/go.mod h1:4qFor3D/HDsvBME35Xy9rwW9DecL+M2sNw1ybjPtwA0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d h1:pVrfxiGfwelyab6n21ZBkbkmbevaf+WvMIiR7sr97hw= @@ -25,6 +34,9 @@ github.com/deepmap/oapi-codegen v1.11.0 h1:f/X2NdIkaBKsSdpeuwLnY/vDI0AtPUrmB5LMg github.com/deepmap/oapi-codegen v1.11.0/go.mod h1:k+ujhoQGxmQYBZBbxhOZNZf4j08qv5mC+OH+fFTnKxM= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= @@ -57,6 +69,12 @@ github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGF github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -85,10 +103,14 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/influxdata/influxdb-client-go/v2 v2.9.0 h1:1Ejxpt+cpWkadefxd5xvVx7pFgFaafdNp1ItfHzKRW4= github.com/influxdata/influxdb-client-go/v2 v2.9.0/go.mod h1:x7Jo5UHHl+w8wu8UnGiNobDDHygojXwJX4mx7rXGKMk= github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf h1:7JTmneyiNEwVBOHSjoMxiWAqB992atOeepeFYegn5RU= @@ -142,6 +164,12 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -159,6 +187,8 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.7.2/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= @@ -190,15 +220,22 @@ github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/microsoft/go-mssqldb v0.21.0 h1:p2rpHIL7TlSv1QrbXJUAcbyRKnIT0C9rRkH2E4OjLn8= +github.com/microsoft/go-mssqldb v0.21.0/go.mod h1:+4wZTUnz/SV6nffv+RRRB/ss8jPng5Sho2SmM1l2ts4= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -278,6 +315,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -286,9 +324,9 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220513210258-46612604a0f9/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -306,9 +344,12 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220513224357-95641704303c/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= @@ -317,7 +358,6 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220923202941-7f9b1623fab7 h1:ZrnxWX62AgTKOSagEqxvb3ffipvEDX2pl7E1TdqLqIc= golang.org/x/sync v0.0.0-20220923202941-7f9b1623fab7/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -332,15 +372,19 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -353,7 +397,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= @@ -412,7 +455,10 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 2f67baafc9fbd1d714e8caf045dac3dc40c0a64b Mon Sep 17 00:00:00 2001 From: gmolinas <90208075+gmolinas@users.noreply.github.com> Date: Thu, 30 Mar 2023 14:45:49 -0300 Subject: [PATCH 2/7] remove for range messages --- checks/rabbitmq/check.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/checks/rabbitmq/check.go b/checks/rabbitmq/check.go index e4c50bd..135da55 100644 --- a/checks/rabbitmq/check.go +++ b/checks/rabbitmq/check.go @@ -105,10 +105,6 @@ func New(config Config) func(ctx context.Context) error { // release the channel resources, and unblock the receive on done below close(done) - - // now drain any incidental remaining messages - for range messages { - } }() p := amqp.Publishing{Body: []byte(time.Now().Format(time.RFC3339Nano))} From faacf429f719d652d4807042cf296f13d4c3c4ed Mon Sep 17 00:00:00 2001 From: gmolinas <90208075+gmolinas@users.noreply.github.com> Date: Thu, 30 Mar 2023 15:04:28 -0300 Subject: [PATCH 3/7] Fix sqlserver image --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 22205ed..1b56f40 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -102,7 +102,7 @@ services: retries: 5 sqlserver: - image: microsoft/mssql-server-linux:2022-latest + image: mcr.microsoft.com/mssql/server:2022-latest ports: - "1433" environment: From c77cac355ac3569d4c6f678707b9859c3888b334 Mon Sep 17 00:00:00 2001 From: gmolinas <90208075+gmolinas@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:21:28 -0300 Subject: [PATCH 4/7] Fix Check_Test sqlServer --- Taskfile.yaml | 2 +- checks/sqlserver/check_test.go | 36 ++++++++++++++++++++-------------- docker-compose.yml | 15 +++++++++----- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/Taskfile.yaml b/Taskfile.yaml index 5e3babe..3a2ce33 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -61,6 +61,6 @@ tasks: HEALTH_GO_RD_DSN: 'redis://{{.REDIS_HOST}}/' HEALTH_GO_MG_DSN: 'mongodb://{{.MONGO_HOST}}/' HEALTH_GO_MS_DSN: 'test:test@tcp({{.MYSQL_HOST}})/test?charset=utf8' - HEALTH_GO_SS_DSN: 'sqlserver://test:test@{{.SQLSERVER_HOST}}?database=test' + HEALTH_GO_SS_DSN: 'sqlserver://SA:MyPassword123@{{.SQLSERVER_HOST}}/master?encrypt=disable' HEALTH_GO_MD_DSN: 'memcached://localhost:{{.MEMCACHED_HOST}}/' HEALTH_GO_INFLUXDB_URL: 'http://{{.INFLUX_HOST}}' diff --git a/checks/sqlserver/check_test.go b/checks/sqlserver/check_test.go index e10f603..70c2ef4 100644 --- a/checks/sqlserver/check_test.go +++ b/checks/sqlserver/check_test.go @@ -3,6 +3,7 @@ package sqlserver import ( "context" "database/sql" + "fmt" "os" "sync" "testing" @@ -14,7 +15,7 @@ import ( "github.com/stretchr/testify/require" ) -const sqlServerDSNEnv = "HEALTH_SS_DSN" +const sqlServerDSNEnv = "HEALTH_GO_SS_DSN" func TestNew(t *testing.T) { initDB(t) @@ -30,9 +31,9 @@ func TestNew(t *testing.T) { func TestEnsureConnectionIsClosed(t *testing.T) { initDB(t) - sqlServerDSN := getDSN(t) + sqlDSN := getDSN(t) - db, err := sql.Open(azuread.DriverName, sqlServerDSN) + db, err := sql.Open(azuread.DriverName, sqlDSN) require.NoError(t, err) defer func() { @@ -40,15 +41,13 @@ func TestEnsureConnectionIsClosed(t *testing.T) { assert.NoError(t, err) }() - var ( - initialConnections int - ) - row := db.QueryRow(`SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'User Connections' AND instance_name = 'Total'`) + var initialConnections int + row := db.QueryRow(`SELECT COUNT(session_id) FROM sys.dm_exec_sessions`) err = row.Scan(&initialConnections) require.NoError(t, err) check := New(Config{ - DSN: sqlServerDSN, + DSN: sqlDSN, }) ctx := context.Background() @@ -59,7 +58,7 @@ func TestEnsureConnectionIsClosed(t *testing.T) { } var currentConnections int - row = db.QueryRow(`SELECT cntr_value FROM sys.dm_os_performance_counters WHERE counter_name = 'User Connections' AND instance_name = 'Total'`) + row = db.QueryRow(`SELECT COUNT(session_id) FROM sys.dm_exec_sessions`) err = row.Scan(¤tConnections) require.NoError(t, err) @@ -69,7 +68,9 @@ func TestEnsureConnectionIsClosed(t *testing.T) { func getDSN(t *testing.T) string { t.Helper() + //get env sqlServerDSN, ok := os.LookupEnv(sqlServerDSNEnv) + fmt.Println(sqlServerDSN) require.True(t, ok) return sqlServerDSN @@ -81,7 +82,9 @@ func initDB(t *testing.T) { t.Helper() dbInit.Do(func() { - db, err := sql.Open("sqlserver", getDSN(t)) + // sqlDSN := getDSN(t) + + db, err := sql.Open(azuread.DriverName, getDSN(t)) require.NoError(t, err) defer func() { @@ -90,12 +93,15 @@ func initDB(t *testing.T) { }() _, err = db.Exec(` -CREATE TABLE IF NOT EXISTS test ( - id INT NOT NULL IDENTITY(1,1) PRIMARY KEY , - secret VARCHAR(256) NOT NULL, - extra VARCHAR(256) NOT NULL, - redirect_uri VARCHAR(256) NOT NULL +IF OBJECT_ID('dbo.test_mssql', 'U') IS NULL +BEGIN +CREATE TABLE test_mssql ( + id NVARCHAR(255) NOT NULL PRIMARY KEY, + secret NVARCHAR(255) NOT NULL, + extra NVARCHAR(255) NOT NULL, + redirect_uri NVARCHAR(255) NOT NULL ); +END `) require.NoError(t, err) }) diff --git a/docker-compose.yml b/docker-compose.yml index 1b56f40..317823f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -102,14 +102,19 @@ services: retries: 5 sqlserver: - image: mcr.microsoft.com/mssql/server:2022-latest + image: mcr.microsoft.com/mssql/server:2019-latest + container_name: sqlserver ports: - - "1433" + - "1433:1433" environment: - ACCEPT_EULA: Y - SA_PASSWORD: test + SA_PASSWORD: "MyPassword123" + ACCEPT_EULA: "Y" + MSSQL_USER: "Test" + MSSQL_PASSWORD: "MyTestPassword456" + + healthcheck: - test: [ "CMD", "sqlcmd", "-U", "sa", "-P", "test", "-Q", "SELECT 1" ] + test: [ "CMD", "sqlcmd", "-U", "sa", "-P", "MyPassword123", "-Q", "SELECT 1" ] interval: 10s timeout: 5s retries: 5 From 92143a1703734df904dc0742dcf5ecb04ed810b9 Mon Sep 17 00:00:00 2001 From: gmolinas <90208075+gmolinas@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:47:38 -0300 Subject: [PATCH 5/7] Fix sqlserver Docker --- docker-compose.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 317823f..a520e3f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -111,12 +111,10 @@ services: ACCEPT_EULA: "Y" MSSQL_USER: "Test" MSSQL_PASSWORD: "MyTestPassword456" - - healthcheck: - test: [ "CMD", "sqlcmd", "-U", "sa", "-P", "MyPassword123", "-Q", "SELECT 1" ] - interval: 10s - timeout: 5s + test: [ "CMD-SHELL", "pidof sqlservr || exit 1" ] + interval: 30s + timeout: 10s retries: 5 memcached: From 99641d8af16c8f6dc132e8e9e77960ce66ab567e Mon Sep 17 00:00:00 2001 From: gmolinas <90208075+gmolinas@users.noreply.github.com> Date: Mon, 10 Apr 2023 13:12:20 -0300 Subject: [PATCH 6/7] Update checks/sqlserver/check.go Co-authored-by: Lucas Medeiros --- checks/sqlserver/check.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/checks/sqlserver/check.go b/checks/sqlserver/check.go index ae669ee..b7a03c4 100644 --- a/checks/sqlserver/check.go +++ b/checks/sqlserver/check.go @@ -44,12 +44,9 @@ func New(config Config) func(ctx context.Context) error { checkErr = fmt.Errorf("SQL Server health check failed on select: %w", err) return } - defer func() { - // override checkErr only if there were no other errors - if err = rows.Close(); err != nil && checkErr == nil { - checkErr = fmt.Errorf("SQL Server health check failed on rows closing: %w", err) - } - }() + if err = rows.Close(); err != nil { + checkErr = fmt.Errorf("SQL Server health check failed on rows closing: %w", err) + } return } From f52652339f2eb7465466fee782e65da2af5d47c6 Mon Sep 17 00:00:00 2001 From: gmolinas <90208075+gmolinas@users.noreply.github.com> Date: Mon, 10 Apr 2023 13:25:00 -0300 Subject: [PATCH 7/7] making suregerences come true --- Taskfile.yaml | 2 +- checks/rabbitmq/check.go | 4 ++++ checks/sqlserver/check_test.go | 8 ++------ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Taskfile.yaml b/Taskfile.yaml index 3a2ce33..fa59726 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -61,6 +61,6 @@ tasks: HEALTH_GO_RD_DSN: 'redis://{{.REDIS_HOST}}/' HEALTH_GO_MG_DSN: 'mongodb://{{.MONGO_HOST}}/' HEALTH_GO_MS_DSN: 'test:test@tcp({{.MYSQL_HOST}})/test?charset=utf8' - HEALTH_GO_SS_DSN: 'sqlserver://SA:MyPassword123@{{.SQLSERVER_HOST}}/master?encrypt=disable' + HEALTH_GO_SS_DSN: 'sqlserver://Test:MyTestPassword456@{{.SQLSERVER_HOST}}/master?encrypt=disable' HEALTH_GO_MD_DSN: 'memcached://localhost:{{.MEMCACHED_HOST}}/' HEALTH_GO_INFLUXDB_URL: 'http://{{.INFLUX_HOST}}' diff --git a/checks/rabbitmq/check.go b/checks/rabbitmq/check.go index 135da55..e4c50bd 100644 --- a/checks/rabbitmq/check.go +++ b/checks/rabbitmq/check.go @@ -105,6 +105,10 @@ func New(config Config) func(ctx context.Context) error { // release the channel resources, and unblock the receive on done below close(done) + + // now drain any incidental remaining messages + for range messages { + } }() p := amqp.Publishing{Body: []byte(time.Now().Format(time.RFC3339Nano))} diff --git a/checks/sqlserver/check_test.go b/checks/sqlserver/check_test.go index 70c2ef4..2080e37 100644 --- a/checks/sqlserver/check_test.go +++ b/checks/sqlserver/check_test.go @@ -3,7 +3,6 @@ package sqlserver import ( "context" "database/sql" - "fmt" "os" "sync" "testing" @@ -69,9 +68,8 @@ func getDSN(t *testing.T) string { t.Helper() //get env - sqlServerDSN, ok := os.LookupEnv(sqlServerDSNEnv) - fmt.Println(sqlServerDSN) - require.True(t, ok) + sqlServerDSN := os.Getenv(sqlServerDSNEnv) + require.NotEmpty(t, sqlServerDSN) return sqlServerDSN } @@ -82,8 +80,6 @@ func initDB(t *testing.T) { t.Helper() dbInit.Do(func() { - // sqlDSN := getDSN(t) - db, err := sql.Open(azuread.DriverName, getDSN(t)) require.NoError(t, err)