{"id":24953118,"url":"https://github.com/openzipkin-contrib/zipkin-go-sql","last_synced_at":"2025-04-10T15:14:12.641Z","repository":{"id":38195117,"uuid":"152381882","full_name":"openzipkin-contrib/zipkin-go-sql","owner":"openzipkin-contrib","description":"SQL Wrapper for golang database/sql","archived":false,"fork":false,"pushed_at":"2023-08-24T04:40:06.000Z","size":54,"stargazers_count":12,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T13:11:20.112Z","etag":null,"topics":["distributed-tracing","driver","golang","instrumentation","sql","sql-wrapper","zipkin","zipkin-instrumentation"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openzipkin-contrib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-10T07:35:03.000Z","updated_at":"2024-03-21T17:31:43.000Z","dependencies_parsed_at":"2024-06-19T12:22:39.555Z","dependency_job_id":null,"html_url":"https://github.com/openzipkin-contrib/zipkin-go-sql","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzipkin-contrib%2Fzipkin-go-sql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzipkin-contrib%2Fzipkin-go-sql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzipkin-contrib%2Fzipkin-go-sql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzipkin-contrib%2Fzipkin-go-sql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openzipkin-contrib","download_url":"https://codeload.github.com/openzipkin-contrib/zipkin-go-sql/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248243217,"owners_count":21071054,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["distributed-tracing","driver","golang","instrumentation","sql","sql-wrapper","zipkin","zipkin-instrumentation"],"created_at":"2025-02-03T03:28:44.136Z","updated_at":"2025-04-10T15:14:12.612Z","avatar_url":"https://github.com/openzipkin-contrib.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zipkin instrumentation SQL\n\n[![Build Status](https://travis-ci.org/openzipkin-contrib/zipkin-go-sql.svg?branch=master)](https://travis-ci.org/openzipkin-contrib/zipkin-go-sql)\n[![Go Report Card](https://goreportcard.com/badge/github.com/openzipkin-contrib/zipkin-go-sql)](https://goreportcard.com/report/github.com/openzipkin-contrib/zipkin-go-sql)\n[![GoDoc](https://godoc.org/github.com/openzipkin-contrib/zipkin-go-sql?status.svg)](https://godoc.org/github.com/openzipkin-contrib/zipkin-go-sql)\n\nA SQL wrapper including Zipkin instrumentation\n\n## Usage\n\n```go\nimport (\n    _ \"github.com/go-sql-driver/mysql\"\n    zipkinsql \"github.com/openzipkin-contrib/zipkin-go-sql\"\n    zipkin \"github.com/openzipkin/zipkin-go\"\n)\n\nvar (\n    driverName string\n    err        error\n    db         *sql.DB\n    tracer     *zipkin.Tracer\n)\n\n// Register our zipkinsql wrapper for the provided MySQL driver.\ndriverName, err = zipkinsql.Register(\"mysql\", tracer, zipkinsql.WithAllTraceOptions())\nif err != nil {\n    log.Fatalf(\"unable to register zipkin driver: %v\\n\", err)\n}\n\n// Connect to a MySQL database using the zipkinsql driver wrapper.\ndb, err = sql.Open(driverName, \"mysql://user:pass@127.0.0.1:3306/db\")\n```\n\nYou can also wrap your own driver with zipkin instrumentation as follows:\n\n```go\n\nimport (\n    mysql \"github.com/go-sql-driver/mysql\"\n    zipkinsql \"github.com/openzipkin-contrib/zipkin-go-sql\"\n    zipkinmodel \"github.com/openzipkin/zipkin-go/model\"\n)\n\nvar (\n    driver driver.Driver\n    err    error\n    db     *sql.DB\n    tracer *zipkin.Tracer\n)\n\n// Explicitly wrap the MySQL driver with zipkinsql\ndriver = zipkinsql.Wrap(\n    \u0026mysql.MySQLDriver{},\n    tracer,\n    zipkinsql.WithRemoteEndpoint(zipkinmodel.Endpoint{\n        ServiceName: \"resultsdb\",\n        Port: 5432\n    }),\n)\n\n// Register our zipkinsql wrapper as a database driver\nsql.Register(\"zipkinsql-mysql\", driver)\n\n// Connect to a MySQL database using the zipkinsql driver wrapper\ndb, err = sql.Open(\"zipkinsql-mysql\", \"mysql://user:pass@127.0.0.1:3306/db\")\n```\n\nProjects providing their own abstractions on top of database/sql/driver can also wrap an existing driver.Conn interface directly with zipkinsql.\n\n```go\nimport zipkinsql \"github.com/openzipkin-contrib/zipkin-go-sql\"\n\nfunc initializeConn(...) driver.Conn {\n    // create custom driver.Conn\n    conn := Connect(...)\n\n    // wrap with zipkinsql\n    return zipkinsql.WrapConn(conn, tracer, zipkinsql.WithAllTraceOptions())\n}\n```\n\nGo 1.10+ provides a new driver.Connector interface that can be\nwrapped  directly by zipkinsql without the need for zipkinsql to\nregister a driver.Driver.\n\nExample:\n\n```go\nimport(\n    zipkinsql \"github.com/openzipkin-contrib/zipkin-go-sql\"\n    \"github.com/lib/pq\"\n)\nvar (\n    connector driver.Connector\n    err       error\n    db        *sql.DB\n    tracer *zipkin.Tracer\n)\n\nconnector, err = pq.NewConnector(\"postgres://user:pass@host:5432/db\")\nif err != nil {\n    log.Fatalf(\"unable to create postgres connector: %v\\n\", err)\n}\n// Wrap the driver.Connector with zipkinsql.\nconnector = zipkinsql.WrapConnector(connector, tracer, zipkinsql.WithAllTraceOptions())\n// Use the wrapped driver.Connector.\ndb = sql.OpenDB(connector)\n```\n\n## Using jmoiron/sqlx\n\nIf using the `sqlx` library with named queries you will need to use the\n`sqlx.NewDb` function to wrap an existing `*sql.DB` connection. `sqlx.Open` and `sqlx.Connect` methods won't work.\n\nFirst create a `*sql.DB` connection and then create a `*sqlx.DB` connection by wrapping the former and **keeping the same driver name** e.g.:\n\n```go\ndriverName, err := zipkinsql.Register(\"postgres\", zipkinsql.WithAllTraceOptions())\nif err != nil { ... }\n\ndb, err := sql.Open(driverName, \"postgres://localhost:5432/my_database\")\nif err != nil { ... }\n\n// Keep the driver name!\ndbx := sqlx.NewDb(db, \"postgres\")\n```\n\n## Usage of *Context methods\n\nInstrumentation is possible if the context is being passed downstream in methods.\nThis is not only for instrumentation purposes but also a [good practice](https://medium.com/@cep21/how-to-correctly-use-context-context-in-go-1-7-8f2c0fafdf39) in go programming. `database/sql` package exposes already a set of methods that receive the context as first paramenter:\n\n- `*DB.Begin` -\u003e `*DB.BeginTx`\n- `*DB.Exec` -\u003e `*DB.ExecContext`\n- `*DB.Ping` -\u003e `*DB.PingContext`\n- `*DB.Prepare` -\u003e `*DB.PrepareContext`\n- `*DB.Query` -\u003e `*DB.QueryContext`\n- `*DB.QueryRow` -\u003e `*DB.QueryRowContext`\n- `*Stmt.Exec` -\u003e `*Stmt.ExecContext`\n- `*Stmt.Query` -\u003e `*Stmt.QueryContext`\n- `*Stmt.QueryRow` -\u003e `*Stmt.QueryRowContext`\n- `*Tx.Exec` -\u003e `*Tx.ExecContext`\n- `*Tx.Prepare` -\u003e `*Tx.PrepareContext`\n- `*Tx.Query` -\u003e `*Tx.QueryContext`\n- `*Tx.QueryRow` -\u003e `*Tx.QueryRowContext`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenzipkin-contrib%2Fzipkin-go-sql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenzipkin-contrib%2Fzipkin-go-sql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenzipkin-contrib%2Fzipkin-go-sql/lists"}