func NewEruApp(container *docker.Container, extend map[string]interface{}) *EruApp { name, entrypoint, ident := utils.GetAppInfo(container.Name) if name == "" { logs.Info("Container name invaild", container.Name) return nil } logs.Debug("Eru App", name, entrypoint, ident) transfer, _ := g.Transfers.Get(container.ID, 0) client := falcon.CreateFalconClient( transfer, time.Duration(g.Config.Metrics.Timeout)*time.Millisecond, ) step := time.Duration(g.Config.Metrics.Step) * time.Second extend["hostname"] = g.Config.HostName extend["cid"] = container.ID[:12] extend["ident"] = ident tag := []string{} for k, v := range extend { tag = append(tag, fmt.Sprintf("%s=%v", k, v)) } endpoint := fmt.Sprintf("%s-%s", name, entrypoint) meta := defines.Meta{container.ID, container.State.Pid, name, entrypoint, ident, extend} metric := metric.CreateMetric(step, client, strings.Join(tag, ","), endpoint) eruApp := &EruApp{meta, metric} return eruApp }
func start_watcher(client metric.Remote, cid string, pid int) { serv := metric.CreateMetric(time.Duration(5)*time.Second, client, "a=b,b=c", fmt.Sprintf("test_%s", cid)) defer serv.Client.Close() if err := serv.InitMetric(cid, pid); err != nil { fmt.Println("failed", err) return } t := time.NewTicker(serv.Step) defer t.Stop() fmt.Println("begin watch", cid) for { select { case now := <-t.C: go func() { if info, err := serv.UpdateStats(cid); err == nil { fmt.Println(info) rate := serv.CalcRate(info, now) serv.SaveLast(info) // for safe fmt.Println(rate) go serv.Send(rate) } }() case <-serv.Stop: return } } }