diff --git a/package.json b/package.json index a218f81de36..761b67574ab 100644 --- a/package.json +++ b/package.json @@ -581,6 +581,12 @@ "hash": "QmQine7gvHncNevKtG9QXxf3nXcwSj6aDDmMm52mHofEEp", "name": "tar-utils", "version": "0.0.3" + }, + { + "author": "frist", + "hash": "QmWLWmRVSiagqP15jczsGME1qpob6HDbtbHAY2he9W5iUo", + "name": "opentracing-go", + "version": "0.0.3" } ], "gxVersion": "0.10.0", diff --git a/plugin/loader/initializer.go b/plugin/loader/initializer.go index c25e13f6c84..8c87453a887 100644 --- a/plugin/loader/initializer.go +++ b/plugin/loader/initializer.go @@ -3,6 +3,7 @@ package loader import ( "github.com/ipfs/go-ipfs/core/coredag" "github.com/ipfs/go-ipfs/plugin" + "gx/ipfs/QmWLWmRVSiagqP15jczsGME1qpob6HDbtbHAY2he9W5iUo/opentracing-go" ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format" ) @@ -20,24 +21,37 @@ func initialize(plugins []plugin.Plugin) error { func run(plugins []plugin.Plugin) error { for _, pl := range plugins { - err := runIPLDPlugin(pl) - if err != nil { - return err + switch pl := pl.(type) { + case plugin.PluginIPLD: + err := runIPLDPlugin(pl) + if err != nil { + return err + } + case plugin.PluginTracer: + err := runTracerPlugin(pl) + if err != nil { + return err + } + default: + panic(pl) } } return nil } -func runIPLDPlugin(pl plugin.Plugin) error { - ipldpl, ok := pl.(plugin.PluginIPLD) - if !ok { - return nil +func runIPLDPlugin(pl plugin.PluginIPLD) error { + err := pl.RegisterBlockDecoders(ipld.DefaultBlockDecoder) + if err != nil { + return err } + return pl.RegisterInputEncParsers(coredag.DefaultInputEncParsers) +} - err := ipldpl.RegisterBlockDecoders(ipld.DefaultBlockDecoder) +func runTracerPlugin(pl plugin.PluginTracer) error { + tracer, err := pl.InitTracer() if err != nil { return err } - - return ipldpl.RegisterInputEncParsers(coredag.DefaultInputEncParsers) + opentracing.SetGlobalTracer(tracer) + return nil } diff --git a/plugin/tracer.go b/plugin/tracer.go new file mode 100644 index 00000000000..ec940f35f5f --- /dev/null +++ b/plugin/tracer.go @@ -0,0 +1,11 @@ +package plugin + +import ( + "gx/ipfs/QmWLWmRVSiagqP15jczsGME1qpob6HDbtbHAY2he9W5iUo/opentracing-go" +) + +// PluginTracer is an interface that can be implemented to add a tracer +type PluginTracer interface { + Plugin + InitTracer() (opentracing.Tracer, error) +}