| 66 | } |
| 67 | |
| 68 | func (ln *target) encode(ts []*controller.PrometheusTargetRequest) ([]*controller.PrometheusTarget, error) { |
| 69 | ln.lock.Lock() |
| 70 | defer ln.lock.Unlock() |
| 71 | |
| 72 | resp := make([]*controller.PrometheusTarget, 0) |
| 73 | var dbToAdd []*metadbmodel.PrometheusTarget |
| 74 | podClusterIDToDomainInfo, err := ln.getPodClusterIDToDomainInfo() |
| 75 | for i := range ts { |
| 76 | t := ts[i] |
| 77 | ins := t.GetInstance() |
| 78 | job := t.GetJob() |
| 79 | vpcID := int(t.GetEpcId()) |
| 80 | podClusterID := int(t.GetPodClusterId()) |
| 81 | if id, ok := ln.keyToID.Load(cache.NewTargetKey(ins, job, vpcID, podClusterID)); ok { |
| 82 | resp = append(resp, &controller.PrometheusTarget{ |
| 83 | Id: proto.Uint32(uint32(id.(int))), |
| 84 | Instance: &ins, |
| 85 | Job: &job, |
| 86 | PodClusterId: proto.Uint32(uint32(podClusterID)), |
| 87 | EpcId: proto.Uint32(uint32(vpcID)), |
| 88 | }) |
| 89 | continue |
| 90 | } |
| 91 | di := podClusterIDToDomainInfo[podClusterID] |
| 92 | dbToAdd = append(dbToAdd, &metadbmodel.PrometheusTarget{ |
| 93 | Base: metadbmodel.Base{Lcuuid: common.GenerateUUID(ins + job + fmt.Sprintf("%d-%d", vpcID, podClusterID) + "prometheus")}, |
| 94 | CreateMethod: common.PROMETHEUS_TARGET_CREATE_METHOD_PROMETHEUS, |
| 95 | Instance: ins, |
| 96 | Job: job, |
| 97 | VPCID: vpcID, |
| 98 | PodClusterID: podClusterID, |
| 99 | Domain: di.domain, |
| 100 | SubDomain: di.subDomain, |
| 101 | }) |
| 102 | } |
| 103 | if len(dbToAdd) == 0 { |
| 104 | return resp, nil |
| 105 | } |
| 106 | ids, err := ln.allocate(len(dbToAdd)) |
| 107 | if err != nil { |
| 108 | return nil, err |
| 109 | } |
| 110 | for i := range ids { |
| 111 | dbToAdd[i].ID = ids[i] |
| 112 | } |
| 113 | err = addBatch(ln.org.DB, dbToAdd, ln.resourceType) |
| 114 | if err != nil { |
| 115 | log.Errorf("add %s error: %s", ln.resourceType, err.Error(), ln.org.LogPrefix) |
| 116 | return nil, err |
| 117 | } |
| 118 | for i := range dbToAdd { |
| 119 | id := dbToAdd[i].ID |
| 120 | k := cache.NewTargetKey(dbToAdd[i].Instance, dbToAdd[i].Job, dbToAdd[i].VPCID, dbToAdd[i].PodClusterID) |
| 121 | ln.keyToID.Store(k, id) |
| 122 | resp = append(resp, &controller.PrometheusTarget{ |
| 123 | Id: proto.Uint32(uint32(id)), |
| 124 | Instance: &k.Instance, |
| 125 | Job: &k.Job, |