| 101 | } |
| 102 | |
| 103 | func (lv *labelValue) encode(strs []string) ([]*controller.PrometheusLabelValue, error) { |
| 104 | lv.lock.Lock() |
| 105 | defer lv.lock.Unlock() |
| 106 | |
| 107 | resp := make([]*controller.PrometheusLabelValue, 0) |
| 108 | dbToAdd := make([]*metadbmodel.PrometheusLabelValue, 0) |
| 109 | for i := range strs { |
| 110 | str := strs[i] |
| 111 | if id, ok := lv.getID(str); ok { |
| 112 | resp = append(resp, &controller.PrometheusLabelValue{Value: &str, Id: proto.Uint32(uint32(id))}) |
| 113 | continue |
| 114 | } |
| 115 | dbToAdd = append(dbToAdd, &metadbmodel.PrometheusLabelValue{Value: str}) |
| 116 | } |
| 117 | if len(dbToAdd) == 0 { |
| 118 | return resp, nil |
| 119 | } |
| 120 | |
| 121 | err := addBatch(lv.org.DB, dbToAdd, lv.resourceType) |
| 122 | if err != nil { |
| 123 | log.Errorf("add %s error: %s", lv.resourceType, err.Error(), lv.org.LogPrefix) |
| 124 | return nil, err |
| 125 | } |
| 126 | for i := range dbToAdd { |
| 127 | lv.store(dbToAdd[i]) |
| 128 | resp = append(resp, &controller.PrometheusLabelValue{Value: &dbToAdd[i].Value, Id: proto.Uint32(uint32(dbToAdd[i].ID))}) |
| 129 | } |
| 130 | return resp, nil |
| 131 | } |
| 132 | |
| 133 | func (lv *labelValue) getID(str string) (int, bool) { |
| 134 | id, ok := lv.strToID[str] |