diff --git a/src/modules/monapi/plugins/all/dlopen.go b/src/modules/monapi/plugins/all/dlopen.go new file mode 100644 index 00000000..4f056c52 --- /dev/null +++ b/src/modules/monapi/plugins/all/dlopen.go @@ -0,0 +1,57 @@ +package all + +import ( + "fmt" + "os" + "path/filepath" + "plugin" + "strings" +) + +const pluginDir = "plugins" + +func init() { + plugins, err := listPlugins(pluginDir) + if err != nil { + fmt.Printf("list plugins: \n", err) + return + } + + for _, file := range plugins { + _, err := plugin.Open(file) + if err != nil { + fmt.Printf("plugin.Open %s err %s\n", file, err) + continue + } + } +} + +func listPlugins(dir string) ([]string, error) { + df, err := os.Open(dir) + if err != nil { + return nil, fmt.Errorf("failed opening directory: %s", err) + } + defer df.Close() + + list, err := df.Readdirnames(0) // 0 to read all files and folders + if err != nil { + return nil, fmt.Errorf("read dir names: %s", err) + } + + var plugins []string + for _, name := range list { + if !strings.HasSuffix(name, ".so") { + continue + } + + file := filepath.Join(dir, name) + if fi, err := os.Stat(file); err != nil { + continue + } else if fi.IsDir() { + continue + } + plugins = append(plugins, file) + } + + return plugins, nil +} diff --git a/src/modules/monapi/plugins/demo/lib/Makefile b/src/modules/monapi/plugins/demo/lib/Makefile new file mode 100644 index 00000000..067a0e3e --- /dev/null +++ b/src/modules/monapi/plugins/demo/lib/Makefile @@ -0,0 +1,4 @@ +all: lib.so + +lib.so: lib.go + go build -buildmode=plugin -o $@ diff --git a/src/modules/monapi/plugins/demo/lib/lib.go b/src/modules/monapi/plugins/demo/lib/lib.go new file mode 100644 index 00000000..fe57764f --- /dev/null +++ b/src/modules/monapi/plugins/demo/lib/lib.go @@ -0,0 +1,5 @@ +package main + +import ( + _ "github.com/didi/nightingale/src/modules/monapi/plugins/demo" +) diff --git a/src/modules/prober/prober.go b/src/modules/prober/prober.go index ecf16c42..da581336 100644 --- a/src/modules/prober/prober.go +++ b/src/modules/prober/prober.go @@ -19,6 +19,7 @@ import ( "github.com/didi/nightingale/src/modules/prober/http" "github.com/didi/nightingale/src/modules/prober/manager" + "github.com/didi/nightingale/src/modules/monapi/collector" _ "github.com/didi/nightingale/src/modules/monapi/plugins/all" _ "github.com/go-sql-driver/mysql" @@ -78,6 +79,8 @@ func main() { manager.NewManager(cfg, cache.CollectRule).Start(ctx) + pluginInfo() + http.Start() ending(cancel) @@ -132,3 +135,10 @@ func ending(cancel context.CancelFunc) { http.Shutdown() fmt.Printf("%s stopped successfully\n", os.Args[0]) } + +func pluginInfo() { + fmt.Println("remote collector") + for k, v := range collector.GetRemoteCollectors() { + fmt.Printf(" %d %s\n", k, v) + } +}