Skip to content

Commit a7117f6

Browse files
author
Kapil Verma
committed
working go samples/http
1 parent 14e9442 commit a7117f6

8 files changed

Lines changed: 143 additions & 13 deletions

File tree

go/samples/http/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
sqlcommenter-http
2+
docker-data/

go/samples/http/docker-compose.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
version: '3.8'
2+
services:
3+
sqlcommenter_mysql_db:
4+
container_name: sqlcommenter_mysql_db
5+
image: mysql:8
6+
command:
7+
--general-log=TRUE
8+
--general-log-file=/var/lib/mysql/mysql-log.log
9+
ports:
10+
- '3306:3306'
11+
environment:
12+
MYSQL_DATABASE: 'sqlcommenter_db'
13+
MYSQL_ROOT_PASSWORD: 'password'
14+
volumes:
15+
- './docker-data/mysql:/var/lib/postgresql/data'
16+
sqlcommenter_pg_db:
17+
container_name: sqlcommenter_pg_db
18+
image: postgres:14
19+
command: postgres -c log_statement=all
20+
ports:
21+
- '5432:5432'
22+
environment:
23+
POSTGRES_USER: dev
24+
POSTGRES_PASSWORD: dev
25+
POSTGRES_DB: sqlcommenter_db
26+
volumes:
27+
- './docker-data/pg:/var/lib/postgresql/data'

go/samples/http/go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ require (
88
go.opentelemetry.io/otel/sdk v1.10.0
99
)
1010

11-
require go.opentelemetry.io/otel v1.10.0 // indirect
11+
require (
12+
github.com/lib/pq v1.10.7 // indirect
13+
go.opentelemetry.io/otel v1.10.0 // indirect
14+
)
1215

