From 36e3b1e870413fe0c193dc5adfbf122163f97476 Mon Sep 17 00:00:00 2001 From: David Abram Date: Mon, 7 Oct 2024 19:28:18 +0200 Subject: [PATCH 1/2] :-| :bacon: --- go.mod | 4 ++- go.sum | 6 ++++ internal/data/event_slices.go | 2 +- internal/data/null_rows.go | 2 +- internal/data/quality_metrics.go | 2 +- internal/data/teams.go | 3 +- internal/handler/api/api.go | 56 +++++++++++++++++++++++++++++--- internal/handler/dashboard.go | 2 +- 8 files changed, 66 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 79f671f3..f64edb48 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,7 @@ require ( require ( github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 // indirect + github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/go-logr/logr v1.4.2 // indirect @@ -36,7 +37,7 @@ require ( github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/klauspost/compress v1.15.15 // indirect github.com/labstack/gommon v0.4.2 // indirect - github.com/libsql/sqlite-antlr4-parser v0.0.0-20230802215326-5cb5bb604475 // indirect + github.com/libsql/sqlite-antlr4-parser v0.0.0-20240327125255-dbf53b6cbf06 // indirect github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -47,6 +48,7 @@ require ( github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect + github.com/tursodatabase/go-libsql v0.0.0-20240916111504-922dfa87e1e6 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/go.sum b/go.sum index e1dc249d..6d361b9a 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ github.com/a-h/templ v0.2.778 h1:VzhOuvWECrwOec4790lcLlZpP4Iptt5Q4K9aFxQmtaM= github.com/a-h/templ v0.2.778/go.mod h1:lq48JXoUvuQrU0VThrK31yFwdRjTCnIE5bcPCM9IP1w= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 h1:goHVqTbFX3AIo0tzGr14pgfAW2ZfPChKO21Z9MGf/gk= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -78,6 +80,8 @@ github.com/libsql/libsql-client-go v0.0.0-20231212112702-ff51beb13681 h1:61Mudd5 github.com/libsql/libsql-client-go v0.0.0-20231212112702-ff51beb13681/go.mod h1:T+1lRvREkstNW7bmF1PTiDhV6hji0mrlfZkZuk/UPhw= github.com/libsql/sqlite-antlr4-parser v0.0.0-20230802215326-5cb5bb604475 h1:6PfEMwfInASh9hkN83aR0j4W/eKaAZt/AURtXAXlas0= github.com/libsql/sqlite-antlr4-parser v0.0.0-20230802215326-5cb5bb604475/go.mod h1:20nXSmcf0nAscrzqsXeC2/tA3KkV2eCiJqYuyAgl+ss= +github.com/libsql/sqlite-antlr4-parser v0.0.0-20240327125255-dbf53b6cbf06 h1:JLvn7D+wXjH9g4Jsjo+VqmzTUpl/LX7vfr6VOfSWTdM= +github.com/libsql/sqlite-antlr4-parser v0.0.0-20240327125255-dbf53b6cbf06/go.mod h1:FUkZ5OHjlGPjnM2UyGJz9TypXQFgYqw6AFNO1UiROTM= github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMDtTVdcGu0B1GmmC7QJKiCCjyTAWQy0= github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= @@ -114,6 +118,8 @@ github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZ github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= +github.com/tursodatabase/go-libsql v0.0.0-20240916111504-922dfa87e1e6 h1:bFxO2fsY5mHZRrVvhmrAo/O8Agi9HDAIMmmOClZMrkQ= +github.com/tursodatabase/go-libsql v0.0.0-20240916111504-922dfa87e1e6/go.mod h1:TjsB2miB8RW2Sse8sdxzVTdeGlx74GloD5zJYUC38d8= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= diff --git a/internal/data/event_slices.go b/internal/data/event_slices.go index 2e2f0d88..881a2a92 100644 --- a/internal/data/event_slices.go +++ b/internal/data/event_slices.go @@ -13,7 +13,7 @@ import ( _ "modernc.org/sqlite" - _ "github.com/libsql/libsql-client-go/libsql" + _ "github.com/tursodatabase/go-libsql" ) const ( diff --git a/internal/data/null_rows.go b/internal/data/null_rows.go index 9129e85a..bbf5fa7a 100644 --- a/internal/data/null_rows.go +++ b/internal/data/null_rows.go @@ -5,7 +5,7 @@ import ( _ "modernc.org/sqlite" - _ "github.com/libsql/libsql-client-go/libsql" + _ "github.com/tursodatabase/go-libsql" ) type NullRows struct { diff --git a/internal/data/quality_metrics.go b/internal/data/quality_metrics.go index f666f2d6..b2eea4a7 100644 --- a/internal/data/quality_metrics.go +++ b/internal/data/quality_metrics.go @@ -7,7 +7,7 @@ import ( _ "modernc.org/sqlite" - _ "github.com/libsql/libsql-client-go/libsql" + _ "github.com/tursodatabase/go-libsql" ) type AverageMRSizeByWeek struct { diff --git a/internal/data/teams.go b/internal/data/teams.go index 355da2be..84a5a156 100644 --- a/internal/data/teams.go +++ b/internal/data/teams.go @@ -6,7 +6,7 @@ import ( _ "modernc.org/sqlite" - _ "github.com/libsql/libsql-client-go/libsql" + _ "github.com/tursodatabase/go-libsql" ) type Team struct { @@ -16,7 +16,6 @@ type Team struct { type TeamSlice []Team - func (s *Store) GetTeams() (TeamSlice, error) { db, err := sql.Open(s.DriverName, s.DbUrl) diff --git a/internal/handler/api/api.go b/internal/handler/api/api.go index c476c164..169d20b7 100644 --- a/internal/handler/api/api.go +++ b/internal/handler/api/api.go @@ -3,14 +3,19 @@ package api import ( "context" "database/sql" + "fmt" "net/http" "os" + "path/filepath" "strconv" "sync" + "time" "github.com/dxta-dev/app/internal/data" "github.com/dxta-dev/app/internal/otel" "github.com/labstack/echo/v4" + + "github.com/tursodatabase/go-libsql" ) type APIState struct { @@ -24,6 +29,39 @@ var reposDBCache sync.Map var dbPool sync.Map +func getDirPath() (string, error) { + dir := filepath.Join(os.TempDir(), "libsql-dir") + err := os.MkdirAll(dir, os.ModePerm) + + if err != nil { + return "", err + } + + return dir, nil + +} + +func getEmbeddedDB(dbUrl, org, repo string) (*libsql.Connector, error) { + dirPath, err := getDirPath() + + if err != nil { + return nil, err + } + + connector, err := libsql.NewEmbeddedReplicaConnector( + filepath.Join(dirPath, org+"_"+repo), + dbUrl, + libsql.WithAuthToken(os.Getenv("DXTA_DEV_GROUP_TOKEN")), + libsql.WithSyncInterval(time.Minute*5), + ) + if err != nil { + return nil, err + } + + return connector, nil + +} + func getDB(ctx context.Context, org, repo string) (*sql.DB, error) { cacheKey := org + "/" + repo @@ -36,13 +74,23 @@ func getDB(ctx context.Context, org, repo string) (*sql.DB, error) { return nil, err } - driverName := otel.GetDriverName() + connector, err := getEmbeddedDB(dbUrl, org, repo) - fullDbUrl := dbUrl + "?authToken=" + os.Getenv("DXTA_DEV_GROUP_TOKEN") + var db *sql.DB - db, err := sql.Open(driverName, fullDbUrl) if err != nil { - return nil, err + fmt.Println("Using normal db") + driverName := otel.GetDriverName() + + fullDbUrl := dbUrl + "?authToken=" + os.Getenv("DXTA_DEV_GROUP_TOKEN") + + db, err = sql.Open(driverName, fullDbUrl) + if err != nil { + return nil, err + } + } else { + fmt.Println("Using embedded db") + db = sql.OpenDB(connector) } if err := db.PingContext(ctx); err != nil { diff --git a/internal/handler/dashboard.go b/internal/handler/dashboard.go index 39c8abc6..3a9fb8a9 100644 --- a/internal/handler/dashboard.go +++ b/internal/handler/dashboard.go @@ -18,7 +18,7 @@ import ( "github.com/donseba/go-htmx" "github.com/labstack/echo/v4" - _ "github.com/libsql/libsql-client-go/libsql" + _ "github.com/tursodatabase/go-libsql" "github.com/wcharczuk/go-chart/v2/drawing" ) From bb08e8f8ac44ed4037b8d4946a406823710407c1 Mon Sep 17 00:00:00 2001 From: David Abram Date: Mon, 7 Oct 2024 19:37:51 +0200 Subject: [PATCH 2/2] dockerfile blues --- Dockerfile | 2 ++ admin.dockerfile | 2 ++ api.dockerfile | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index 15d2082b..c55f2b38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,8 @@ COPY --from=bun /app/public/style.css /app/public/style.css RUN go install github.com/a-h/templ/cmd/templ@v0.2.680 +ENV CGO_ENABLED=1 + RUN templ generate RUN go build \ diff --git a/admin.dockerfile b/admin.dockerfile index aebd78d0..dad2d5a4 100644 --- a/admin.dockerfile +++ b/admin.dockerfile @@ -28,6 +28,8 @@ RUN go install github.com/a-h/templ/cmd/templ@v0.2.680 RUN templ generate +ENV CGO_ENABLED=1 + RUN go build \ -ldflags="-linkmode external -extldflags -static -X 'main.BUILDTIME=$(date --iso-8601=seconds --utc)'" \ -o admin \ diff --git a/api.dockerfile b/api.dockerfile index e15b65e4..b1cef58b 100644 --- a/api.dockerfile +++ b/api.dockerfile @@ -8,6 +8,8 @@ RUN go mod download COPY . . +ENV CGO_ENABLED=1 + RUN go build \ -ldflags="-linkmode external -extldflags -static -X 'main.BUILDTIME=$(date --iso-8601=seconds --utc)'" \ -o api \