Add tracer plugin support
define interface for creating tracers for use with opentracing-api License: MIT Signed-off-by: ForrestWeston <forrest@protocol.ai>
ForrestWeston committed
Dec 19, 2017 at 10:47 UTC
46722af9583a9ede8ce9c4b5c83612b9f72c08f8
3 files changed
+41
-10
package.json
+6
@@ -581,6 +581,12 @@
581
"hash": "QmQine7gvHncNevKtG9QXxf3nXcwSj6aDDmMm52mHofEEp",
582
"name": "tar-utils",
583
"version": "0.0.3"
584
+ },
585
+ {
586
+ "author": "frist",
587
+ "hash": "QmWLWmRVSiagqP15jczsGME1qpob6HDbtbHAY2he9W5iUo",
588
+ "name": "opentracing-go",
589
+ "version": "0.0.3"
590
}
591
],
592
"gxVersion": "0.10.0",
plugin/loader/initializer.go
+24
-10
@@ -3,6 +3,7 @@ package loader
3
import (
4
"github.com/ipfs/go-ipfs/core/coredag"
5
"github.com/ipfs/go-ipfs/plugin"
6
+ "gx/ipfs/QmWLWmRVSiagqP15jczsGME1qpob6HDbtbHAY2he9W5iUo/opentracing-go"
7
8
ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format"
9
)
@@ -20,24 +21,37 @@ func initialize(plugins []plugin.Plugin) error {
21
22
func run(plugins []plugin.Plugin) error {
23
for _, pl := range plugins {
23
- err := runIPLDPlugin(pl)
24
- if err != nil {
25
- return err
24
+ switch pl := pl.(type) {
25
+ case plugin.PluginIPLD:
26
+ err := runIPLDPlugin(pl)
27
+ if err != nil {
28
+ return err
29
+ }
30
+ case plugin.PluginTracer:
31
+ err := runTracerPlugin(pl)
32
+ if err != nil {
33
+ return err
34
+ }
35
+ default:
36
+ panic(pl)
37
}
38
}
39
return nil
40
}
41
31
-func runIPLDPlugin(pl plugin.Plugin) error {
32
- ipldpl, ok := pl.(plugin.PluginIPLD)
33
- if !ok {
34
- return nil
42
+func runIPLDPlugin(pl plugin.PluginIPLD) error {
43
+ err := pl.RegisterBlockDecoders(ipld.DefaultBlockDecoder)
44
+ if err != nil {
45
+ return err
46
}
47
+ return pl.RegisterInputEncParsers(coredag.DefaultInputEncParsers)
48
+}
49
37
- err := ipldpl.RegisterBlockDecoders(ipld.DefaultBlockDecoder)
50
+func runTracerPlugin(pl plugin.PluginTracer) error {
51
+ tracer, err := pl.InitTracer()
52
if err != nil {
53
return err
54
}
41
-
42
- return ipldpl.RegisterInputEncParsers(coredag.DefaultInputEncParsers)
55
+ opentracing.SetGlobalTracer(tracer)
56
+ return nil
57
}
plugin/tracer.go
new
+11
@@ -0,0 +1,11 @@
1
+package plugin
2
+
3
+import (
4
+ "gx/ipfs/QmWLWmRVSiagqP15jczsGME1qpob6HDbtbHAY2he9W5iUo/opentracing-go"
5
+)
6
+
7
+// PluginTracer is an interface that can be implemented to add a tracer
8
+type PluginTracer interface {
9
+ Plugin
10
+ InitTracer() (opentracing.Tracer, error)
11
+}