diff --git a/package.json b/package.json index f218e71996d..66f5983df2f 100644 --- a/package.json +++ b/package.json @@ -515,6 +515,12 @@ "hash": "QmWFAMPqsEyUX7gDUsRVmMWz59FxSpJ1b2v6bJ1yYzo7jY", "name": "go-base58-fast", "version": "0.1.1" + }, + { + "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..fb562813862 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,42 @@ 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(format.DefaultBlockDecoder) + if err != nil { + return err } err := ipldpl.RegisterBlockDecoders(ipld.DefaultBlockDecoder) if err != nil { return err } + return pl.RegisterInputEncParsers(coredag.DefaultInputEncParsers) +} - return ipldpl.RegisterInputEncParsers(coredag.DefaultInputEncParsers) +func runTracerPlugin(pl plugin.PluginTracer) error { + tracer, err := pl.InitTracer() + if err != nil { + return err + } + 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) +}