All Projects → smacker → newrelic-context

smacker / newrelic-context

Licence: MIT License
Contains different helpers to make life easier with NewRelic and Context.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to newrelic-context

growl
gorm, redis and local cache layer
Stars: ✭ 19 (-9.52%)
Mutual labels:  gorm
context
Tiny, type-safe, JavaScript-native `context` implementation
Stars: ✭ 18 (-14.29%)
Mutual labels:  context
mini-create-react-context
(A smaller) polyfill for the react context API
Stars: ✭ 34 (+61.9%)
Mutual labels:  context
eval-estree-expression
Safely evaluate JavaScript (estree) expressions, sync and async.
Stars: ✭ 22 (+4.76%)
Mutual labels:  context
ktx
简化Android开发的Kotlin库
Stars: ✭ 39 (+85.71%)
Mutual labels:  context
go-grpc-bidirectional-streaming-example
gRPC bidirectional streaming example written in golang
Stars: ✭ 83 (+295.24%)
Mutual labels:  context
newrelic-cli
Newrelic client written in Python providing both CLI and Python interfaces
Stars: ✭ 26 (+23.81%)
Mutual labels:  newrelic
react-wisteria
Managing the State with the Golden Path
Stars: ✭ 18 (-14.29%)
Mutual labels:  context
GoGonicEcommerceApi
Ecommerce Rest API application built in Go with Gin Gonic + Gorm
Stars: ✭ 81 (+285.71%)
Mutual labels:  gorm
Go-bjut
A bbs system.
Stars: ✭ 60 (+185.71%)
Mutual labels:  gorm
remote-lib
💫 Convert your JavaScript library to a remote service.
Stars: ✭ 40 (+90.48%)
Mutual labels:  context
go-12factor-example
Example the 12factor app using golang
Stars: ✭ 20 (-4.76%)
Mutual labels:  gorm
SignatureVerificationDemo
Android 使用jni校验应用签名sha1值,防止so文件逆向盗用
Stars: ✭ 111 (+428.57%)
Mutual labels:  context
gt-crud
gin+gorm+mysql+api[两步自动crud]
Stars: ✭ 15 (-28.57%)
Mutual labels:  gorm
go-cms
基于beego框架的cms系统
Stars: ✭ 127 (+504.76%)
Mutual labels:  gorm
public
util toolkit for go.golang 通用函数包
Stars: ✭ 135 (+542.86%)
Mutual labels:  gorm
react-multi-context
Manage multiple React 16 contexts with a single component.
Stars: ✭ 19 (-9.52%)
Mutual labels:  context
react-text-translator
An experimental way to translate text inside React components with context
Stars: ✭ 15 (-28.57%)
Mutual labels:  context
ctxutil
utils for Go context
Stars: ✭ 18 (-14.29%)
Mutual labels:  context
timber-ruby
🌲 Great Ruby logging made easy.
Stars: ✭ 155 (+638.1%)
Mutual labels:  context

newrelic-context

Contains different helpers to make life easier with NewRelic and Context.

Installation

go get github.com/smacker/newrelic-context

In this package:

  • ContextWithTxn - Set NewRelic transaction to context
  • GetTnxFromContext - Get NewRelic transaction from context anywhere
  • NewRelicMiddleware - Reports time in NewRelic and sets transaction in context
  • WrapHTTPClient - Wraps client transport with newrelic RoundTripper with transaction from context
  • SetTxnToGorm - Sets transaction from Context to gorm settings
  • AddGormCallbacks - Adds callbacks to NewRelic, you should call SetTxnToGorm to make them work
  • RedisWrapper - Logs gopkg.in/redis.v5 time in newrelic
  • WrapRedisClient - Returns copy of redis client with newrelic for transaction

API documentation is available on godoc.org

Examples:

Use NewRelicMiddleware:

package main

import (
    "github.com/smacker/newrelic-context"
    "log"
    "net/http"
)

func indexHandlerFunc(rw http.ResponseWriter, req *http.Request) {
    rw.Write([]byte("I'm an index page!"))
}

func main() {
    var handler http.Handler

    handler = http.HandlerFunc(indexHandlerFunc)
    nrmiddleware, err := nrcontext.NewMiddleware("test-app", "my-license-key")
    if err != nil {
        log.Print("Can't create newrelic middleware: ", err)
    } else {
        handler = nrmiddleware.Handler(handler)
    }

    http.ListenAndServe(":8000", handler)
}

Use HTTPClientWrap:

func Consume(ctx context.Context, query string) {
    client := &http.Client{Timeout: 10}
    nrcontext.WrapHTTPClient(ctx, client)
    _, err := client.Get(fmt.Sprintf("https://www.google.com.vn/?q=%v", query))
    if err != nil {
        log.Println("Can't fetch google :(")
        return
    }
    log.Println("Google fetched successfully!")
}

Use with Gorm:

var db *gorm.DB

func initDB() *gorm.DB {
    db, err := gorm.Open("sqlite3", "./foo.db")
    if err != nil {
        panic(err)
    }
    nrgorm.AddGormCallbacks(db)
    return db
}

func catalogPage(db *gorm.DB) http.Handler {
    return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
        var products []Product
        db := nrcontext.SetTxnToGorm(req.Context(), db)
        db.Find(&products)
        for i, v := range products {
            rw.Write([]byte(fmt.Sprintf("%v. %v\n", i, v.Name)))
        }
    })
}

func main() {
    db = initDB()
    defer db.Close()

    handler := catalogPage(db)
    nrmiddleware, _ := nrcontext.NewMiddleware("test-app", "my-license-key")
    handler = nrmiddleware.Handler(handler)

    http.ListenAndServe(":8000", handler)
}

Use with Redis:

func catalogPage(redisClient *redis.Client) http.Handler {
    return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
        redisClient := WrapRedisClient(req.Context(), redisClient)

        redisClient.Set("key", "value", 0)
        // ...
        redisClient.Get("other-key")
    })
}

func main() {
    client := redis.NewClient(...)

    handler := catalogPage(db)
    nrmiddleware, _ := nrcontext.NewMiddleware("test-app", "my-license-key")
    handler = nrmiddleware.Handler(handler)

    http.ListenAndServe(":8000", handler)
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].