go vendor

This commit is contained in:
lealife
2017-11-30 19:55:33 +08:00
parent 2856da6888
commit 0fb92efbf3
670 changed files with 199010 additions and 0 deletions

View File

@ -0,0 +1,15 @@
# NewRelic
This module is the for [NewRelic](http://newrelic.com) it wraps the Go
http server and inserts a filter to track each requests.
###App.conf
- **server.engine** You must set this to `newrelic` in order to use this server engine
- **server.newrelic.license** The license key for NewRelic
- **server.newrelic.addfilter** Defauls `true` When true a filter is inserted
into `revel.Filters` at position 2. This filter logs every request.
###Other Notes
There is a controller called RelicController which contains a single method
to return a `newrelic.Application` object. If you want to access this object
you can extend that class.

View File

@ -0,0 +1,18 @@
package controllers
import (
"github.com/newrelic/go-agent"
"github.com/revel/modules/server-engine/newrelic"
"github.com/revel/revel"
)
type RelicController struct {
*revel.Controller
}
func (r *RelicController) GetRelicApplication() newrelic.Application {
if app, ok := revel.CurrentEngine.(*revelnewrelic.ServerNewRelic); ok {
return app.NewRelicApp
}
return nil
}

View File

@ -0,0 +1,3 @@
package revelnewrelic
// Required for vendoring see golang.org/issue/13832

View File

@ -0,0 +1,92 @@
package revelnewrelic
import (
"github.com/newrelic/go-agent"
"github.com/revel/revel"
)
type ServerNewRelic struct {
NewRelicConfig *newrelic.Config
NewRelicApp newrelic.Application
revel.GoHttpServer
}
var (
serverLog = revel.AppLog
)
func init() {
revel.RegisterServerEngine("newrelic", func() revel.ServerEngine {
nr := &ServerNewRelic{
GoHttpServer: revel.GoHttpServer{},
}
config := newrelic.NewConfig("Unknown Application", " Unknown Key ")
nr.NewRelicConfig = &config
return nr
})
revel.RegisterModuleInit(func(m *revel.Module) {
serverLog = m.Log
})
}
func (g *ServerNewRelic) Init(init *revel.EngineInit) {
g.GoHttpServer.Init(init)
}
func (nr *ServerNewRelic) Event(event int, args interface{}) {
switch event {
case revel.ENGINE_BEFORE_INITIALIZED:
nr.NewRelicConfig.AppName = revel.Config.StringDefault("app.name", "Uknown App")
license := revel.Config.StringDefault("server.newrelic.license", "")
if license != "" {
nr.NewRelicConfig.License = license
serverLog.Debug("Assigned NewRelic license")
} else {
serverLog.Error("Newrelic license key not assigned, configuration missing 'server.newrelic.license'")
}
addfilter := revel.Config.BoolDefault("server.newrelic.addfilter", true)
if addfilter {
// Inject filter after the router (Normally position 2)
revel.Filters = append(revel.Filters, NewRelicFilter)
copy(revel.Filters[3:], revel.Filters[2:])
revel.Filters[2] = NewRelicFilter
serverLog.Debug("Newrelic filter injected")
}
case revel.ENGINE_STARTED:
// Check to see if configuration is set
// create the application interface
app, err := newrelic.NewApplication(*nr.NewRelicConfig)
if err != nil {
serverLog.Panic("Failed to start NewRelic:", "error", err)
}
nr.NewRelicApp = app
}
nr.GoHttpServer.Event(event, args)
}
func (nr *ServerNewRelic) Name() string {
return "newrelic"
}
func (nr *ServerNewRelic) Engine() interface{} {
return nr
}
// This is a simplistic example of setting up a filter to record all events for the
// webserver as transactions
func NewRelicFilter(c *revel.Controller, fc []revel.Filter) {
if nr, ok := revel.CurrentEngine.Engine().(*ServerNewRelic); ok {
if nr.NewRelicApp != nil {
txn := nr.NewRelicApp.StartTransaction(c.Action,
c.Response.Out.Server.(*revel.GoResponse).Original,
c.Request.In.(*revel.GoRequest).Original)
defer txn.End()
} else {
serverLog.Error("Newrelic application not initialized before filter called")
}
}
fc[0](c, fc[1:])
}