Skip to content

Commit

Permalink
WindowsNetworkProvider is now fully functional
Browse files Browse the repository at this point in the history
  • Loading branch information
Christian committed Feb 15, 2018
1 parent df2ebe6 commit b1eb3b6
Show file tree
Hide file tree
Showing 9 changed files with 50 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,9 @@ protected DefaultDiskProvider(OperatingSystem operatingSystem, HardwareAbstracti
this.operatingSystem = operatingSystem;
this.hal = hal;
this.speedMeasurementManager = speedMeasurementManager;
register();
}

protected void register() {
public void register() {
for (HWDiskStore store : hal.getDiskStores()) {
speedMeasurementManager.register(new DiskSpeedSource(store.getName(), hal));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,11 +248,6 @@ public Optional<NetworkInterfaceData> getNetworkInterfaceById(String id) {
return defaultNetworkProvider.getNetworkInterfaceById(id);
}

@Override
public Optional<NetworkInterfaceSpeed> getNetworkInterfaceSpeed(String id) {
return defaultNetworkProvider.getSpeed(id);
}

@Override
public String[] getNetworkInterfaceNames() {
return defaultNetworkProvider.getNetworkInterfaceNames();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,17 @@ public class DefaultNetworkProvider {
private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(DefaultNetworkProvider.class);

private static final int BYTE_TO_BIT = 8;
private static final NetworkInterfaceSpeed EMPTY_INTERFACE_SPEED = new NetworkInterfaceSpeed(0, 0);
protected static final NetworkInterfaceSpeed EMPTY_INTERFACE_SPEED = new NetworkInterfaceSpeed(0, 0);

private final HardwareAbstractionLayer hal;
private final SpeedMeasurementManager speedMeasurementManager;

protected DefaultNetworkProvider(HardwareAbstractionLayer hal, SpeedMeasurementManager speedMeasurementManager) {
this.hal = hal;
this.speedMeasurementManager = speedMeasurementManager;
register();
}

protected void register() {
public void register() {
List<SpeedMeasurementManager.SpeedSource> collect = Arrays.stream(hal.getNetworkIFs()).map(n -> new SpeedMeasurementManager.SpeedSource() {
@Override
public String getName() {
Expand All @@ -72,20 +71,20 @@ String[] getNetworkInterfaceNames(){
}

NetworkInterfaceData[] getAllNetworkInterfaces() {
return Arrays.stream(hal.getNetworkIFs()).map(n -> new NetworkInterfaceData(n, getSpeed(n.getName()).orElse(EMPTY_INTERFACE_SPEED))).toArray(NetworkInterfaceData[]::new);
return Arrays.stream(hal.getNetworkIFs()).map(n -> new NetworkInterfaceData(n, getSpeed(n.getName()))).toArray(NetworkInterfaceData[]::new);
}

Optional<NetworkInterfaceData> getNetworkInterfaceById(String id) {
return Arrays.stream(hal.getNetworkIFs()).filter(n -> id.equals(n.getName())).map(nic -> new NetworkInterfaceData(nic, getSpeed(nic.getName()).orElse(EMPTY_INTERFACE_SPEED))).findFirst();
return Arrays.stream(hal.getNetworkIFs()).filter(n -> id.equals(n.getName())).map(nic -> new NetworkInterfaceData(nic, getSpeed(nic.getName()))).findFirst();
}

protected Optional<NetworkInterfaceSpeed> getSpeed(String id) {
protected NetworkInterfaceSpeed getSpeed(String id) {
Optional<NetworkIF> networkOptional = Arrays.stream(hal.getNetworkIFs()).filter(n -> id.equals(n.getName())).findAny();
if (networkOptional.isPresent()) {
NetworkIF networkIF = networkOptional.get();
return Optional.of(networkInterfaceSpeed(networkIF.getName()));
return networkInterfaceSpeed(networkIF.getName());
} else {
return Optional.empty();
return EMPTY_INTERFACE_SPEED;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,6 @@ public interface InfoProvider {

Optional<NetworkInterfaceData> getNetworkInterfaceById(String id);

Optional<NetworkInterfaceSpeed> getNetworkInterfaceSpeed(String id);

String[] getNetworkInterfaceNames();

ProcessesInfo processesInfo(OperatingSystem.ProcessSort sortBy, int limit);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,15 @@ public InfoProvider provide() {
case LINUX:
if (operatingSystem.getFamily().toLowerCase().contains(RASPBIAN_QUALIFIER)) {
LOGGER.info("Raspberry Pi detected");
infoProvider = new RaspbianLinuxInfoProvider(hal, operatingSystem, utils, new DefaultNetworkProvider(hal, speedMeasurementManager), new DefaultDiskProvider(operatingSystem, hal, speedMeasurementManager));
infoProvider = new RaspbianLinuxInfoProvider(hal, operatingSystem, utils, createDefaultNetworkProvider(), getDefaultDiskProvider());
}
break;
//falling through to default case
case MACOSX:
//https://github.com/Chris911/iStats
infoProvider = new DefaultInfoProvider(hal, operatingSystem, utils, new DefaultNetworkProvider(hal, speedMeasurementManager), new MacDiskProvider(operatingSystem, hal, speedMeasurementManager));
MacDiskProvider defaultDiskProvider = new MacDiskProvider(operatingSystem, hal, speedMeasurementManager);
defaultDiskProvider.register();
infoProvider = new DefaultInfoProvider(hal, operatingSystem, utils, createDefaultNetworkProvider(), defaultDiskProvider);
break;
case FREEBSD:
case SOLARIS:
Expand All @@ -84,9 +86,21 @@ public InfoProvider provide() {
break;
}
if (infoProvider == null) {
infoProvider = new DefaultInfoProvider(hal, operatingSystem, utils, new DefaultNetworkProvider(hal, speedMeasurementManager), new DefaultDiskProvider(operatingSystem, hal, speedMeasurementManager));
infoProvider = new DefaultInfoProvider(hal, operatingSystem, utils, createDefaultNetworkProvider(), getDefaultDiskProvider());
}
return infoProvider;
}

private DefaultDiskProvider getDefaultDiskProvider() {
DefaultDiskProvider defaultDiskProvider = new DefaultDiskProvider(operatingSystem, hal, speedMeasurementManager);
defaultDiskProvider.register();
return defaultDiskProvider;
}

private DefaultNetworkProvider createDefaultNetworkProvider() {
DefaultNetworkProvider defaultNetworkProvider = new DefaultNetworkProvider(hal, speedMeasurementManager);
defaultNetworkProvider.register();
return defaultNetworkProvider;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,4 @@ protected DiskSpeed diskSpeedForName(HWDiskStore diskStore, OSFileStore osFileSt
double readRate = driveInfo.getReadRate();
return new DiskSpeed((long) readRate, (long) writeRate);
}

@Override
protected void register() {
// don't
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -113,28 +113,6 @@ public Map<String, GpuHealth> gpuHealths() {
return gpus;
}

@Override
public Optional<NetworkInterfaceSpeed> getNetworkInterfaceSpeed(String id)
{
Optional<NetworkIF> networkOptional = Arrays.stream(hal.getNetworkIFs()).filter(n -> id.equals(n.getName())).findAny();
if(!networkOptional.isPresent()){
throw new NoSuchElementException(String.format("No NIC with id %s was found", id));
}
NetworkIF networkIF = networkOptional.get();

monitorManager.Update();
NetworkMonitor networkMonitor = monitorManager.getNetworkMonitor();
NicInfo[] nics = networkMonitor.getNics();
Optional<NicInfo> nicInfoOptional = Arrays.stream(nics).filter(n -> networkIF.getMacaddr().equals(n.getPhysicalAddress())).findAny();

if(!nicInfoOptional.isPresent()){
LOGGER.warn("Unable to find any OHM NicInfo matching with HW Address of {} for NIC {}. Defaulting to speed measurement.", networkIF.getMacaddr(), networkIF.getName());
return super.getNetworkInterfaceSpeed(id);
}
NicInfo nicInfo = nicInfoOptional.get();
return Optional.of(new NetworkInterfaceSpeed((long) (nicInfo.getInBandwidth().getValue() * 1000), (long) (nicInfo.getOutBandwidth().getValue() * 1000)));
}

private boolean initBridge() {
LOGGER.info("Enabling OHMJNIWrapper impl. Disable this in the configuration.yml (see README.md)");
Bridge.setDebug(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public WindowsNetworkProvider(HardwareAbstractionLayer hal, SpeedMeasurementMana
}

@Override
public Optional<NetworkInterfaceSpeed> getSpeed(String id)
public NetworkInterfaceSpeed getSpeed(String id)
{
Optional<NetworkIF> networkOptional = Arrays.stream(hal.getNetworkIFs()).filter(n -> id.equals(n.getName())).findAny();
if(!networkOptional.isPresent()){
Expand All @@ -40,19 +40,13 @@ public Optional<NetworkInterfaceSpeed> getSpeed(String id)
monitorManager.Update();
NetworkMonitor networkMonitor = monitorManager.getNetworkMonitor();
NicInfo[] nics = networkMonitor.getNics();
Optional<NicInfo> nicInfoOptional = Arrays.stream(nics).filter(n -> networkIF.getMacaddr().equals(n.getPhysicalAddress())).findAny();
Optional<NicInfo> nicInfoOptional = Arrays.stream(nics).filter(n -> networkIF.getMacaddr().equalsIgnoreCase(n.getPhysicalAddress())).findAny();

if(!nicInfoOptional.isPresent()){
LOGGER.warn("Unable to find any OHM NicInfo matching with HW Address of {} for NIC {}. Defaulting to speed measurement.", networkIF.getMacaddr(), networkIF.getName());
return super.getSpeed(id);
return EMPTY_INTERFACE_SPEED;
}
NicInfo nicInfo = nicInfoOptional.get();
return Optional.of(new NetworkInterfaceSpeed((long) (nicInfo.getInBandwidth().getValue() * 1000), (long) (nicInfo.getOutBandwidth().getValue() * 1000)));
}

@Override
protected void register() {
// don't
return new NetworkInterfaceSpeed((long) (nicInfo.getInBandwidth().getValue()), (long) (nicInfo.getOutBandwidth().getValue()));
}

public void setMonitorManager(MonitorManager monitorManager) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.krillsson.sysapi.core.windows;

import ohmwrapper.MonitorManager;
import org.junit.Before;
import oshi.hardware.HardwareAbstractionLayer;

import static org.junit.Assert.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class WindowsNetworkProviderTest {

MonitorManager monitorManager;
HardwareAbstractionLayer hal;

@Before
public void setUp() throws Exception {
monitorManager = mock(MonitorManager.class);
}
}

0 comments on commit b1eb3b6

Please sign in to comment.