Поддержка Net.Interface.BytesIn64() для Linux

Started by 2c2i, November 23, 2015, 06:21:02 PM

Previous topic - Next topic

2c2i

Net.Interface.BytesIn64() похоже не поддерживается для Linux ( как и написано в https://wiki.netxms.org/wiki/Agent_Parameters_Compatibility_Matrix)

Однако если ядро 64разрядное, то счетчики 64битные.

root@border0:~# ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:15:17:ba:fd:c2 
          inet6 addr: fe80::215:17ff:feba:fdc2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:210009505322 errors:0 dropped:0 overruns:0 frame:0
          TX packets:339558039233 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:78015839084215 (70.9 TiB)  TX bytes:390754645687990 (355.3 TiB)
          Interrupt:16 Memory:fea80000-feaa0000


Неплохо бы поддерживать такие DCI на 64битных системах.

Victor Kirhenshtein


gyouja

Я для этого уже давно написал и использую такой патчик:


--- netxms-1.2.10/src/agent/subagents/linux/linux.cpp 2013-11-15 18:04:23.000000000 +0400
+++ netxms-1.2.10-r1/src/agent/subagents/linux/linux.cpp 2014-01-09 17:51:00.000000000 +0400
@@ -180,9 +180,9 @@
{ _T("Net.Interface.AdminStatus(*)"), H_NetIfInfoFromIOCTL, (TCHAR *)IF_INFO_ADMIN_STATUS,
DCI_DT_INT, DCIDESC_NET_INTERFACE_ADMINSTATUS },
{ _T("Net.Interface.BytesIn(*)"),     H_NetIfInfoFromProc, (TCHAR *)IF_INFO_BYTES_IN,
- DCI_DT_UINT, DCIDESC_NET_INTERFACE_BYTESIN },
+ DCI_DT_UINT64, DCIDESC_NET_INTERFACE_BYTESIN },
{ _T("Net.Interface.BytesOut(*)"),    H_NetIfInfoFromProc, (TCHAR *)IF_INFO_BYTES_OUT,
- DCI_DT_UINT, DCIDESC_NET_INTERFACE_BYTESOUT },
+ DCI_DT_UINT64, DCIDESC_NET_INTERFACE_BYTESOUT },
{ _T("Net.Interface.Description(*)"), H_NetIfInfoFromIOCTL, (TCHAR *)IF_INFO_DESCRIPTION,
DCI_DT_STRING, DCIDESC_NET_INTERFACE_DESCRIPTION },
{ _T("Net.Interface.InErrors(*)"),    H_NetIfInfoFromProc, (TCHAR *)IF_INFO_IN_ERRORS,
diff -ur netxms-1.2.10/src/agent/subagents/linux/net.cpp netxms-1.2.10-r1/src/agent/subagents/linux/net.cpp
--- netxms-1.2.10/src/agent/subagents/linux/net.cpp 2013-11-29 17:56:24.000000000 +0400
+++ netxms-1.2.10-r1/src/agent/subagents/linux/net.cpp 2014-01-09 17:53:39.000000000 +0400
@@ -526,15 +526,15 @@
    int i;
    char *eptr, szBuffer[256];
    const char *pszWord;
-   DWORD dwValue;
+   QWORD qwValue;
    LONG nRet = SYSINFO_RC_ERROR;

    for(i = 0, pszWord = pszLine; i <= nPos; i++)
       pszWord = ExtractWordA(pszWord, szBuffer);
-   dwValue = strtoul(szBuffer, &eptr, 0);
+   qwValue = (QWORD) strtoull(szBuffer, &eptr, 0);
    if (*eptr == 0)
    {
-      ret_uint(pValue, dwValue);
+      ret_uint64(pValue, qwValue);
       nRet = SYSINFO_RC_SUCCESS;
    }
    return nRet;

Victor Kirhenshtein

64 битные счетчики добавлены в 2.0.5 и 2.1-М1.