Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2015 Attribyte, LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and limitations under the License.
  *
  */
 
 package org.attribyte.essem.sysmon.linux;
 
 
 import java.io.File;
 import java.util.List;
 import java.util.Map;

Establish metrics for all network interfaces by parsing /proc/net/dev.

Schedule an instance to run periodically to gather statistics for each interface.

See also:
proc.5
 
 public class NetworkDevices implements Runnable {

   
A network interface.
 
    public static class Interface implements MetricSet {
 
       private Interface(final String namefinal Iterable<StringkeysIterator<StringlastRecordedValues) {
          this. = name;
          ImmutableList.Builder<MetermetersBuilder = ImmutableList.builder();
          ImmutableMap.Builder<StringMetricmapBuilder = ImmutableMap.builder();
          for(String key : keys) {
             Meter meter = new Meter();
             metersBuilder.add(meter);
             mapBuilder.put(keymeter);
          }
          this. = metersBuilder.build();
          this. = mapBuilder.build();
          this. = Lists.newArrayListWithCapacity(.size());
          while(lastRecordedValues.hasNext()) {
             this..add(new BigInteger(lastRecordedValues.next()));
          }
       }
 
       @Override
       public int hashCode() {
          return .hashCode();
       }
 
       @Override
       public boolean equals(final Object other) {
          return other instanceof Interface && .equals(other);
       }
 
       @Override
       public Map<StringMetricgetMetrics() {
          return ;
       }
 
       private void mark(final Iterator<StringnewValues) {
          List<BigIntegernextRecordedValues = Lists.newArrayListWithCapacity(.size());
          Iterator<BigIntegeroldValIter = .iterator();
          while(newValues.hasNext()) {
             Iterator<MetermeterIter = .iterator();
             BigInteger oldVal = oldValIter.next();
             BigInteger newVal = new BigInteger(newValues.next());
             nextRecordedValues.add(newVal);
             meterIter.next().mark(newVal.subtract(oldVal).longValue());
          }
          this. = nextRecordedValues;
       }

      
The interface name.
 
       public final String name;
 
      private final ImmutableMap<StringMetricmetricMap;
      private final ImmutableList<Metermeters;
      private List<BigIntegerlastRecordedValues;
   }
   /*
   Inter-|   Receive                                                |  Transmit
    face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
       lo:  456216    3221    0    0    0     0          0         0   456216    3221    0    0    0     0       0          0
    wlan0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
     eth0: 33000242   44804    0    0    0     0          0      1111  5700898   26543    0    0    0     0       0          0
    */

   
Enumerate all network devices.

Throws:
java.io.IOException on system read error.
   public NetworkDevices() throws IOException {
      List<Stringlines = Files.asCharSource(new File(), .).readLines();
      if(lines.size() < 2) throw new IOException("Unknown format for '" +  + "'");
      Iterator<StringlinesIter = lines.iterator();
      linesIter.next(); //Ignore
      Iterator<Stringsections = .split(linesIter.next()).iterator();
      if(!sections.hasNext()) throw new IOException("Unknown format for '" +  + "'");
      sections.next(); //Ignore 'face'
      if(!sections.hasNext()) throw new IOException("Unknown format for '" +  + "'");
      List<StringreceiveKeys = Lists.newArrayList(.split(sections.next()));
      if(!sections.hasNext()) throw new IOException("Unknown format for '" +  + "'");
      List<StringtransmitKeys = Lists.newArrayList(.split(sections.next()));
      List<Stringkeys = Lists.newArrayListWithCapacity(receiveKeys.size() + transmitKeys.size());
      for(String key : receiveKeyskeys.add("receive." + key);
      for(String key : transmitKeyskeys.add("transmit." + key);
      ImmutableMap.Builder<StringInterfaceinterfacesBuilder = ImmutableMap.builder();
      while(linesIter.hasNext()) {
         Iterator<Stringvalues = .split(linesIter.next()).iterator();
         String name = cleanName(values.next());
         interfacesBuilder.put(namenew Interface(namekeysvalues));
      }
      this. = interfacesBuilder.build();
   }
   public void run() {
      try {
         File pathFile = new File();
         if(!pathFile.exists()) return;
         Iterator<StringlinesIter = Files.asCharSource(new File(), .).readLines().iterator();
         linesIter.next();
         linesIter.next();
         while(linesIter.hasNext()) {
            Iterator<Stringvalues = .split(linesIter.next()).iterator();
            String name = cleanName(values.next());
            Interface iface = .get(name);
            if(iface != null) {
               iface.mark(values);
            }
         }
      } catch(IOException ioe) {
         ioe.printStackTrace();
      }
   }

   
An immutable map of all interfaces (vs name).
   public final ImmutableMap<StringInterfaceinterfaces;
   private String cleanName(final String name) {
      if(name.endsWith(":")) {
         return name.substring(0, name.length() - 1).replace(':''.');
      } else {
         return name.replace(':''.');
      }
   }
   private static final Splitter sectionSplitter = Splitter.on('|').trimResults();
   private static final Splitter tokenSplitter = Splitter.on(.).trimResults().omitEmptyStrings();
   private static final String PATH = "/proc/net/dev";
New to GrepCode? Check out our FAQ X