1316
require (
1417
github.com/go-logr/logr v1.2.3 // indirect

go/samples/http/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ github.com/google/sqlcommenter/go/database/sql v0.0.1-beta h1:N680pEYaRwmOSrQWUd
1414
github.com/google/sqlcommenter/go/database/sql v0.0.1-beta/go.mod h1:VdswmF4SM0cbjJdD+3GyM5QuXpHhH6F5nSzcbikzCGY=
1515
github.com/google/sqlcommenter/go/net/http v0.0.1-beta h1:7XQ6poZv+ZJwwHWQHlesq9IMsRus3G6Z9n10qAkrGqE=
1616
github.com/google/sqlcommenter/go/net/http v0.0.1-beta/go.mod h1:tVUqM1YZ/K3eRTdGzeav1GSbw+BXNdTGzSAbLW9CxAc=
17+
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
18+
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
1719
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1820
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
1921
go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4=

go/samples/http/main.go

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
package main
22

33
import (
4+
"flag"
45
"fmt"
56
"log"
67
"net/http"
78

8-
_ "github.com/go-sql-driver/mysql"
99
"github.com/google/sqlcommenter/go/core"
1010
gosql "github.com/google/sqlcommenter/go/database/sql"
1111
httpnet "github.com/google/sqlcommenter/go/net/http"
1212
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
1313
sdktrace "go.opentelemetry.io/otel/sdk/trace"
14+
15+
"sqlcommenter-http/mysqldb"
16+
"sqlcommenter-http/pgdb"
1417
)
1518

16-
func Index(w http.ResponseWriter, r *http.Request) {
19+
var db *gosql.DB
1720

18-
connection := "root:root@/gotest"
21+
func Index(w http.ResponseWriter, r *http.Request) {
1922
exp, _ := stdouttrace.New(stdouttrace.WithPrettyPrint())
2023
bsp := sdktrace.NewSimpleSpanProcessor(exp) // You should use batch span processor in prod
2124
tp := sdktrace.NewTracerProvider(
@@ -26,16 +29,24 @@ func Index(w http.ResponseWriter, r *http.Request) {
2629
ctx, span := tp.Tracer("foo").Start(r.Context(), "parent-span-name")
2730
defer span.End()
2831

29-
db, err := gosql.Open("mysql", connection, core.CommenterOptions{EnableDBDriver: true, EnableRoute: true, EnableAction: true, EnableFramework: true, EnableTraceparent: true})
32+
db.ExecContext(ctx, "Select 1")
33+
db.Exec("Select 2")
34+
35+
stmt1, err := db.Prepare("Select 3")
36+
if err != nil {
37+
log.Fatal(err)
38+
}
39+
stmt1.QueryRow()
40+
41+
stmt2, err := db.PrepareContext(ctx, "Select 4")
3042
if err != nil {
31-
fmt.Println(err)
32-
} else {
33-
db.ExecContext(ctx, "Select 11;")
34-
db.Exec("Select 2;")
35-
db.Prepare("Select 10")
36-
db.PrepareContext(ctx, "Select 10")
43+
log.Fatal(err)
3744
}
38-
fmt.Fprintf(w, "Hello World!")
45+
stmt2.QueryRow()
46+
47+
db.QueryContext(ctx, "Select 5")
48+
49+
fmt.Fprintf(w, "Hello World!\r\n")
3950
}
4051

4152
// middleware is used to intercept incoming HTTP calls and apply general functions upon them.
@@ -47,9 +58,47 @@ func middleware(next http.Handler) http.Handler {
4758
})
4859
}
4960

50-
func main() {
61+
func runForMysql() *gosql.DB {
62+
connection := "root:password@/sqlcommenter_db"
63+
db = mysqldb.ConnectMySQL(connection)
64+
65+
mux := http.NewServeMux()
66+
finalHandler := http.HandlerFunc(Index)
67+
mux.Handle("/", middleware((finalHandler)))
68+
log.Fatal(http.ListenAndServe(":8080", mux))
69+
return db
70+
return db
71+
}
72+
73+
func runForPg() *gosql.DB {
74+
connection := "postgres://dev:dev@localhost/sqlcommenter_db?sslmode=disable"
75+
db = pgdb.ConnectPG(connection)
76+
5177
mux := http.NewServeMux()
5278
finalHandler := http.HandlerFunc(Index)
5379
mux.Handle("/", middleware((finalHandler)))
5480
log.Fatal(http.ListenAndServe(":8080", mux))
81+
return db
82+
}
83+
84+
func main() {
85+
var engine string
86+
87+
flag.StringVar(&engine, "db_engine", "mysql", "db-engine to run the sample on")
88+
flag.Parse()
89+
90+
if engine != "mysql" && engine != "pg" {
91+
log.Fatalf("invalid engine: %s", engine)
92+
}
93+
94+
var db *gosql.DB
95+
96+
switch engine {
97+
case "mysql":
98+
db = runForMysql()
99+
case "pg":
100+
db = runForPg()
101+
}
102+
103+
db.Close()
55104
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package mysqldb
2+
3+
import (
4+
"log"
5+
6+
_ "github.com/go-sql-driver/mysql"
7+
"github.com/google/sqlcommenter/go/core"
8+
gosql "github.com/google/sqlcommenter/go/database/sql"
9+
)
10+
11+
func ConnectMySQL(connection string) *gosql.DB {
12+
db, err := gosql.Open("mysql", connection, core.CommenterOptions{EnableDBDriver: true, EnableRoute: true, EnableAction: true, EnableFramework: true, EnableTraceparent: true})
13+
if err != nil {
14+
log.Fatal(err)
15+
}
16+
17+
err = db.Ping()
18+
if err != nil {
19+
log.Fatal(err)
20+
}
21+
22+
return db
23+
}

go/samples/http/pgdb/pg_driver.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package pgdb
2+
3+
import (
4+
"log"
5+
6+
"github.com/google/sqlcommenter/go/core"
7+
gosql "github.com/google/sqlcommenter/go/database/sql"
8+
_ "github.com/lib/pq"
9+
)
10+
11+
func ConnectPG(connection string) *gosql.DB {
12+
db, err := gosql.Open("postgres", connection, core.CommenterOptions{EnableDBDriver: true, EnableRoute: true, EnableAction: true, EnableFramework: true, EnableTraceparent: true})
13+
if err != nil {
14+
log.Fatal(err)
15+
}
16+
17+
err = db.Ping()
18+
if err != nil {
19+
log.Fatal(err)
20+
}
21+
22+
return db
23+
}

go/samples/http/tail_mysql_log.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
docker exec -it sqlcommenter_mysql_db tail -f /var/lib/mysql/mysql-log.log

0 commit comments

Comments
 (0)