decode transforms input byte field into a string according to configuration
(in []byte, label config.Label)
| 72 | |
| 73 | // decode transforms input byte field into a string according to configuration |
| 74 | func (s *Set) decode(in []byte, label config.Label) ([]byte, error) { |
| 75 | result := in |
| 76 | |
| 77 | for _, decoder := range label.Decoders { |
| 78 | if _, ok := s.decoders[decoder.Name]; !ok { |
| 79 | return result, fmt.Errorf("unknown decoder %q", decoder.Name) |
| 80 | } |
| 81 | |
| 82 | decoded, err := s.decoders[decoder.Name].Decode(result, decoder) |
| 83 | if err != nil { |
| 84 | if errors.Is(err, ErrSkipLabelSet) { |
| 85 | if s.skipCache != nil { |
| 86 | s.skipCache.Add(string(in), struct{}{}) |
| 87 | } |
| 88 | return decoded, err |
| 89 | } |
| 90 | |
| 91 | return decoded, fmt.Errorf("error decoding with decoder %q: %w", decoder.Name, err) |
| 92 | } |
| 93 | |
| 94 | result = decoded |
| 95 | } |
| 96 | |
| 97 | return result, nil |
| 98 | } |
| 99 | |
| 100 | // DecodeLabelsForMetrics transforms eBPF map key bytes into a list of label values |
| 101 | // according to configuration (different label sets require different names). |