From fe1463442adf9fef0841ed4f1bbd3cabc122526b Mon Sep 17 00:00:00 2001 From: mirivlad Date: Fri, 17 Apr 2026 10:19:32 +0800 Subject: [PATCH] fix: Agent network metrics initialization - Initialize _prev_net_io on first call for all interfaces - Calculate metrics from second call onwards - This ensures metrics are captured starting from cycle 2 --- __pycache__/agent.cpython-312.pyc | Bin 15783 -> 16077 bytes agent.py | 27 +++++++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/__pycache__/agent.cpython-312.pyc b/__pycache__/agent.cpython-312.pyc index f17a4caab74c9aee326ab7d66c7d2dc2be521433..5fa15744941f1db063c4525da6aea04086eeca27 100644 GIT binary patch delta 1364 zcmZ`%Urbw77{90YPyhd;q*!lDDHKLyOZhX93_6E0>f*9w33HghwyyUU?--??TbhO4 z#+hhb3^8P%$so*(_^>_r0=Y51PG5*FCKiq0jYejS%8RLJe9**rPG@B%dLF*>o%8*E z-}n2zbM9XKr0lxyblMoQZZAJjK1^-6&YIB2kTY%gr$!lO(!?-jzAR|G#+DF9i*`t| z;U-bzi!Mr{tAtdv7}bPJ9{AbegKt@XfRnge>;XdKhY44$K{#x0>KJBVxw zehv7X5lbiw;|)` zEkN=wkT%M8c)$jpvj1~-Xm*mF;$_Y8w|Ak~M0L}p*)j#@P*oZ#BbbzkKo zFSsQ4yJQk{mEA@0p+{Iw$y2}AkmS|etIXRb+Up}2*S|0g2bjA4|DV_rT695@Z$~~j z!zYe6o*IuKLnz2NuVf9bsLaYS)-d5KhN*Z3)0Qz6sr<+ibL?q1vu7d4JwyYKQ$vNr z1|Nr?_*bALbO^j!kYx#0g&&$mNQ}nSD9Le+*>!oYrK_exuwp*!tqM$Y$L(_~=RON1 z_8GxC4PTj~N8G+!!&~k{JMq5l_|Z!I=)LLfv5Csq#HSbKN_*}t$MX1=r?u)Na8zwL zNbn2e2gBTsc5hg^$G`K1*SLzW{rc#RKd?Ny=3hBk@poQN@4EfVkvFs*v2|NaRK&zO zw?4jMtB6OIEdP1u6PI7Qky@Kr_r5a)FI!4z7k;xen-hL(7FByewDz`!Npr7`45S(6 zgQ4RlvTZWfbSt}Qb)`e>W{6L>>MvT|CO$`SCv?qzpM#U0>@Yq{&SPZmZ07Q1e1RNd zEWSuKLy+W>l9dg9Ud>F)SRr>fL=BDpj*|EieD4`VEfDs0_D3nhEh*~E`9cO4m7+42 zS8=uuH*B>~Et4T+3I#bYVFfgA8%n~Ox3RyI@_Dt0l>+V}e$0XUC|ROLra{|5UW21P zslVqvji&UWhCf*gRTe|I7e@SNP!w+Z`#ki?agv$^YI?x%KaW=Ro~AEZ6au?=8f9Qg zd=`BHcf=Cmgn|j8=DFa2(ESkqdN7Pe;chUFj=|@_!{|NT8bSi)w#86H?{ABvI&?ZZ zPe5NsyU;hfqg}V4X1JG_B+yWo7_1GaQI+%R99GX43=pJFZ2v)u-5DkEk{BDBm7;C`}()_Q`85t+gSeH!03W zT}O%wmU!9sXvM9&-eIm=hTs+-V2O#VPM=?CewTe{U+0I2S_Q2;;4U9U9uS4@r1$hh z0+~Wl#fAK=$!Yl|71QzgpIH({MqSK3D|t07_@ZgiF2btN)tq24^@W2p&}+dB;j+M& zimIwWRE)#3;!pAjsZ&(xGsG~Lm>-<(ODFDI{P2vm&s7UW-Q1Qpcg7>l!W-5O zXpvG+*IeG$^{OlKy&TyXtICNAR||wTxQ)q8M>Wt@5o_MSwehP*YT?*!I9&~=KOXzU zw{@x-&QwnRUk$EHE3sN~_kT<=8JcJ}Vio+FTZ1C4fO=)3L*$QJ8O@JCr56V{?m( zc$##`T5{xJ3W~atpH)qMxs;nz@jR*BBRgQ~-9J$h=fUndjKVPH>FkeChD*tp&QBL} zSj%hq3xyIs+kl(4daJHv3b|rYEhu;%Ha(G3J(MYu4>zk8G?UjZXt_lkr$xS`;d~Ky zlRV+Ty;N(K28A|l5674s&50eScO0EIX1sr~)&)vJI1T6IGbjR|%1^jQD3?ydWg1fO zw>*i~jYGAx^1Lmh82b2$DS8L)S+qB)TQF| zTyfcy8rgJ0#u1oG22dPUlQEPuHj)xTZsUX0F%k8`FNgNrDQbxP*bMHYAqfu-x02Rl z11VxH=?%clfCo()rGXQy{Sho|5A~xo>God5s; diff --git a/agent.py b/agent.py index b00c730..c8792d0 100755 --- a/agent.py +++ b/agent.py @@ -31,24 +31,39 @@ def get_network_metrics(interval=60): counters = psutil.net_io_counters(pernic=True) stats = psutil.net_if_stats() now = __import__('time').time() + + # Инициализируем интерфейсы которые ещё не видели for name, counter in counters.items(): if name not in stats: continue if not _is_real_interface(name, stats[name]): continue + if name not in _prev_net_io: + _prev_net_io[name] = {'rx': counter.bytes_recv, 'tx': counter.bytes_sent, 'time': now} + + # Рассчитываем метрики + for name, counter in counters.items(): + if name not in stats: + continue + if not _is_real_interface(name, stats[name]): + continue + speed_mbps = stats[name].speed if stats[name].speed > 0 else 1000 speed_bps = speed_mbps * 1000000 / 8 - if name in _prev_net_io: - prev = _prev_net_io[name] - elapsed = now - prev['time'] - if elapsed > 0: - rx_delta = counter.bytes_recv - prev['rx'] - tx_delta = counter.bytes_sent - prev['tx'] + + prev = _prev_net_io[name] + elapsed = now - prev['time'] + + if elapsed >= 1: # Минимум 1 секунда + rx_delta = counter.bytes_recv - prev['rx'] + tx_delta = counter.bytes_sent - prev['tx'] + if rx_delta >= 0 and tx_delta >= 0: rx_pct = min((rx_delta / elapsed) / speed_bps * 100, 100.0) tx_pct = min((tx_delta / elapsed) / speed_bps * 100, 100.0) iface_key = name.replace('-', '_') metrics[f'net_in_{iface_key}'] = round(rx_pct, 2) metrics[f'net_out_{iface_key}'] = round(tx_pct, 2) + _prev_net_io[name] = {'rx': counter.bytes_recv, 'tx': counter.bytes_sent, 'time': now} except Exception as e: print(f'Ошибка сбора сетевых метрик: {e}')