otelgorm

package module
v0.0.0-...-a44d862 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2022 License: Apache-2.0 Imports: 10 Imported by: 0

README

gorm-opentelemetry

Test Status

OpenTelemetry plugin for GORM v2

Traces all queries along with the query SQL.

Usage Example:

// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package main

import (
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"github.com/kostyay/gorm-opentelemetry"
)

type Product struct {
	gorm.Model
	Code  string
	Price uint
}

func ExampleNewPlugin() {
	// Initialize db connection
	db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	// Initialize otel plugin with options
	plugin := otelgorm.NewPlugin(
	// include any options here
	)
	err = db.Use(plugin)
	if err != nil {
		panic("failed configuring plugin")
	}

	// Migrate the schema
	err = db.AutoMigrate(&Product{})
	if err != nil {
		panic(err.Error())
	}

	// Create
	db.Create(&Product{Code: "D42", Price: 100})

	// Read
	var product Product
	db.First(&product, 1)                 // find product with integer primary key
	db.First(&product, "code = ?", "D42") // find product with code D42
}


Documentation

Overview

Package otelgin instruments the github.com/gin-gonic/gin package.

Currently there are two ways the code can be instrumented. One is instrumenting the routing of a received message (the Middleware function) and instrumenting the response generation through template evaluation (the HTML function).

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func WithOmitVariablesFromTrace

func WithOmitVariablesFromTrace(ctx context.Context) context.Context

Types

type Option

type Option interface {
	// contains filtered or unexported methods
}

Option is used to configure the client.

func WithAlwaysOmitVariables

func WithAlwaysOmitVariables() Option

WithAlwaysOmitVariables makes the plugin always omit variable values from traces.

func WithDBName

func WithDBName(name string) Option

WithDBName specified the database name to be used in span names since its not possible to extract this information from gorm

func WithTracerProvider

func WithTracerProvider(provider oteltrace.TracerProvider) Option

WithTracerProvider specifies a tracer provider to use for creating a tracer. If none is specified, the global provider is used.

type OtelPlugin

type OtelPlugin struct {
	// contains filtered or unexported fields
}

func NewPlugin

func NewPlugin(opts ...Option) *OtelPlugin

NewPlugin initialize a new gorm.DB plugin that traces queries You may pass optional Options to the function

Example
package main

import (
	"context"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

type Product struct {
	gorm.Model
	Code  string
	Price uint
}

func main() {
	// Initialize db connection
	db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	// Initialize otel plugin with options
	plugin := NewPlugin(
	// include any options here
	)
	err = db.Use(plugin)
	if err != nil {
		panic("failed configuring plugin")
	}

	// Migrate the schema
	err = db.AutoMigrate(&Product{})
	if err != nil {
		panic(err.Error())
	}

	// Create
	db.Create(&Product{Code: "D42", Price: 100})

	// Read
	var product Product
	db.First(&product, 1)                 // find product with integer primary key
	db.First(&product, "code = ?", "D42") // find product with code D42

	db.WithContext(WithOmitVariablesFromTrace(context.Background())).First(&product, "code = ?", "foo")
}
Output:

func (*OtelPlugin) Initialize

func (op *OtelPlugin) Initialize(db *gorm.DB) error

func (*OtelPlugin) Name

func (op *OtelPlugin) Name() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL