ssh_crawler/crawler/crawler.go
2017-11-09 18:04:07 +09:00

223 lines
4.5 KiB
Go

package crawler
import (
"bytes"
"git.loafle.net/overflow/ssh_crawler/ssh"
config "git.loafle.net/overflow/overflow_commons_go/modules/config/model"
configUtil "git.loafle.net/overflow/overflow_commons_go/modules/config/util"
"io"
)
type Crawler struct {
sshCli *ssh.SSHClient
}
type SSHCrawlerModuler interface {
Read(r io.Reader) (map[string]string, error)
}
func New(ip, port, user, pw string, keyFilePath string) (*Crawler, error) {
c := &Crawler{}
err := c.connectSSH(ip, port, user, pw, keyFilePath)
if err != nil {
return nil, err
}
return c, nil
}
func (c *Crawler) connectSSH(ip, port, user, pw, keyFilePath string) error {
client, err := ssh.New(ip, port, user, pw, keyFilePath)
if err != nil {
return err
}
c.sshCli = client
return nil
}
func (c *Crawler) ParseResult(collectMap map[string]string, item config.Item) (map[string]string, error) {
mappingMap := configUtil.KeysToMap(item.Keys)
resMap := make(map[string]string)
for key, value := range mappingMap {
resMap[value] = collectMap[key]
}
return resMap, nil
}
func (c *Crawler) Process(moduler SSHCrawlerModuler, ch chan interface{}, item config.Item) {
go func() {
b, err := c.sshCli.RunCommand(item.QueryInfo.Query)
if err != nil {
ch <- err
}
res, err := moduler.Read(bytes.NewReader(b))
if err != nil {
ch <- err
}
res, err = c.ParseResult(res, item)
if err != nil {
ch <- err
}
ch <- res
close(ch)
}()
}
//
//func (c *Crawler) CPUStat(ch chan interface{}, item model.Item) {
// go func() {
// cpu := &stat.CPUStat{}
// b, err := c.sshCli.RunCommand(item.QueryInfo.Query)
// if err != nil {
// ch <- err
// }
// res, err := cpu.Read(bytes.NewReader(b))
// if err != nil {
// ch <- err
// }
// res, err = c.ParseResult(res, item)
// if err != nil {
// ch <- err
// }
// ch <- res
// close(ch)
// }()
//}
//
//func (c *Crawler) MemStat(ch chan interface{}, item model.Item) {
// go func() {
// mem := &stat.MemStat{}
// b, err := c.sshCli.RunCommand(mem.Command())
// if err != nil {
// ch <- err
// }
// res, err := mem.Read(bytes.NewReader(b))
// if err != nil {
// ch <- err
// }
// res, err = c.ParseResult(res, item)
// if err != nil {
// ch <- err
// }
// ch <- res
// close(ch)
// }()
//}
//
//func (c *Crawler) DiskIOStat(ch chan interface{}, keys []string) {
// go func() {
// diskio := &stat.DiskIOStat{}
//
// b, err := c.sshCli.RunCommand(diskio.Command())
// if err != nil {
// ch <- err
// }
//
// res, err := diskio.Read(bytes.NewReader(b), keys)
// if err != nil {
// ch <- err
// }
// ch <- res
// close(ch)
// }()
//}
//
//func (c *Crawler) DiskFreeStat(ch chan interface{}, keys []string) {
// go func() {
// diskFree := &stat.DiskFreeStat{}
// b, err := c.sshCli.RunCommand(diskFree.Command())
// if err != nil {
// ch <- err
// }
// res, err := diskFree.Read(bytes.NewReader(b), keys)
// if err != nil {
// ch <- err
// }
// ch <- res
// close(ch)
// }()
//}
//
//func (c *Crawler) DiskIFreeStat(ch chan interface{}, keys []string) {
// go func() {
// diskFree := &stat.DiskIFreeStat{}
// b, err := c.sshCli.RunCommand(diskFree.Command())
// if err != nil {
// ch <- err
// }
// res, err := diskFree.Read(bytes.NewReader(b), keys)
// if err != nil {
// ch <- err
// }
// ch <- res
// close(ch)
// }()
//}
//
//
//func (c *Crawler) LoadAvgStat(ch chan interface{}) {
// go func() {
// load := &stat.LoadAvg{}
//
// b, err := c.sshCli.RunCommand(load.Command())
// if err != nil {
// ch <- err
// }
// res, err := load.Read(bytes.NewReader(b))
// if err != nil {
// ch <- err
// }
// ch <- res
// }()
//}
//
//func (c *Crawler) NetworkStat(ch chan interface{}, keys []string) {
// go func() {
// net := &stat.NetDevStat{}
// b, err := c.sshCli.RunCommand(net.Command())
// if err != nil {
// ch <- err
// }
// res, err := net.Read(bytes.NewReader(b), keys)
// if err != nil {
// ch <- err
// }
// ch <- res
// }()
//}
//
//func (c *Crawler) ProcessStat(ch chan interface{}) {
// go func() {
// ps := &stat.ProcessStat{}
// b, err := c.sshCli.RunCommand(ps.Command())
// if err != nil {
// ch <- err
// }
// res, err := ps.Read(bytes.NewReader(b))
// if err != nil {
// ch <- err
// }
// ch <- res
// }()
//}
//
//func (c *Crawler) Uptime(ch chan interface{}) {
// go func() {
// upt := &stat.Uptime{}
// b, err := c.sshCli.RunCommand(upt.Command())
// if err != nil {
// ch <- err
// }
// res, err := upt.Read(bytes.NewReader(b))
// if err != nil {
// ch <- err
// }
// ch <- res
// }()
//}