MCPcopy Create free account
hub / github.com/Edgio/vflow / SFDecode

Method SFDecode

sflow/decoder.go:95–135  ·  view source on GitHub ↗

SFDecode decodes sFlow data

()

Source from the content-addressed store, hash-verified

93
94// SFDecode decodes sFlow data
95func (d *SFDecoder) SFDecode() (*SFDatagram, error) {
96 datagram, err := d.sfHeaderDecode()
97 if err != nil {
98 return nil, err
99 }
100
101 datagram.Samples = []Sample{}
102 datagram.Counters = []Counter{}
103
104 for i := uint32(0); i < datagram.SamplesNo; i++ {
105 sfTypeFormat, sfDataLength, err := d.getSampleInfo()
106 if err != nil {
107 return nil, err
108 }
109
110 if m := d.isFilterMatch(sfTypeFormat); m {
111 d.reader.Seek(int64(sfDataLength), 1)
112 continue
113 }
114
115 switch sfTypeFormat {
116 case DataFlowSample:
117 d, err := decodeFlowSample(d.reader)
118 if err != nil {
119 return datagram, err
120 }
121 datagram.Samples = append(datagram.Samples, d)
122 case DataCounterSample:
123 d, err := decodeFlowCounter(d.reader)
124 if err != nil {
125 return datagram, err
126 }
127 datagram.Counters = append(datagram.Counters, d)
128 default:
129 d.reader.Seek(int64(sfDataLength), 1)
130 }
131
132 }
133
134 return datagram, nil
135}
136
137func (d *SFDecoder) sfHeaderDecode() (*SFDatagram, error) {
138 var (

Callers 4

sFlowWorkerMethod · 0.95
TestSFDecodeFunction · 0.95
TestDecodeSampleHeaderFunction · 0.95
BenchmarkSFDecodeFunction · 0.95

Calls 5

sfHeaderDecodeMethod · 0.95
getSampleInfoMethod · 0.95
isFilterMatchMethod · 0.95
decodeFlowSampleFunction · 0.85
decodeFlowCounterFunction · 0.85

Tested by 3

TestSFDecodeFunction · 0.76
TestDecodeSampleHeaderFunction · 0.76
BenchmarkSFDecodeFunction · 0.76