// 当 grp展开结果 与 host结果 存在冲突时, 优先选择 host结果 func GetMockCfgFromDB() map[string]*cmodel.NodataConfig { ret := make(map[string]*cmodel.NodataConfig) dbConn, err := GetDbConn("nodata.mockcfg") if err != nil { log.Println("db.get_conn error, mockcfg", err) return ret } q := fmt.Sprintf("SELECT id,name,obj,obj_type,metric,tags,dstype,step,mock FROM mockcfg") rows, err := dbConn.Query(q) if err != nil { log.Println("db.query error, mockcfg", err) return ret } defer rows.Close() for rows.Next() { t := MockCfg{} tags := "" err := rows.Scan(&t.Id, &t.Name, &t.Obj, &t.ObjType, &t.Metric, &tags, &t.Type, &t.Step, &t.Mock) if err != nil { log.Println("db.scan error, mockcfg", err) continue } t.Tags = cutils.DictedTagstring(tags) err = checkMockCfg(&t) if err != nil { log.Println("check mockcfg, error:", err) continue } endpoints := getEndpoint(t.ObjType, t.Obj) if len(endpoints) < 1 { continue } for _, ep := range endpoints { uuid := cutils.PK(ep, t.Metric, t.Tags) ncfg := cmodel.NewNodataConfig(t.Id, t.Name, t.ObjType, ep, t.Metric, t.Tags, t.Type, t.Step, t.Mock) val, found := ret[uuid] if !found { // so cute, it's the first one ret[uuid] = ncfg continue } if isSpuerNodataCfg(val, ncfg) { // val is spuer than ncfg, so drop ncfg log.Printf("nodata.mockcfg conflict, %s, used %s, drop %s", uuid, val.Name, ncfg.Name) } else { ret[uuid] = ncfg // overwrite the old one log.Printf("nodata.mockcfg conflict, %s, used %s, drop %s", uuid, ncfg.Name, val.Name) } } } return ret }
func configProcHttpRoutes() { // statistics http.HandleFunc("/statistics/all", func(w http.ResponseWriter, r *http.Request) { RenderDataJson(w, proc.GetAll()) }) // trace http.HandleFunc("/trace/", func(w http.ResponseWriter, r *http.Request) { urlParam := r.URL.Path[len("/trace/"):] args := strings.Split(urlParam, "/") argsLen := len(args) endpoint := args[0] metric := args[1] tags := make(map[string]string) if argsLen > 2 { tagVals := strings.Split(args[2], ",") for _, tag := range tagVals { tagPairs := strings.Split(tag, "=") if len(tagPairs) == 2 { tags[tagPairs[0]] = tagPairs[1] } } } proc.RecvDataTrace.SetPK(cutils.PK(endpoint, metric, tags)) RenderDataJson(w, proc.RecvDataTrace.GetAllTraced()) }) }
func syncNdConfig() (cnt int, errt error) { // get configs configs := service.GetMockCfgFromDB() // restruct nm := nmap.NewSafeMap() for _, ndc := range configs { endpoint := ndc.Endpoint metric := ndc.Metric tags := ndc.Tags if endpoint == "" { log.Printf("bad config: %+v\n", ndc) continue } pk := cutils.PK(endpoint, metric, tags) nm.Put(pk, ndc) } // cache SetNdConfigMap(nm) return nm.Size(), nil }
func (t *MetaData) PK() string { return MUtils.PK(t.Endpoint, t.Metric, t.Tags) }
func configProcHttpRoutes() { // counter http.HandleFunc("/counter/all", func(w http.ResponseWriter, r *http.Request) { RenderDataJson(w, proc.GetAll()) }) // TO BE DISCARDed http.HandleFunc("/statistics/all", func(w http.ResponseWriter, r *http.Request) { RenderDataJson(w, proc.GetAll()) }) // trace http.HandleFunc("/trace/", func(w http.ResponseWriter, r *http.Request) { urlParam := r.URL.Path[len("/trace/"):] args := strings.Split(urlParam, "/") argsLen := len(args) endpoint := args[0] metric := args[1] tags := make(map[string]string) if argsLen > 2 { tagVals := strings.Split(args[2], ",") for _, tag := range tagVals { tagPairs := strings.Split(tag, "=") if len(tagPairs) == 2 { tags[tagPairs[0]] = tagPairs[1] } } } proc.RecvDataTrace.SetPK(cutils.PK(endpoint, metric, tags)) RenderDataJson(w, proc.RecvDataTrace.GetAllTraced()) }) // filter http.HandleFunc("/filter/", func(w http.ResponseWriter, r *http.Request) { urlParam := r.URL.Path[len("/filter/"):] args := strings.Split(urlParam, "/") argsLen := len(args) endpoint := args[0] metric := args[1] opt := args[2] threadholdStr := args[3] threadhold, err := strconv.ParseFloat(threadholdStr, 64) if err != nil { RenderDataJson(w, "bad threadhold") return } tags := make(map[string]string) if argsLen > 4 { tagVals := strings.Split(args[4], ",") for _, tag := range tagVals { tagPairs := strings.Split(tag, "=") if len(tagPairs) == 2 { tags[tagPairs[0]] = tagPairs[1] } } } err = proc.RecvDataFilter.SetFilter(cutils.PK(endpoint, metric, tags), opt, threadhold) if err != nil { RenderDataJson(w, err.Error()) return } RenderDataJson(w, proc.RecvDataFilter.GetAllFiltered()) }) }
func (this *GraphItem) PrimaryKey() string { return MUtils.PK(this.Endpoint, this.Metric, this.Tags) }
func (this *JudgeItem) PrimaryKey() string { return utils.Md5(utils.PK(this.Endpoint, this.Metric, this.Tags)) }