You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by do...@apache.org on 2020/11/30 20:47:15 UTC

[geode] branch develop updated: GEODE-8734: Parse netstat file to ensure correct stats are retrieved (#5764)

This is an automated email from the ASF dual-hosted git repository.

donalevans pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 790af0d  GEODE-8734: Parse netstat file to ensure correct stats are retrieved (#5764)
790af0d is described below

commit 790af0d473bbe2444fb896d8b77c64116c463774
Author: Donal Evans <do...@pivotal.io>
AuthorDate: Mon Nov 30 12:46:29 2020 -0800

    GEODE-8734: Parse netstat file to ensure correct stats are retrieved (#5764)
    
    Authored-by: Donal Evans <do...@vmware.com>
---
 .../internal/statistics/LinuxSystemStatsTest.java  |  66 ++++-
 .../statistics/platform/LinuxProcFsStatistics.java |  64 +++--
 .../statistics/platform/LinuxSystemStats.java      | 280 +++++++++++++--------
 3 files changed, 277 insertions(+), 133 deletions(-)

diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java
index e096be0..61e8766 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java
@@ -14,6 +14,14 @@
  */
 package org.apache.geode.internal.statistics;
 
+import static org.apache.geode.internal.statistics.platform.LinuxProcFsStatistics.TCP_LISTEN_DROPS_NAME;
+import static org.apache.geode.internal.statistics.platform.LinuxProcFsStatistics.TCP_LISTEN_OVERFLOWS_NAME;
+import static org.apache.geode.internal.statistics.platform.LinuxProcFsStatistics.TCP_SYNCOOKIES_RECV_NAME;
+import static org.apache.geode.internal.statistics.platform.LinuxProcFsStatistics.TCP_SYNCOOKIES_SENT_NAME;
+import static org.apache.geode.internal.statistics.platform.LinuxSystemStats.TCP_EXT_LISTEN_DROPS;
+import static org.apache.geode.internal.statistics.platform.LinuxSystemStats.TCP_EXT_LISTEN_OVERFLOWS;
+import static org.apache.geode.internal.statistics.platform.LinuxSystemStats.TCP_EXT_SYN_COOKIES_RECV;
+import static org.apache.geode.internal.statistics.platform.LinuxSystemStats.TCP_EXT_SYN_COOKIES_SENT;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.anyString;
 
@@ -93,7 +101,7 @@ public class LinuxSystemStatsTest extends StatSamplerTestCase {
         // add on 4 clicks 4 idle 0 steal
         "cpu  0 0 0 4 0 0 0 0 0 0"};
 
-    doTest(results, 0);
+    doStealTimeTest(results, 0);
   }
 
   @Test
@@ -102,7 +110,7 @@ public class LinuxSystemStatsTest extends StatSamplerTestCase {
         // add on 4 clicks 3 idle 1 steal
         "cpu  0 0 0 3 0 0 0 1 0 0"};
 
-    doTest(results, 25);
+    doStealTimeTest(results, 25);
   }
 
   @Test
@@ -111,7 +119,7 @@ public class LinuxSystemStatsTest extends StatSamplerTestCase {
         // add on 3 clicks 1 idle 2 steal
         "cpu  0 0 0 1 0 0 0 2 0 0"};
 
-    doTest(results, 66);
+    doStealTimeTest(results, 66);
   }
 
   @Test
@@ -120,10 +128,38 @@ public class LinuxSystemStatsTest extends StatSamplerTestCase {
         // add on 1 clicks 0 idle 1 steal
         "cpu  0 0 0 0 0 0 0 1 0 0"};
 
-    doTest(results, 100);
+    doStealTimeTest(results, 100);
   }
 
