@@ -63,8 +63,8 @@ def _pgwriter_init():
63
63
return pg_writer
64
64
65
65
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 ' ,
68
68
11 , # number of columns
69
69
8 , int (1000000 * (ts - PG_EPOCH_TIMESTAMP )), # https://doxygen.postgresql.org/backend_2utils_2adt_2timestamp_8c_source.html#l00228
70
70
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
73
73
2 , DIRECTION ,
74
74
4 , L4_DST_PORT ,
75
75
4 , L4_SRC_PORT ,
76
- 2 , INPUT_SNMP ,
77
- 2 , OUTPUT_SNMP ,
76
+ 8 , INPUT_SNMP ,
77
+ 8 , OUTPUT_SNMP ,
78
78
)
79
79
if address_family != socket .AF_INET6 :
80
80
buf2 = struct .pack ('!i4s4si4s4s' ,
@@ -86,7 +86,7 @@ def _pgwriter_write(pgwriter, ts, client_ip, IN_BYTES, PROTOCOL, DIRECTION, L4_D
86
86
4 + 16 , IPV6_ADDRESS_PREFIX , IPVx_DST_ADDR ,
87
87
4 + 16 , IPV6_ADDRESS_PREFIX , IPVx_SRC_ADDR ,
88
88
)
89
- pgwriter . write ( buf + buf2 )
89
+ return buf + buf2
90
90
91
91
92
92
def _pgwriter_finish (pgwriter ):
@@ -212,7 +212,7 @@ def _get_data(buffer):
212
212
dst = socket .inet_aton (f .data ["IPV4_DST_ADDR" ])
213
213
src = socket .inet_aton (f .data ["IPV4_SRC_ADDR" ])
214
214
215
- yield (
215
+ yield _pgwriter_encode (
216
216
ts ,
217
217
client_ip ,
218
218
f .data ["IN_BYTES" ],
@@ -226,12 +226,12 @@ def _get_data(buffer):
226
226
dst ,
227
227
src ,
228
228
)
229
- except KeyError :
229
+ except :
230
230
log .exception (f"[{ client_ip } ] Error decoding v9 flow. Contents: { repr (f .data )} " )
231
231
elif netflow_version == 5 :
232
232
for f in flows :
233
233
try :
234
- yield (
234
+ yield _pgwriter_encode (
235
235
ts ,
236
236
client_ip ,
237
237
# "IN_BYTES":
@@ -257,14 +257,14 @@ def _get_data(buffer):
257
257
# "IPV4_SRC_ADDR":
258
258
struct .pack ('!I' , f .data ["IPV4_SRC_ADDR" ]),
259
259
)
260
- except KeyError :
260
+ except :
261
261
log .exception (f"[{ client_ip } ] Error decoding v5 flow. Contents: { repr (f .data )} " )
262
262
else :
263
263
log .error (f"[{ client_ip } ] Only Netflow v5 and v9 currently supported, ignoring record (version: [{ export .header .version } ])" )
264
264
265
265
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 )
268
268
_pgwriter_finish (pgwriter )
269
269
270
270
0 commit comments