Skip to content

Commit 36cfc43

Browse files
authored
Fix NetworkIoCgroupSystemProvider doesn't create a value column (#1274)
1 parent b7c19fb commit 36cfc43

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

metric_providers/network/io/cgroup/system/provider.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22

3+
from lib import utils
34
from metric_providers.cgroup import CgroupMetricProvider
45

56
class NetworkIoCgroupSystemProvider(CgroupMetricProvider):
@@ -13,3 +14,31 @@ def __init__(self, sampling_rate, skip_check=False, cgroups: dict = None):
1314
skip_check=skip_check,
1415
cgroups=cgroups,
1516
)
17+
18+
def _parse_metrics(self, df):
19+
df = super()._parse_metrics(df) # sets detail_name
20+
21+
df = df.sort_values(by=['detail_name', 'time'], ascending=True)
22+
23+
df['transmitted_bytes_intervals'] = df.groupby(['detail_name'])['transmitted_bytes'].diff()
24+
df['transmitted_bytes_intervals'] = df.groupby('detail_name')['transmitted_bytes_intervals'].transform(utils.df_fill_mean) # fill first NaN value resulted from diff()
25+
26+
df['received_bytes_intervals'] = df.groupby(['detail_name'])['received_bytes'].diff()
27+
df['received_bytes_intervals'] = df.groupby('detail_name')['received_bytes_intervals'].transform(utils.df_fill_mean) # fill first NaN value resulted from diff()
28+
29+
# we checked at ingest if it contains NA values. So NA can only occur if group diff resulted in only one value.
30+
# Since one value is useless for us we drop the row
31+
df.dropna(inplace=True)
32+
33+
if (df['received_bytes_intervals'] < 0).any():
34+
raise ValueError('NetworkIoCgroupSystemProvider data column received_bytes_intervals had negative values.')
35+
36+
if (df['transmitted_bytes_intervals'] < 0).any():
37+
raise ValueError('NetworkIoCgroupSystemProvider data column transmitted_bytes_intervals had negative values.')
38+
39+
df['value'] = df['received_bytes_intervals'] + df['transmitted_bytes_intervals']
40+
df['value'] = df.value.astype('int64')
41+
42+
df = df.drop(columns=['received_bytes','transmitted_bytes', 'transmitted_bytes_intervals', 'received_bytes_intervals']) # clean up
43+
44+
return df

0 commit comments

Comments
 (0)