sqltrace: SQL 추적 기능을 제공하는 로우 코드 침입 라이브러리

21539 단어 mysqlsqlgo

sqltrace



모든 관계형 데이터베이스(Sqlite3, MySQL, Oracle, SQL Server, PostgreSQL, TiDB 등)에 적합한 SQL 추적 기능과 다양한 관계형 데이터베이스(gorm, xorm, sqlx 등)용 ORM 라이브러리를 제공하는 로우 코드 침입 라이브러리 )


천취안 / sqltrace


모든 관계형 데이터베이스(Sqlite3, MySQL, Oracle, SQL Server, PostgreSQL, TiDB 등)에 적합한 SQL 추적 기능과 다양한 관계형 데이터베이스(gorm, xorm, sqlx 등)용 ORM 라이브러리를 제공하는 로우 코드 침입 라이브러리 )





sqltrace


모든 관계형 데이터베이스(Sqlite3, MySQL, Oracle, SQL Server
PostgreSQL, TiDB 등) 및 다양한 관계형 데이터베이스(gorm, xorm, sqlx 등)를 위한 ORM 라이브러리

😜설치


go get -u github.com/chenquan/sqltrace

👏사용방법

토종의

package main
import (
    "context"
    "database/sql"
    "fmt"

    "github.com/chenquan/sqltrace"
    "github.com/mattn/go-sqlite3"
    _ "github.com/mattn/go-sqlite3"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/trace"
)

func main() {
    // Create a sqlite3 driver with link tracking
    driver := sqltrace.NewDriver(sqltrace.Config{
        Name:           "sqlite3_trace",
        DataSourceName: "sqlite3",
        Endpoint:       "http://localhost:14268/api/traces",
        Sampler:        1,
        Batcher:        "jaeger",
    }, &sqlite3.SQLiteDriver{})
    defer sqltrace.StopAgent()

    // register new driver
    sql.Register("sqlite3_trace", driver)

    // open database
    db, err := sql.Open("sqlite3_trace", "identifier.sqlite")
    if err != nil {
        panic(err)
    }

    tracer := otel.

😜설치

go get -u github.com/chenquan/sqltrace


👏사용방법



토종의




package main

import (
    "context"
    "database/sql"
    "fmt"

    "github.com/chenquan/sqltrace"
    "github.com/mattn/go-sqlite3"
    _ "github.com/mattn/go-sqlite3"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/trace"
)

func main() {
    // Create a sqlite3 driver with link tracking
    driver := sqltrace.NewDriver(sqltrace.Config{
        Name:           "sqlite3_trace",
        DataSourceName: "sqlite3",
        Endpoint:       "http://localhost:14268/api/traces",
        Sampler:        1,
        Batcher:        "jaeger",
    }, &sqlite3.SQLiteDriver{})
    defer sqltrace.StopAgent()

    // register new driver
    sql.Register("sqlite3_trace", driver)

    // open database
    db, err := sql.Open("sqlite3_trace", "identifier.sqlite")
    if err != nil {
        panic(err)
    }

    tracer := otel.GetTracerProvider().Tracer("sqlite3_trace")
    ctx, span := tracer.Start(context.Background(),
        "test",
        trace.WithSpanKind(trace.SpanKindClient),
    )
    defer span.End()

    db.ExecContext(ctx, `CREATE TABLE t
(
    age  integer,
    name TEXT
)`)
    db.ExecContext(ctx, "insert into t values (?,?)", 1, "chenquan")

    // transaction
    tx, err := db.BeginTx(ctx, nil)
    stmt, err := tx.PrepareContext(ctx, "select age+1 as age,name from t where age = ?;")
    stmt.QueryContext(ctx, 1)
    tx.Commit()

    rows, err := db.QueryContext(ctx, "select  age+1 as age,name from t;")
    for rows.Next() {
        var age int
        var name string
        err := rows.Scan(&age, &name)
        if err != nil {
            fmt.Println(err)
        }

        fmt.Println(age, name)
    }
}







package main

import (
    "context"
    "database/sql"
    "fmt"

    "github.com/chenquan/sqltrace"
    "github.com/mattn/go-sqlite3"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/trace"
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

func main() {
    // Create a sqlite3 driver with link tracking
    driver := sqltrace.NewDriver(sqltrace.Config{
        Name:           "sqlite3_trace",
        DataSourceName: "sqlite3",
        Endpoint:       "http://localhost:14268/api/traces",
        Sampler:        1,
        Batcher:        "jaeger",
    }, &sqlite3.SQLiteDriver{})
    defer sqltrace.StopAgent()

    // register new driver
    sql.Register("sqlite3_trace", driver)

    db, err := gorm.Open(sqlite.Dialector{
        DriverName: "sqlite3_trace",
        DSN:        "identifier.sqlite",
    }, &gorm.Config{})
    if err != nil {
        panic(err)
    }
    tracer := otel.GetTracerProvider().Tracer("sqlite3_trace")
    ctx, span := tracer.Start(context.Background(),
        "test",
        trace.WithSpanKind(trace.SpanKindClient),
    )
    defer span.End()

    type T struct {
        Age  int    `db:"age"`
        Name string `db:"name"`
    }
    db = db.WithContext(ctx)
    db.Migrator().AutoMigrate(&T{})
    db.Create(&T{
        Age:  1,
        Name: "chenquan",
    })

    rows, err := db.Raw("select  age+1 as age,name from ts;").Rows()
    if err != nil {
        panic(err)
    }

    for rows.Next() {
        var age int
        var name string
        err := rows.Scan(&age, &name)
        if err != nil {
            fmt.Println(err)
        }

        fmt.Println(age, name)
    }
    db.Commit()
}






⭐스타



솔루션을 배우거나 시작하기 위해 이 프로젝트를 좋아하거나 사용하고 있다면 별⭐을 주세요. 감사!

좋은 웹페이지 즐겨찾기