提交 45fe14b4 编写于 作者: 7 710leo

get plugin collect from monapi

上级 0d496f71
......@@ -12,16 +12,18 @@ import (
type Collect struct {
sync.RWMutex
Ports map[int]*PortCollect `json:"ports"`
Procs map[string]*ProcCollect `json:"procs"`
Logs map[string]*LogCollect `json:"logs"`
Ports map[int]*PortCollect `json:"ports"`
Procs map[string]*ProcCollect `json:"procs"`
Logs map[string]*LogCollect `json:"logs"`
Plugins map[string]*PluginCollect `json:"plugins"`
}
func NewCollect() *Collect {
return &Collect{
Ports: make(map[int]*PortCollect),
Procs: make(map[string]*ProcCollect),
Logs: make(map[string]*LogCollect),
Ports: make(map[int]*PortCollect),
Procs: make(map[string]*ProcCollect),
Logs: make(map[string]*LogCollect),
Plugins: make(map[string]*PluginCollect),
}
}
......@@ -45,6 +47,12 @@ func (c *Collect) Update(cc *Collect) {
for k, v := range cc.Logs {
c.Logs[k] = v
}
//更新plugin采集配置
c.Plugins = make(map[string]*PluginCollect)
for k, v := range cc.Plugins {
c.Plugins[k] = v
}
}
func (c *Collect) GetPorts() map[int]*PortCollect {
......@@ -80,6 +88,17 @@ func (c *Collect) GetLogConfig() map[string]*LogCollect {
return tmp
}
func (c *Collect) GetPlugin() map[string]*PluginCollect {
c.RLock()
defer c.RUnlock()
tmp := make(map[string]*PluginCollect)
for k, v := range c.Plugins {
tmp[k] = v
}
return tmp
}
type PortCollect struct {
Id int64 `json:"id"`
Nid int64 `json:"nid"`
......@@ -114,6 +133,21 @@ type ProcCollect struct {
CollectMethod string `json:"collect_method"`
}
type PluginCollect struct {
Id int64 `json:"id"`
Nid int64 `json:"nid"`
CollectType string `json:"collect_type"`
Name string `json:"name"`
Step int `json:"step"`
FilePath string `json:"file_path"`
Params string `json:"params"`
Comment string `json:"comment"`
Creator string `json:"creator"`
Created time.Time `xorm:"updated" json:"created"`
LastUpdator string `xorm:"last_updator" json:"last_updator"`
LastUpdated time.Time `xorm:"updated" json:"last_updated"`
}
type LogCollect struct {
Id int64 `json:"id"`
Nid int64 `json:"nid"`
......
......@@ -8,6 +8,7 @@ type SysSection struct {
IgnoreMetricsMap map[string]struct{} `yaml:"-"`
NtpServers []string `yaml:"ntpServers"`
Plugin string `yaml:"plugin"`
PluginRemote bool `yaml:"pluginRemote"`
Interval int `yaml:"interval"`
Timeout int `yaml:"timeout"`
}
......
......@@ -2,8 +2,6 @@ package plugins
import (
"time"
"github.com/didi/nightingale/src/modules/collector/sys"
)
func Detect() {
......@@ -19,7 +17,7 @@ func loopDetect() {
}
func detect() {
ps := ListPlugins(sys.Config.Plugin)
ps := ListPlugins()
DelNoUsePlugins(ps)
AddNewPlugins(ps)
}
......@@ -2,6 +2,7 @@ package plugins
type Plugin struct {
FilePath string
Params string
MTime int64
Cycle int
}
......
......@@ -2,16 +2,57 @@ package plugins
import (
"io/ioutil"
"os"
"path/filepath"
"strconv"
"strings"
"github.com/didi/nightingale/src/modules/collector/stra"
"github.com/didi/nightingale/src/modules/collector/sys"
"github.com/toolkits/pkg/file"
"github.com/toolkits/pkg/logger"
)
// key: 60_ntp.py
func ListPlugins(dir string) map[string]*Plugin {
func ListPlugins() map[string]*Plugin {
plugins := make(map[string]*Plugin)
if sys.Config.PluginRemote {
plugins = ListPluginsFromMonapi()
} else {
plugins = ListPluginsFromLocal()
}
return plugins
}
func ListPluginsFromMonapi() map[string]*Plugin {
ret := make(map[string]*Plugin)
plugins := stra.Collect.GetPlugin()
for _, p := range plugins {
fpath := p.FilePath
fileInfo, err := os.Stat(fpath)
if err != nil {
logger.Warningf("plugin:%s get info err:%v", p.FilePath, err)
continue
}
plugin := &Plugin{
FilePath: fpath,
MTime: fileInfo.ModTime().Unix(),
Cycle: p.Step,
Params: p.Params,
}
ret[fpath] = plugin
}
return ret
}
func ListPluginsFromLocal() map[string]*Plugin {
dir := sys.Config.Plugin
ret := make(map[string]*Plugin)
if dir == "" || !file.IsExist(dir) || file.IsFile(dir) {
......
......@@ -5,6 +5,7 @@ import (
"encoding/json"
"os/exec"
"path/filepath"
"strings"
"time"
"github.com/toolkits/pkg/file"
......@@ -57,7 +58,8 @@ func PluginRun(plugin *Plugin) {
}
logger.Debug(fpath, " running")
cmd := exec.Command(fpath)
params := strings.Split(plugin.Params, " ")
cmd := exec.Command(fpath, params...)
cmd.Dir = filepath.Dir(fpath)
var stdout bytes.Buffer
cmd.Stdout = &stdout
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册