<?php

class Netzlast {
    private $data;
    private $devices;
    private $htDevice;
    
    function __construct() {
        $RawData = preg_replace('/ +/', ' ', trim( file_get_contents( '/proc/net/dev' ) ) );
        $lines = explode( "\n", $RawData );
        $dummy = array_shift( $lines );
        $dummy = array_shift( $lines );
        $htDevice['name'] = '';
        $htDevice['traffic'] = -1;
        
        $showAllDevices = false;
        
        if ( isset( $_GET['device'] ) and $_GET['device'] and 'all' !=$_GET['device'] ) {
            $showDevices = explode( ',', $_GET['device'] );
        } else {
            $showAllDevices = true;
        }
        
        $devices = [];
        foreach ( $lines as $line ) {
            $tupels = explode(' ', trim( $line ) );
            $tupels[0] = preg_replace( '/:$/', '', $tupels[0] );
            if ( $showAllDevices or in_array ( $tupels[0], $showDevices ) ) {
                $out[$tupels[0]] = [];
                $out[$tupels[0]]['RX'] = $tupels[1];
                $out[$tupels[0]]['TX'] = $tupels[9];
            }
            if ( ( 0 < $tupels[1] ) and ( $tupels[9] ) ) {
                $devices[] = $tupels[0];
            }
            $traffic = $tupels[1] + $tupels[9];
            if ( $traffic > $htDevice['traffic'] ) {
                $htDevice['name'] = $tupels[0];
                $htDevice['traffic'] = $traffic;
            }

        }
        $out['time']=microtime(true);
        $this -> data = $out;
        $this -> devices = $devices;
        $this -> htDevice = $htDevice['name'];
    }
    
    
    function getNetzlastAsJson () {
        return json_encode( $this -> data );
    }
    
    function getNetzlastAsArray () {
        return $this -> data;
    }    
    
    function getDevicesAsJson () {
        return json_encode( $this -> devices );
    }
    
    function getDevicesAsList () {
        return implode( ',', $this -> devices );
    }
    
    function getDevicesAsArray () {
        return $this -> devices;
    }
    
    function getHighTrafficDevice() {
        return $this -> htDevice;
    }
    
}