diff options
Diffstat (limited to 'src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp')
-rw-r--r-- | src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp | 57 |
1 files changed, 47 insertions, 10 deletions
diff --git a/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp index 1eeef5b5..58c5fd3b 100644 --- a/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp +++ b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp @@ -6,7 +6,7 @@ */ /* - * Copyright (C) 2006-2012 Oracle Corporation + * Copyright (C) 2006-2013 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -21,8 +21,10 @@ #include "AutoCaller.h" #include "Logging.h" #include "netif.h" -#include "Performance.h" -#include "PerformanceImpl.h" +#ifdef VBOX_WITH_RESOURCE_USAGE_API +# include "Performance.h" +# include "PerformanceImpl.h" +#endif #include <iprt/cpp/utils.h> @@ -69,7 +71,7 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, Bstr aShortName, Guid aG aInterfaceName.raw(), aGuid.toString().c_str())); ComAssertRet(!aInterfaceName.isEmpty(), E_INVALIDARG); - ComAssertRet(!aGuid.isEmpty(), E_INVALIDARG); + ComAssertRet(aGuid.isValid(), E_INVALIDARG); /* Enclose the state transition NotReady->InInit->Ready */ AutoInitSpan autoInitSpan(this); @@ -77,6 +79,7 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, Bstr aShortName, Guid aG unconst(mInterfaceName) = aInterfaceName; unconst(mNetworkName) = composeNetworkName(aShortName); + unconst(mShortName) = aShortName; unconst(mGuid) = aGuid; mIfType = ifType; @@ -86,22 +89,36 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, Bstr aShortName, Guid aG return S_OK; } +#ifdef VBOX_WITH_RESOURCE_USAGE_API + void HostNetworkInterface::registerMetrics(PerformanceCollector *aCollector, ComPtr<IUnknown> objptr) { LogFlowThisFunc(("mShortName={%ls}, mInterfaceName={%ls}, mGuid={%s}, mSpeedMbits=%u\n", mShortName.raw(), mInterfaceName.raw(), mGuid.toString().c_str(), m.speedMbits)); pm::CollectorHAL *hal = aCollector->getHAL(); /* Create sub metrics */ - Utf8StrFmt strName("Net/%ls/Load", mShortName.raw()); - pm::SubMetric *networkLoadRx = new pm::SubMetric(strName + "/Rx", + Utf8StrFmt strName("Net/%ls", mShortName.raw()); + pm::SubMetric *networkLoadRx = new pm::SubMetric(strName + "/Load/Rx", "Percentage of network interface receive bandwidth used."); - pm::SubMetric *networkLoadTx = new pm::SubMetric(strName + "/Tx", + pm::SubMetric *networkLoadTx = new pm::SubMetric(strName + "/Load/Tx", "Percentage of network interface transmit bandwidth used."); + pm::SubMetric *networkLinkSpeed = new pm::SubMetric(strName + "/LinkSpeed", + "Physical link speed."); /* Create and register base metrics */ - pm::BaseMetric *networkLoad = new pm::HostNetworkLoadRaw(hal, objptr, strName, Utf8Str(mShortName), Utf8Str(mInterfaceName), m.speedMbits, networkLoadRx, networkLoadTx); + pm::BaseMetric *networkSpeed = new pm::HostNetworkSpeed(hal, objptr, strName + "/LinkSpeed", Utf8Str(mShortName), Utf8Str(mInterfaceName), m.speedMbits, networkLinkSpeed); + aCollector->registerBaseMetric(networkSpeed); + pm::BaseMetric *networkLoad = new pm::HostNetworkLoadRaw(hal, objptr, strName + "/Load", Utf8Str(mShortName), Utf8Str(mInterfaceName), m.speedMbits, networkLoadRx, networkLoadTx); aCollector->registerBaseMetric(networkLoad); + aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed, 0)); + aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed, + new pm::AggregateAvg())); + aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed, + new pm::AggregateMin())); + aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed, + new pm::AggregateMax())); + aCollector->registerMetric(new pm::Metric(networkLoad, networkLoadRx, 0)); aCollector->registerMetric(new pm::Metric(networkLoad, networkLoadRx, new pm::AggregateAvg())); @@ -123,11 +140,13 @@ void HostNetworkInterface::unregisterMetrics(PerformanceCollector *aCollector, C { LogFlowThisFunc(("mShortName={%ls}, mInterfaceName={%ls}, mGuid={%s}\n", mShortName.raw(), mInterfaceName.raw(), mGuid.toString().c_str())); - Utf8StrFmt name("Net/%ls/Load", mShortName.raw()); + Utf8StrFmt name("Net/%ls", mShortName.raw()); aCollector->unregisterMetricsFor(objptr, name + "/*"); aCollector->unregisterBaseMetricsFor(objptr, name); } +#endif /* VBOX_WITH_RESOURCE_USAGE_API */ + #ifdef VBOX_WITH_HOSTNETIF_API HRESULT HostNetworkInterface::updateConfig() @@ -172,7 +191,7 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, HostNetworkInterfaceType // aInterfaceName.raw(), aGuid.toString().raw())); // ComAssertRet(aInterfaceName, E_INVALIDARG); -// ComAssertRet(!aGuid.isEmpty(), E_INVALIDARG); +// ComAssertRet(aGuid.isValid(), E_INVALIDARG); ComAssertRet(pIf, E_INVALIDARG); /* Enclose the state transition NotReady->InInit->Ready */ @@ -237,6 +256,24 @@ STDMETHODIMP HostNetworkInterface::COMGETTER(Name)(BSTR *aInterfaceName) } /** + * Returns the short name of the host network interface. + * + * @returns COM status code + * @param aShortName address of result pointer + */ +STDMETHODIMP HostNetworkInterface::COMGETTER(ShortName)(BSTR *aShortName) +{ + CheckComArgOutPointerValid(aShortName); + + AutoCaller autoCaller(this); + if (FAILED(autoCaller.rc())) return autoCaller.rc(); + + mShortName.cloneTo(aShortName); + + return S_OK; +} + +/** * Returns the GUID of the host network interface. * * @returns COM status code |