| 201 | } |
| 202 | |
| 203 | func (c *ipvsCollector) parseIpvsLabels(labelString string) ([]string, error) { |
| 204 | labels := strings.Split(labelString, ",") |
| 205 | labelSet := make(map[string]bool, len(labels)) |
| 206 | results := make([]string, 0, len(labels)) |
| 207 | for _, label := range labels { |
| 208 | if label != "" { |
| 209 | labelSet[label] = true |
| 210 | } |
| 211 | } |
| 212 | |
| 213 | for _, label := range fullIpvsBackendLabels { |
| 214 | if labelSet[label] { |
| 215 | results = append(results, label) |
| 216 | } |
| 217 | delete(labelSet, label) |
| 218 | } |
| 219 | |
| 220 | if len(labelSet) > 0 { |
| 221 | keys := make([]string, 0, len(labelSet)) |
| 222 | for label := range labelSet { |
| 223 | keys = append(keys, label) |
| 224 | } |
| 225 | sort.Strings(keys) |
| 226 | return nil, fmt.Errorf("unknown IPVS backend labels: %q", strings.Join(keys, ", ")) |
| 227 | } |
| 228 | |
| 229 | return results, nil |
| 230 | } |