@@ -63,8 +63,8 @@ def _pgwriter_init():
6363 return pg_writer
6464
6565
66- def _pgwriter_write ( pgwriter , ts , client_ip , IN_BYTES , PROTOCOL , DIRECTION , L4_DST_PORT , L4_SRC_PORT , INPUT_SNMP , OUTPUT_SNMP , address_family , IPVx_DST_ADDR , IPVx_SRC_ADDR ):
67- buf = struct .pack ('!Hiqi4s4siQiHiHiIiIiHiH ' ,
66+ def _pgwriter_encode ( ts , client_ip , IN_BYTES , PROTOCOL , DIRECTION , L4_DST_PORT , L4_SRC_PORT , INPUT_SNMP , OUTPUT_SNMP , address_family , IPVx_DST_ADDR , IPVx_SRC_ADDR ):
67+ buf = struct .pack ('!Hiqi4s4siQiHiHiIiIiQiQ ' ,
6868 11 , # number of columns
6969 8 , int (1000000 * (ts - PG_EPOCH_TIMESTAMP )), # https://doxygen.postgresql.org/backend_2utils_2adt_2timestamp_8c_source.html#l00228
7070 8 , IPV4_ADDRESS_PREFIX , socket .inet_aton (client_ip ), # 4 bytes prefix + 4 bytes IP
@@ -73,8 +73,8 @@ def _pgwriter_write(pgwriter, ts, client_ip, IN_BYTES, PROTOCOL, DIRECTION, L4_D
7373 2 , DIRECTION ,
7474 4 , L4_DST_PORT ,
7575 4 , L4_SRC_PORT ,
76- 2 , INPUT_SNMP ,
77- 2 , OUTPUT_SNMP ,
76+ 8 , INPUT_SNMP ,
77+ 8 , OUTPUT_SNMP ,
7878 )
7979 if address_family != socket .AF_INET6 :
8080 buf2 = struct .pack ('!i4s4si4s4s' ,
@@ -86,7 +86,7 @@ def _pgwriter_write(pgwriter, ts, client_ip, IN_BYTES, PROTOCOL, DIRECTION, L4_D
8686 4 + 16 , IPV6_ADDRESS_PREFIX , IPVx_DST_ADDR ,
8787 4 + 16 , IPV6_ADDRESS_PREFIX , IPVx_SRC_ADDR ,
8888 )
89- pgwriter . write ( buf + buf2 )
89+ return buf + buf2
9090
9191
9292def _pgwriter_finish (pgwriter ):
@@ -212,7 +212,7 @@ def _get_data(buffer):
212212 dst = socket .inet_aton (f .data ["IPV4_DST_ADDR" ])
213213 src = socket .inet_aton (f .data ["IPV4_SRC_ADDR" ])
214214
215- yield (
215+ yield _pgwriter_encode (
216216 ts ,
217217 client_ip ,
218218 f .data ["IN_BYTES" ],
@@ -226,12 +226,12 @@ def _get_data(buffer):
226226 dst ,
227227 src ,
228228 )
229- except KeyError :
229+ except :
230230 log .exception (f"[{ client_ip } ] Error decoding v9 flow. Contents: { repr (f .data )} " )
231231 elif netflow_version == 5 :
232232 for f in flows :
233233 try :
234- yield (
234+ yield _pgwriter_encode (
235235 ts ,
236236 client_ip ,
237237 # "IN_BYTES":
@@ -257,14 +257,14 @@ def _get_data(buffer):
257257 # "IPV4_SRC_ADDR":
258258 struct .pack ('!I' , f .data ["IPV4_SRC_ADDR" ]),
259259 )
260- except KeyError :
260+ except :
261261 log .exception (f"[{ client_ip } ] Error decoding v5 flow. Contents: { repr (f .data )} " )
262262 else :
263263 log .error (f"[{ client_ip } ] Only Netflow v5 and v9 currently supported, ignoring record (version: [{ export .header .version } ])" )
264264
265265 pgwriter = _pgwriter_init ()
266- for data in _get_data (buffer ):
267- _pgwriter_write ( pgwriter , * data )
266+ for encoded_data in _get_data (buffer ):
267+ pgwriter . write ( encoded_data )
268268 _pgwriter_finish (pgwriter )
269269
270270
0 commit comments