Microsoft.SystemCenter.VirtualMachineManager.2016.Report.TimedPowerShell.ManagedHostPerformanceProvider (DataSourceModuleType)
Element properties:
Member Modules:
Overrideable Parameters:
Source Code:
<DataSourceModuleType ID="Microsoft.SystemCenter.VirtualMachineManager.2016.Report.TimedPowerShell.ManagedHostPerformanceProvider" Accessibility="Public" Batching="false">
<Configuration>
<IncludeSchemaTypes>
<SchemaType>System!System.ParamListSchema</SchemaType>
<SchemaType>System!System.ExpressionEvaluatorSchema</SchemaType>
<SchemaType>Windows!Microsoft.Windows.PowerShellSchema</SchemaType>
</IncludeSchemaTypes>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="IntervalSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Parameters" type="NamedParametersType" minOccurs="0" maxOccurs="1"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS1" TypeID="Microsoft.SystemCenter.VirtualMachineManager.2016.Report.TimedPowerShell.PerformanceProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<ScriptName>GetAllHostUsage</ScriptName>
<ScriptBody><Script>param($VMMServer, $domain, $username, $pass)
$MBFactor = 1024 * 1024;
function ProducePerfPropertyBags
{
param($name, $cpuPerf, $memPerf, $diskPerf, $netPerf, $diskFreeMB, $diskPercentFreeMB)
if ($cpuPerf -ne $null)
{
$pBagCpu = $oAPI.CreatePropertyBag();
$pBagMem = $oAPI.CreatePropertyBag();
$pBagDiskRead = $oAPI.CreatePropertyBag();
$pBagDiskWrite = $oAPI.CreatePropertyBag();
$pBagNet = $oAPI.CreatePropertyBag();
$pBagDiskFreeMb = $oAPI.CreatePropertyBag();
$pBagDiskPercentFreeMb = $oAPI.CreatePropertyBag();
$pBagCpu.AddValue('ObjectName', $name);
$pBagCpu.AddValue('CounterName', "cpu");
$value = if ($cpuPerf.PerformanceHistory[0] -ne $null) {$cpuPerf.PerformanceHistory[0];} else {0;}
$pBagCpu.AddValue('CounterValue', [double]$value);
$pBagMem.AddValue('ObjectName', $name);
$pBagMem.AddValue('CounterName', "mem");
$value = if ($memPerf.PerformanceHistory[0] -ne $null) {$memPerf.PerformanceHistory[0];} else {0;}
$pBagMem.AddValue('CounterValue', [double]$value);
$pBagDiskRead.AddValue('ObjectName', $name);
$pBagDiskRead.AddValue('CounterName', "diskread");
$value = if ($diskPerf.PerformanceHistory[0] -ne $null) {$diskPerf.PerformanceHistory[0]/2;} else {0;}
$pBagDiskRead.AddValue('CounterValue', [double]$value);
$pBagDiskWrite.AddValue('ObjectName', $name);
$pBagDiskWrite.AddValue('CounterName', "diskwrite");
$value = if ($diskPerf.PerformanceHistory[0] -ne $null) {$diskPerf.PerformanceHistory[0]/2;} else {0;}
$pBagDiskWrite.AddValue('CounterValue', [double]$value);
$pBagNet.AddValue('ObjectName', $name);
$pBagNet.AddValue('CounterName', "net");
$value = if ($netPerf.PerformanceHistory[0] -ne $null) {$netPerf.PerformanceHistory[0];} else {0;}
$pBagNet.AddValue('CounterValue', [double]$value);
$pBagDiskFreeMb.AddValue('ObjectName', $name);
$pBagDiskFreeMb.AddValue('CounterName', "diskfreemb");
$value = if($diskFreeMB -ne $null) {$diskFreeMB;} else {0;}
$pBagDiskFreeMb.AddValue('CounterValue', [double]$value);
$pBagDiskPercentFreeMb.AddValue('ObjectName', $name);
$pBagDiskPercentFreeMb.AddValue('CounterName', "diskpercentfreemb");
$value = if($diskPercentFreeMB -ne $null) {$diskPercentFreeMB;} else {0;}
$pBagDiskPercentFreeMb.AddValue('CounterValue', [double]$value);
$pBagCpu
$pBagMem
$pBagDiskRead
$pBagDiskWrite
$pBagNet
$pBagDiskFreeMB
$pBagDiskPercentFreeMB
}
}
function GetPercent
{
param($numerator, $denominator)
$percent = 0;
if ($denominator -ne 0)
{
$percent = [Math]::Round(($numerator * 100) / $denominator);
}
$percent;
}
function Cleanup
{
param($vmm)
if ($vmm -ne $null)
{
$vmm.Disconnect();
$vmm = $null;
}
$module = get-module -name "virtualmachinemanagercore"
if ($module -ne $null)
{
remove-module -moduleInfo $module;
$module = $null;
}
}
$vmm = $null;
Try
{
#GetAllHostUsage.ps1 : Gets Non-HyperV Host perf data from VMM
#error codes
$SuccessCode = 25900;
$CredentialNullCode = 25934;
$GetVMMFailureCode = 25935;
$GetPerfFailureCode = 25936;
$oAPI = New-Object -comObject 'MOM.ScriptAPI'
$evt = New-Object System.Diagnostics.Eventlog("Application");
$evt.Source = "Microsoft.SystemCenter.VirtualMachineManager.2016.Report.ManagedHostPerformanceProvider";
$errevent = [System.Diagnostics.EventLogEntryType]::Error;
$infoevent = [System.Diagnostics.EventLogEntryType]::Information;
$error.Clear();
$cred = $null;
if ($domain -AND $username -AND $pass)
{
#Append domain to get domain\username
$domainUser = $domain + "\" + $username;
#Create Cred object
$securePass = ConvertTo-SecureString -AsPlainText $pass -force
$cred = New-Object System.Management.Automation.PSCredential $domainUser, $securePass;
}
$error.Clear();
$module = get-module -name "virtualmachinemanagercore"
if ($module -eq $null)
{
$modulePath = get-itemproperty -path "HKLM:\Software\Microsoft\Microsoft System Center Virtual Machine Manager Administrator Console\Setup";
Import-Module ($modulePath.InstallPath + "bin\psModules\virtualmachinemanagercore\virtualmachinemanagercore.psd1");
}
if ($cred -eq $null)
{
$evt.WriteEntry("Credentials are null for user: " + $domainUser, $errevent, $CredentialNullCode);
return;
}
$vmm = Get-SCVMMServer $VMMServer -Credential $cred;
if ($vmm -eq $null)
{
$evt.WriteEntry("VMM Server was null" + $error, $errevent, $GetVMMFailureCode);
return;
}
$count = 0;
foreach ($managedHost in Get-SCVMHost)
{
#HyperV collection happens directly from the host.
if ($managedHost.VirtualizationPlatform -eq "HyperV")
{
continue;
}
$error.Clear();
$cpuPerf = Get-SCPerformanceData -VMHost $managedHost -TimeFrame Hour -PerformanceCounter CPUUsage -VMMServer $vmm
$memPerf = Get-SCPerformanceData -VMHost $managedHost -TimeFrame Hour -PerformanceCounter MemoryUsage -VMMServer $vmm
$diskPerf = Get-SCPerformanceData -VMHost $managedHost -TimeFrame Hour -PerformanceCounter StorageIOPSUsage -VMMServer $vmm
$netPerf = Get-SCPerformanceData -VMHost $managedHost -TimeFrame Hour -PerformanceCounter NetworkIOUsage -VMMServer $vmm
#This call is to ensure all volumes are cached at least once.
$managedHost | Get-SCStorageVolume | Out-Null ;
$diskFree = 0;
$diskFreeMB = 0;
$diskCapacity = 0;
$diskCapacityMB = 0;
$diskVolumes = $managedHost.DiskVolumes;
foreach ($volume in $diskVolumes)
{
$diskFree = $diskFree + $volume.FreeSpace;
$diskCapacity = $diskCapacity + $volume.Capacity;
}
$diskFreeMB = $diskFree / $MBFactor;
$diskCapacityMB = $diskCapacity / $MBFactor;
$diskPercentFreeMB = GetPercent $diskFreeMB $diskCapacityMB;
if ($error.Count -ne 0)
{
$evt.WriteEntry($error, $errevent, $GetPerfFailureCode);
return;
}
else
{
ProducePerfPropertyBags -name $managedHost.Name -cpuPerf $cpuPerf -memPerf $memPerf -diskPerf $diskPerf -netPerf $netPerf -diskFreeMB $diskFreeMB -diskPercentFreeMB $diskPercentFreeMB
$count = $count + 7;
}
}
$msg = "Managed host usage collection succeeded. Produced property bags = " + $count;
$evt.WriteEntry($msg, $infoevent, $SuccessCode);
}
Finally
{
Cleanup -vmm $vmm
}</Script></ScriptBody>
<Parameters>$Config/Parameters$</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
<ObjectName>$Data/Property[@Name='ObjectName']$</ObjectName>
<CounterName>$Data/Property[@Name='CounterName']$</CounterName>
<InstanceName>instance</InstanceName>
<Value>$Data/Property[@Name='CounterValue']$</Value>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS1"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>SystemPerf!System.Performance.Data</OutputType>
</DataSourceModuleType>