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 // }() //}