-  private void doTest(String[] results, int expectedStatValue) throws Exception {
+  @Test
+  public void netstatStatsTest() throws Exception {
+    long expectedSyncookiesSent = 1L;
+    long expectedSyncookiesRecv = 2L;
+    long dummyStatValue = -1L;
+    long expectedListenOverflows = 3L;
+    long expectedListenDrops = 4L;
+
+    // This string simulates the contents of the /proc/net/netstat file, omitting all stats that
+    // aren't parsed in the LinuxProcFsStatistics.getNetStatStats() method and including a dummy
+    // stat that should not be parsed
+    String mockNetstatStats = "TcpExt: " + TCP_SYNCOOKIES_SENT_NAME + " " + TCP_SYNCOOKIES_RECV_NAME
+        + " DummyStat " + TCP_LISTEN_OVERFLOWS_NAME + " " + TCP_LISTEN_DROPS_NAME + "\n"
+        + "TcpExt: " + expectedSyncookiesSent + " " + expectedSyncookiesRecv + " " + dummyStatValue
+        + " " + expectedListenOverflows + " " + expectedListenDrops;
+
+    Answer<FileInputStream> answer = new MyNetstatAnswer(mockNetstatStats);
+    PowerMockito.whenNew(FileInputStream.class).withArguments(anyString()).thenAnswer(answer);
+
+    LinuxProcFsStatistics.refreshSystem(localStats);
+
+    Statistics statistics = getStatisticsManager().findStatisticsByTextId("LinuxSystemStats")[0];
+    assertThat(statistics.getLong(TCP_EXT_SYN_COOKIES_SENT)).isEqualTo(expectedSyncookiesSent);
+    assertThat(statistics.getLong(TCP_EXT_SYN_COOKIES_RECV)).isEqualTo(expectedSyncookiesRecv);
+    assertThat(statistics.getLong(TCP_EXT_LISTEN_OVERFLOWS)).isEqualTo(expectedListenOverflows);
+    assertThat(statistics.getLong(TCP_EXT_LISTEN_DROPS)).isEqualTo(expectedListenDrops);
+  }
+
+  private void doStealTimeTest(String[] results, int expectedStatValue) throws Exception {
     Answer<FileInputStream> answer = new MyStealTimeAnswer(results);
     PowerMockito.whenNew(FileInputStream.class).withArguments(anyString()).thenAnswer(answer);
 
@@ -186,4 +222,24 @@ public class LinuxSystemStatsTest extends StatSamplerTestCase {
       return bogus;
     }
   }
+
+  private class MyNetstatAnswer implements Answer<FileInputStream> {
+
+    private final FileInputStream results;
+    private final FileInputStream bogus;
+
+    MyNetstatAnswer(String sample) throws IOException {
+      results = new FileInputStream(writeStringToFile(sample));
+      bogus = new FileInputStream(writeStringToFile(""));
+    }
+
+    @Override
+    public FileInputStream answer(InvocationOnMock invocation) throws Throwable {
+      // Since we are mocking the test we can run this test on any OS.
+      if ("/proc/net/netstat".equals(invocation.getArgument(0))) {
+        return results;
+      }
+      return bogus;
+    }
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxProcFsStatistics.java b/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxProcFsStatistics.java
index 652a00b..b246278 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxProcFsStatistics.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxProcFsStatistics.java
@@ -20,8 +20,10 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -85,6 +87,12 @@ public class LinuxProcFsStatistics {
   private static final String PSWPIN = "pswpin ";
   private static final String PSWPOUT = "pswpout ";
 
+  /** /proc/net/netstat tokens */
+  public static final String TCP_SYNCOOKIES_SENT_NAME = "SyncookiesSent";
+  public static final String TCP_SYNCOOKIES_RECV_NAME = "SyncookiesRecv";
+  public static final String TCP_LISTEN_OVERFLOWS_NAME = "ListenOverflows";
+  public static final String TCP_LISTEN_DROPS_NAME = "ListenDrops";
+
   // Do not create instances of this class
   private LinuxProcFsStatistics() {}
 
@@ -324,32 +332,53 @@ public class LinuxProcFsStatistics {
     }
   }
 
-  /*
-   * TcpExt:=0 SyncookiesSent=1
-   * ListenOverflows=20 ListenDrops=21
-   */
   private static void getNetStatStats(LocalStatisticsImpl stats) {
+    SpaceTokenizer headerTokenizer = new SpaceTokenizer();
     try (FileInputStream fileInputStream = new FileInputStream("/proc/net/netstat");
         InputStreamReader isr = new InputStreamReader(fileInputStream);
         BufferedReader br = new BufferedReader(isr)) {
-      String line;
+
+      String line = br.readLine(); // header;
+      headerTokenizer.setString(line);
+
       do {
-        br.readLine(); // header
         line = br.readLine();
       } while (line != null && !line.startsWith("TcpExt:"));
 
       tokenizer.setString(line);
-      tokenizer.skipTokens(1);
-      long tcpSyncookiesSent = tokenizer.nextTokenAsLong();
-      long tcpSyncookiesRecv = tokenizer.nextTokenAsLong();
-      tokenizer.skipTokens(17);
-      long tcpListenOverflows = tokenizer.nextTokenAsLong();
-      long tcpListenDrops = tokenizer.nextTokenAsLong();
-
-      stats.setLong(LinuxSystemStats.tcpExtSynCookiesRecvLONG, tcpSyncookiesRecv);
-      stats.setLong(LinuxSystemStats.tcpExtSynCookiesSentLONG, tcpSyncookiesSent);
-      stats.setLong(LinuxSystemStats.tcpExtListenDropsLONG, tcpListenDrops);
-      stats.setLong(LinuxSystemStats.tcpExtListenOverflowsLONG, tcpListenOverflows);
+
+      Set<String> tokenNames = new HashSet<>();
+
+      tokenNames.add(TCP_SYNCOOKIES_SENT_NAME);
+      tokenNames.add(TCP_SYNCOOKIES_RECV_NAME);
+      tokenNames.add(TCP_LISTEN_OVERFLOWS_NAME);
+      tokenNames.add(TCP_LISTEN_DROPS_NAME);
+
+      // Find the token position for each stat we're interested in from the header line and read the
+      // corresponding token from the stats line
+      while (headerTokenizer.hasMoreTokens() && !tokenNames.isEmpty()) {
+        String currentToken = headerTokenizer.peekToken();
+        if (tokenNames.contains(currentToken)) {
+          long statValue = SpaceTokenizer.parseAsLong(tokenizer.peekToken());
+          switch (currentToken) {
+            case TCP_SYNCOOKIES_SENT_NAME:
+              stats.setLong(LinuxSystemStats.tcpExtSynCookiesSentLONG, statValue);
+              break;
+            case TCP_SYNCOOKIES_RECV_NAME:
+              stats.setLong(LinuxSystemStats.tcpExtSynCookiesRecvLONG, statValue);
+              break;
+            case TCP_LISTEN_OVERFLOWS_NAME:
+              stats.setLong(LinuxSystemStats.tcpExtListenOverflowsLONG, statValue);
+              break;
+            case TCP_LISTEN_DROPS_NAME:
+              stats.setLong(LinuxSystemStats.tcpExtListenDropsLONG, statValue);
+              break;
+          }
+          tokenNames.remove(currentToken);
+        }
+        headerTokenizer.skipToken();
+        tokenizer.skipToken();
+      }
 
       if (!soMaxConnProcessed) {
         try (FileInputStream fileInputStream2 = new FileInputStream("/proc/sys/net/core/somaxconn");
@@ -367,6 +396,7 @@ public class LinuxProcFsStatistics {
     } catch (NoSuchElementException | IOException ignore) {
     } finally {
       tokenizer.releaseResources();
+      headerTokenizer.releaseResources();
     }
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxSystemStats.java b/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxSystemStats.java
index de0ff83..b241c97 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxSystemStats.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxSystemStats.java
@@ -92,223 +92,281 @@ public class LinuxSystemStats {
   @Immutable
   private static final StatisticsType myType;
 
+  public static final String ALLOCATED_SWAP = "allocatedSwap";
+  public static final String BUFFER_MEMORY = "bufferMemory";
+  public static final String SHARED_MEMORY = "sharedMemory";
+  public static final String CPU_ACTIVE = "cpuActive";
+  public static final String CPU_IDLE = "cpuIdle";
+  public static final String CPU_NICE = "cpuNice";
+  public static final String CPU_SYSTEM = "cpuSystem";
+  public static final String CPU_USER = "cpuUser";
+  public static final String IOWAIT = "iowait";
+  public static final String IRQ = "irq";
+  public static final String SOFTIRQ = "softirq";
+  public static final String CPUS = "cpus";
+  public static final String FREE_MEMORY = "freeMemory";
+  public static final String PHYSICAL_MEMORY = "physicalMemory";
+  public static final String PROCESSES = "processes";
+  public static final String UNALLOCATED_SWAP = "unallocatedSwap";
+  public static final String CACHED_MEMORY = "cachedMemory";
+  public static final String DIRTY_MEMORY = "dirtyMemory";
+  public static final String CPU_NON_USER = "cpuNonUser";
+  public static final String CPU_STEAL = "cpuSteal";
+  public static final String SO_MAX_CONN = "soMaxConn";
+  public static final String LOOPBACK_PACKETS = "loopbackPackets";
+  public static final String LOOPBACK_BYTES = "loopbackBytes";
+  public static final String RECV_PACKETS = "recvPackets";
+  public static final String RECV_BYTES = "recvBytes";
+  public static final String RECV_ERRORS = "recvErrors";
+  public static final String RECV_DROPS = "recvDrops";
+  public static final String XMIT_PACKETS = "xmitPackets";
+  public static final String XMIT_BYTES = "xmitBytes";
+  public static final String XMIT_ERRORS = "xmitErrors";
+  public static final String XMIT_DROPS = "xmitDrops";
+  public static final String XMIT_COLLISIONS = "xmitCollisions";
+  public static final String CONTEXT_SWITCHES = "contextSwitches";
+  public static final String PROCESS_CREATES = "processCreates";
+  public static final String PAGES_PAGED_IN = "pagesPagedIn";
+  public static final String PAGES_PAGED_OUT = "pagesPagedOut";
+  public static final String PAGES_SWAPPED_IN = "pagesSwappedIn";
+  public static final String PAGES_SWAPPED_OUT = "pagesSwappedOut";
+  public static final String DISK_READS_COMPLETED = "diskReadsCompleted";
+  public static final String DISK_READS_MERGED = "diskReadsMerged";
+  public static final String DISK_BYTES_READ = "diskBytesRead";
+  public static final String DISK_TIME_READING = "diskTimeReading";
+  public static final String DISK_WRITES_COMPLETED = "diskWritesCompleted";
+  public static final String DISK_WRITES_MERGED = "diskWritesMerged";
+  public static final String DISK_BYTES_WRITTEN = "diskBytesWritten";
+  public static final String DISK_TIME_WRITING = "diskTimeWriting";
+  public static final String DISK_OPS_IN_PROGRESS = "diskOpsInProgress";
+  public static final String DISK_TIME_IN_PROGRESS = "diskTimeInProgress";
+  public static final String DISK_TIME = "diskTime";
+  public static final String TCP_EXT_SYN_COOKIES_RECV = "tcpExtSynCookiesRecv";
+  public static final String TCP_EXT_SYN_COOKIES_SENT = "tcpExtSynCookiesSent";
+  public static final String TCP_EXT_LISTEN_DROPS = "tcpExtListenDrops";
+  public static final String TCP_EXT_LISTEN_OVERFLOWS = "tcpExtListenOverflows";
+
+  public static final String LOAD_AVERAGE_1 = "loadAverage1";
+  public static final String LOAD_AVERAGE_15 = "loadAverage15";
+  public static final String LOAD_AVERAGE_5 = "loadAverage5";
+
   static {
     StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
     myType = f.createType("LinuxSystemStats", "Statistics on a Linux machine.",
         new StatisticDescriptor[] {
-            f.createLongGauge("allocatedSwap",
+            f.createLongGauge(ALLOCATED_SWAP,
                 "The number of megabytes of swap space have actually been written to. Swap space must be reserved before it can be allocated.",
                 "megabytes"),
-            f.createLongGauge("bufferMemory",
+            f.createLongGauge(BUFFER_MEMORY,
                 "The number of megabytes of memory allocated to buffers.", "megabytes"),
-            f.createLongGauge("sharedMemory",
+            f.createLongGauge(SHARED_MEMORY,
                 "The number of megabytes of shared memory on the machine.", "megabytes", true),
-            f.createLongGauge("cpuActive",
+            f.createLongGauge(CPU_ACTIVE,
                 "The percentage of the total available time that has been used in a non-idle state.",
                 "%"),
-            f.createLongGauge("cpuIdle",
+            f.createLongGauge(CPU_IDLE,
                 "The percentage of the total available time that has been spent sleeping.", "%",
                 true),
-            f.createLongGauge("cpuNice",
+            f.createLongGauge(CPU_NICE,
                 "The percentage of the total available time that has been used to execute user code in processes with low priority.",
                 "%"),
-            f.createLongGauge("cpuSystem",
+            f.createLongGauge(CPU_SYSTEM,
                 "The percentage of the total available time that has been used to execute system (i.e. kernel) code.",
                 "%"),
-            f.createLongGauge("cpuUser",
+            f.createLongGauge(CPU_USER,
                 "The percentage of the total available time that has been used to execute user code.",
                 "%"),
-            f.createLongGauge("iowait",
+            f.createLongGauge(IOWAIT,
                 "The percentage of the total available time that has been used to wait for I/O to complete.",
                 "%"),
-            f.createLongGauge("irq",
+            f.createLongGauge(IRQ,
                 "The percentage of the total available time that has been used servicing  interrupts.",
                 "%"),
-            f.createLongGauge("softirq",
+            f.createLongGauge(SOFTIRQ,
                 "The percentage of the total available time that has been used servicing softirqs.",
                 "%"),
-            f.createLongGauge("cpus", "The number of online cpus on the local machine.", "items"),
-            f.createLongGauge("freeMemory",
+            f.createLongGauge(CPUS, "The number of online cpus on the local machine.", "items"),
+            f.createLongGauge(FREE_MEMORY,
                 "The number of megabytes of unused memory on the machine.", "megabytes", true),
-            f.createLongGauge("physicalMemory",
+            f.createLongGauge(PHYSICAL_MEMORY,
                 "The actual amount of total physical memory on the machine.", "megabytes", true),
-            f.createLongGauge("processes",
+            f.createLongGauge(PROCESSES,
                 "The number of processes in the computer at the time of data collection.  Notice that this is an instantaneous count, not an average over the time interval.  Each process represents the running of a program.",
                 "processes"),
-            f.createLongGauge("unallocatedSwap",
+            f.createLongGauge(UNALLOCATED_SWAP,
                 "The number of megabytes of swap space that have not been allocated.", "megabytes",
                 true),
-            f.createLongGauge("cachedMemory",
+            f.createLongGauge(CACHED_MEMORY,
                 "The number of megabytes of memory used for the file system cache.", "megabytes",
                 true),
-            f.createLongGauge("dirtyMemory",
+            f.createLongGauge(DIRTY_MEMORY,
                 "The number of megabytes of memory in the file system cache that need to be written.",
                 "megabytes", true),
-            f.createLongGauge("cpuNonUser",
+            f.createLongGauge(CPU_NON_USER,
                 "The percentage of total available time that has been used to execute non-user code.(includes system, iowait, irq, softirq etc.)",
                 "%"),
-            f.createLongGauge("cpuSteal",
+            f.createLongGauge(CPU_STEAL,
                 "Steal time is the amount of time the operating system wanted to execute, but was not allowed to by the hypervisor.",
                 "%"),
-            f.createLongGauge("soMaxConn",
+            f.createLongGauge(SO_MAX_CONN,
                 "Maximum TCP/IP server socket connection request backlog",
                 "connection requests"),
 
-            f.createLongCounter("loopbackPackets",
+            f.createLongCounter(LOOPBACK_PACKETS,
                 "The number of network packets sent (or received) on the loopback interface",
                 "packets", false),
-            f.createLongCounter("loopbackBytes",
+            f.createLongCounter(LOOPBACK_BYTES,
                 "The number of network bytes sent (or received) on the loopback interface", "bytes",
                 false),
-            f.createLongCounter("recvPackets",
+            f.createLongCounter(RECV_PACKETS,
                 "The total number of network packets received (excluding loopback)", "packets",
                 false),
-            f.createLongCounter("recvBytes",
+            f.createLongCounter(RECV_BYTES,
                 "The total number of network bytes received (excluding loopback)", "bytes", false),
             f.createLongCounter("recvErrors", "The total number of network receive errors",
                 "errors", false),
-            f.createLongCounter("recvDrops", "The total number network receives dropped", "packets",
+            f.createLongCounter(RECV_DROPS, "The total number network receives dropped", "packets",
                 false),
-            f.createLongCounter("xmitPackets",
+            f.createLongCounter(XMIT_PACKETS,
                 "The total number of network packets transmitted (excluding loopback)", "packets",
                 false),
-            f.createLongCounter("xmitBytes",
+            f.createLongCounter(XMIT_BYTES,
                 "The total number of network bytes transmitted (excluding loopback)", "bytes",
                 false),
-            f.createLongCounter("xmitErrors", "The total number of network transmit errors",
+            f.createLongCounter(XMIT_ERRORS, "The total number of network transmit errors",
                 "errors", false),
-            f.createLongCounter("xmitDrops", "The total number of network transmits dropped",
+            f.createLongCounter(XMIT_DROPS, "The total number of network transmits dropped",
                 "packets", false),
-            f.createLongCounter("xmitCollisions", "The total number of network transmit collisions",
+            f.createLongCounter(XMIT_COLLISIONS, "The total number of network transmit collisions",
                 "collisions", false),
-            f.createLongCounter("contextSwitches",
+            f.createLongCounter(CONTEXT_SWITCHES,
                 "The total number of context switches from one thread to another on the computer.  Thread switches can occur either inside of a single process or across processes.  A thread switch may be caused either by one thread asking another for information, or by a thread being preempted by another, higher priority thread becoming ready to run.",
                 "operations", false),
-            f.createLongCounter("processCreates",
+            f.createLongCounter(PROCESS_CREATES,
                 "The total number of times a process has been created.", "operations", false),
-            f.createLongCounter("pagesPagedIn",
+            f.createLongCounter(PAGES_PAGED_IN,
                 "The total number of pages that have been brought into memory from disk by the operating system's memory manager.",
                 "pages", false),
-            f.createLongCounter("pagesPagedOut",
+            f.createLongCounter(PAGES_PAGED_OUT,
                 "The total number of pages that have been flushed from memory to disk by the operating system's memory manager.",
                 "pages", false),
-            f.createLongCounter("pagesSwappedIn",
+            f.createLongCounter(PAGES_SWAPPED_IN,
                 "The total number of swap pages that have been read in from disk by the operating system's memory manager.",
                 "pages", false),
-            f.createLongCounter("pagesSwappedOut",
+            f.createLongCounter(PAGES_SWAPPED_OUT,
                 "The total number of swap pages that have been written out to disk by the operating system's memory manager.",
                 "pages", false),
-            f.createLongCounter("diskReadsCompleted",
+            f.createLongCounter(DISK_READS_COMPLETED,
                 "The total number disk read operations completed successfully", "ops"),
-            f.createLongCounter("diskReadsMerged",
+            f.createLongCounter(DISK_READS_MERGED,
                 "The total number disk read operations that were able to be merge with adjacent reads for efficiency",
                 "ops"),
-            f.createLongCounter("diskBytesRead",
+            f.createLongCounter(DISK_BYTES_READ,
                 "The total number bytes read from disk successfully", "bytes"),
-            f.createLongCounter("diskTimeReading",
+            f.createLongCounter(DISK_TIME_READING,
                 "The total number of milliseconds spent reading from disk", "milliseconds"),
-            f.createLongCounter("diskWritesCompleted",
+            f.createLongCounter(DISK_WRITES_COMPLETED,
                 "The total number disk write operations completed successfully", "ops"),
-            f.createLongCounter("diskWritesMerged",
+            f.createLongCounter(DISK_WRITES_MERGED,
                 "The total number disk write operations that were able to be merge with adjacent reads for efficiency",
                 "ops"),
-            f.createLongCounter("diskBytesWritten",
+            f.createLongCounter(DISK_BYTES_WRITTEN,
                 "The total number bytes written to disk successfully", "bytes"),
-            f.createLongCounter("diskTimeWriting",
+            f.createLongCounter(DISK_TIME_WRITING,
                 "The total number of milliseconds spent writing to disk", "milliseconds"),
-            f.createLongGauge("diskOpsInProgress",
+            f.createLongGauge(DISK_OPS_IN_PROGRESS,
                 "The current number of disk operations in progress", "ops"),
-            f.createLongCounter("diskTimeInProgress",
+            f.createLongCounter(DISK_TIME_IN_PROGRESS,
                 "The total number of milliseconds spent with disk ops in progress", "milliseconds"),
-            f.createLongCounter("diskTime",
+            f.createLongCounter(DISK_TIME,
                 "The total number of milliseconds that measures both completed disk operations and any accumulating backlog of in progress ops.",
                 "milliseconds"),
-            f.createLongCounter("tcpExtSynCookiesRecv",
+            f.createLongCounter(TCP_EXT_SYN_COOKIES_RECV,
                 "The number of TCP/IP SYN cookies received due to a full server socket backlog.  "
                     + "If this is non-zero consider disabling SYN cookies because they form sub-optimal connections.",
                 "cookies received"),
-            f.createLongCounter("tcpExtSynCookiesSent",
+            f.createLongCounter(TCP_EXT_SYN_COOKIES_SENT,
                 "The number of TCP/IP SYN cookies sent due to a full server socket backlog.  "
                     + "If this is non-zero consider disabling SYN cookies because they form sub-optimal connections.",
                 "cookies sent"),
-            f.createLongCounter("tcpExtListenDrops",
+            f.createLongCounter(TCP_EXT_LISTEN_DROPS,
                 "The number of TCP/IP connection requests that have been dropped due to a full backlog.  "
                     + "If this is large increase the OS SOMAXCONN setting and increase socket backlog settings",
                 "requests"),
-            f.createLongCounter("tcpExtListenOverflows",
+            f.createLongCounter(TCP_EXT_LISTEN_OVERFLOWS,
                 "The number of TCP/IP connection requests that could not be queued due to a small backlog.  "
                     + "These are either dropped (tcpExtListenDrops) or handled via cookies (tcpSynCookiesSent).  "
                     + "In either case you should consider increasing SOMAXCONN and increasing backlog settings.",
                 "requests"),
 
 
-            f.createDoubleGauge("loadAverage1",
+            f.createDoubleGauge(LOAD_AVERAGE_1,
                 "The average number of threads in the run queue or waiting for disk I/O over the last minute.",
                 "threads"),
-            f.createDoubleGauge("loadAverage15",
+            f.createDoubleGauge(LOAD_AVERAGE_15,
                 "The average number of threads in the run queue or waiting for disk I/O over the last fifteen minutes.",
                 "threads"),
-            f.createDoubleGauge("loadAverage5",
+            f.createDoubleGauge(LOAD_AVERAGE_5,
                 "The average number of threads in the run queue or waiting for disk I/O over the last five minutes.",
                 "threads"),});
 
-    allocatedSwapLONG = myType.nameToId("allocatedSwap");
-    bufferMemoryLONG = myType.nameToId("bufferMemory");
-    sharedMemoryLONG = myType.nameToId("sharedMemory");
-    cpuActiveLONG = myType.nameToId("cpuActive");
-    cpuIdleLONG = myType.nameToId("cpuIdle");
-    cpuNiceLONG = myType.nameToId("cpuNice");
-    cpuSystemLONG = myType.nameToId("cpuSystem");
-    cpuUserLONG = myType.nameToId("cpuUser");
-    iowaitLONG = myType.nameToId("iowait");
-    irqLONG = myType.nameToId("irq");
-    softirqLONG = myType.nameToId("softirq");
-    cpusLONG = myType.nameToId("cpus");
-    freeMemoryLONG = myType.nameToId("freeMemory");
-    physicalMemoryLONG = myType.nameToId("physicalMemory");
-    processesLONG = myType.nameToId("processes");
-    unallocatedSwapLONG = myType.nameToId("unallocatedSwap");
-    cachedMemoryLONG = myType.nameToId("cachedMemory");
-    dirtyMemoryLONG = myType.nameToId("dirtyMemory");
-    cpuNonUserLONG = myType.nameToId("cpuNonUser");
-    cpuStealLONG = myType.nameToId("cpuSteal");
-    tcpSOMaxConnLONG = myType.nameToId("soMaxConn");
-    loopbackPacketsLONG = myType.nameToId("loopbackPackets");
-    loopbackBytesLONG = myType.nameToId("loopbackBytes");
-    recvPacketsLONG = myType.nameToId("recvPackets");
-    recvBytesLONG = myType.nameToId("recvBytes");
-    recvErrorsLONG = myType.nameToId("recvErrors");
-    recvDropsLONG = myType.nameToId("recvDrops");
-    xmitPacketsLONG = myType.nameToId("xmitPackets");
-    xmitBytesLONG = myType.nameToId("xmitBytes");
-    xmitErrorsLONG = myType.nameToId("xmitErrors");
-    xmitDropsLONG = myType.nameToId("xmitDrops");
-    xmitCollisionsLONG = myType.nameToId("xmitCollisions");
-    contextSwitchesLONG = myType.nameToId("contextSwitches");
-    processCreatesLONG = myType.nameToId("processCreates");
-    pagesPagedInLONG = myType.nameToId("pagesPagedIn");
-    pagesPagedOutLONG = myType.nameToId("pagesPagedOut");
-    pagesSwappedInLONG = myType.nameToId("pagesSwappedIn");
-    pagesSwappedOutLONG = myType.nameToId("pagesSwappedOut");
-    readsCompletedLONG = myType.nameToId("diskReadsCompleted");
-    readsMergedLONG = myType.nameToId("diskReadsMerged");
-    bytesReadLONG = myType.nameToId("diskBytesRead");
-    timeReadingLONG = myType.nameToId("diskTimeReading");
-    writesCompletedLONG = myType.nameToId("diskWritesCompleted");
-    writesMergedLONG = myType.nameToId("diskWritesMerged");
-    bytesWrittenLONG = myType.nameToId("diskBytesWritten");
-    timeWritingLONG = myType.nameToId("diskTimeWriting");
-    iosInProgressLONG = myType.nameToId("diskOpsInProgress");
-    timeIosInProgressLONG = myType.nameToId("diskTimeInProgress");
-    ioTimeLONG = myType.nameToId("diskTime");
-    tcpExtSynCookiesRecvLONG = myType.nameToId("tcpExtSynCookiesRecv");
-    tcpExtSynCookiesSentLONG = myType.nameToId("tcpExtSynCookiesSent");
-    tcpExtListenDropsLONG = myType.nameToId("tcpExtListenDrops");
-    tcpExtListenOverflowsLONG = myType.nameToId("tcpExtListenOverflows");
+    allocatedSwapLONG = myType.nameToId(ALLOCATED_SWAP);
+    bufferMemoryLONG = myType.nameToId(BUFFER_MEMORY);
+    sharedMemoryLONG = myType.nameToId(SHARED_MEMORY);
+    cpuActiveLONG = myType.nameToId(CPU_ACTIVE);
+    cpuIdleLONG = myType.nameToId(CPU_IDLE);
+    cpuNiceLONG = myType.nameToId(CPU_NICE);
+    cpuSystemLONG = myType.nameToId(CPU_SYSTEM);
+    cpuUserLONG = myType.nameToId(CPU_USER);
+    iowaitLONG = myType.nameToId(IOWAIT);
+    irqLONG = myType.nameToId(IRQ);
+    softirqLONG = myType.nameToId(SOFTIRQ);
+    cpusLONG = myType.nameToId(CPUS);
+    freeMemoryLONG = myType.nameToId(FREE_MEMORY);
+    physicalMemoryLONG = myType.nameToId(PHYSICAL_MEMORY);
+    processesLONG = myType.nameToId(PROCESSES);
+    unallocatedSwapLONG = myType.nameToId(UNALLOCATED_SWAP);
+    cachedMemoryLONG = myType.nameToId(CACHED_MEMORY);
+    dirtyMemoryLONG = myType.nameToId(DIRTY_MEMORY);
+    cpuNonUserLONG = myType.nameToId(CPU_NON_USER);
+    cpuStealLONG = myType.nameToId(CPU_STEAL);
+    tcpSOMaxConnLONG = myType.nameToId(SO_MAX_CONN);
+    loopbackPacketsLONG = myType.nameToId(LOOPBACK_PACKETS);
+    loopbackBytesLONG = myType.nameToId(LOOPBACK_BYTES);
+    recvPacketsLONG = myType.nameToId(RECV_PACKETS);
+    recvBytesLONG = myType.nameToId(RECV_BYTES);
+    recvErrorsLONG = myType.nameToId(RECV_ERRORS);
+    recvDropsLONG = myType.nameToId(RECV_DROPS);
+    xmitPacketsLONG = myType.nameToId(XMIT_PACKETS);
+    xmitBytesLONG = myType.nameToId(XMIT_BYTES);
+    xmitErrorsLONG = myType.nameToId(XMIT_ERRORS);
+    xmitDropsLONG = myType.nameToId(XMIT_DROPS);
+    xmitCollisionsLONG = myType.nameToId(XMIT_COLLISIONS);
+    contextSwitchesLONG = myType.nameToId(CONTEXT_SWITCHES);
+    processCreatesLONG = myType.nameToId(PROCESS_CREATES);
+    pagesPagedInLONG = myType.nameToId(PAGES_PAGED_IN);
+    pagesPagedOutLONG = myType.nameToId(PAGES_PAGED_OUT);
+    pagesSwappedInLONG = myType.nameToId(PAGES_SWAPPED_IN);
+    pagesSwappedOutLONG = myType.nameToId(PAGES_SWAPPED_OUT);
+    readsCompletedLONG = myType.nameToId(DISK_READS_COMPLETED);
+    readsMergedLONG = myType.nameToId(DISK_READS_MERGED);
+    bytesReadLONG = myType.nameToId(DISK_BYTES_READ);
+    timeReadingLONG = myType.nameToId(DISK_TIME_READING);
+    writesCompletedLONG = myType.nameToId(DISK_WRITES_COMPLETED);
+    writesMergedLONG = myType.nameToId(DISK_WRITES_MERGED);
+    bytesWrittenLONG = myType.nameToId(DISK_BYTES_WRITTEN);
+    timeWritingLONG = myType.nameToId(DISK_TIME_WRITING);
+    iosInProgressLONG = myType.nameToId(DISK_OPS_IN_PROGRESS);
+    timeIosInProgressLONG = myType.nameToId(DISK_TIME_IN_PROGRESS);
+    ioTimeLONG = myType.nameToId(DISK_TIME);
+    tcpExtSynCookiesRecvLONG = myType.nameToId(TCP_EXT_SYN_COOKIES_RECV);
+    tcpExtSynCookiesSentLONG = myType.nameToId(TCP_EXT_SYN_COOKIES_SENT);
+    tcpExtListenDropsLONG = myType.nameToId(TCP_EXT_LISTEN_DROPS);
+    tcpExtListenOverflowsLONG = myType.nameToId(TCP_EXT_LISTEN_OVERFLOWS);
 
-    loadAverage1DOUBLE = myType.nameToId("loadAverage1");
-    loadAverage15DOUBLE = myType.nameToId("loadAverage15");
-    loadAverage5DOUBLE = myType.nameToId("loadAverage5");
+    loadAverage1DOUBLE = myType.nameToId(LOAD_AVERAGE_1);
+    loadAverage15DOUBLE = myType.nameToId(LOAD_AVERAGE_15);
+    loadAverage5DOUBLE = myType.nameToId(LOAD_AVERAGE_5);
   }
 
   private LinuxSystemStats() {