Data Source Script for Alert Trace

Fujitsu.Servers.PRIMERGY.ESXi.Alert.DataSource.Script (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource System.SimpleScheduler Default
Script ProbeAction Microsoft.Windows.PowerShellPropertyBagProbe Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval SecondsInterval Seconds for Data Source Script for Alert Trace

Source Code:

<DataSourceModuleType ID="Fujitsu.Servers.PRIMERGY.ESXi.Alert.DataSource.Script" Accessibility="Public" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="IntervalSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TargetName" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="System!System.SimpleScheduler">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime/>
</DataSource>
<ProbeAction ID="Script" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagProbe">
<ScriptName>AlertsMonitor.ps1</ScriptName>
<ScriptBody><Script>
#-------------------------------------------------------------------
# Fujitsu
# Copyright 2015-2019 FUJITSU LIMITED
#
# AlertsMonitor.ps1
#
# Summary:
# Monitor error log files to generate alerts in SCOM
#
#-------------------------------------------------------------------

param (
[string] $TargetName,
[switch] $OutsideManagementPack
)

Import-Module ("$FileResource[Name='Fujitsu.Servers.PRIMERGY.PS.CommonModule']/Path$", "$PSScriptRoot\Modules\CommonModule.psm1")[[bool]$OutsideManagementPack]
Import-Module ("$FileResource[Name='Fujitsu.Servers.PRIMERGY.PS.LoggerModule']/Path$", "$PSScriptRoot\Modules\LoggerModule.psm1")[[bool]$OutsideManagementPack]

function Main {
$script:Logger = New-Logger -Section $SectionAlertsMonitor -HostTag $TagHostsMonitoring -ServerName $TargetName -ScriptName "AlertsMonitor.ps1" -OutsideManagementPack:$OutsideManagementPack

$ProvFileName = $Logger.ErrFileName
$NewPFileName = "$($ProvFileName).tmp"

$Logger.Debug("AlertTraceFile = $ProvFileName")

try {
$oAPI = New-SCOMApiObject -OutsideManagementPack:$OutsideManagementPack
$oEmptyPropertyBag = $oAPI.CreatePropertyBag()
} catch {
$ErrorMessage = $_.Exception.Message
$Logger.Error(106, "MOM.ScriptAPI Error: CreatePropertyBag: $ErrorMessage")
Exit 106
}

try {
# Do anything only if file exists
if (Test-Path -Path $ProvFileName) {
# Move to tmp
Move-Item $provFileName $NewPFileName

# Read lines and delete log file
$lines = Get-Content $NewPFileName | Sort-Object
Remove-Item $NewPFileName | Out-Null

$lasterr = ""
$pbdescr = ""
foreach ($line in $lines) {
$array = $line -Split " ", 2
$errno = $array[0].Substring(1, $array[0].Length - 2)
$descr = $array[1]
if ($errno -ne $lasterr) {
if ($lasterr -ne "") {
$Logger.Debug("Creating property bag for $lasterr")
$oPropertyBag = $oAPI.CreatePropertyBag()
$oPropertyBag.AddValue("Error", $lasterr)
$oPropertyBag.AddValue("Description", $pbdescr)
$oPropertyBag
}
$lasterr = $errno
$pbdescr = $descr
} else {
$pbdescr = $pbdescr + "`r`n" + $descr
}
}
if ($pbdescr -ne "") {
$Logger.Debug("Creating property bag for $lasterr")
$oPropertyBag = $oAPI.CreatePropertyBag()
$oPropertyBag.AddValue("Error", $lasterr)
$oPropertyBag.AddValue("Description", $pbdescr)
$oPropertyBag
}
} else {
$Logger.Debug("Nothing found")
$oEmptyPropertyBag
}
} catch {
$ErrorMessage = $_.Exception.Message
$Logger.Error(114, "AlertTrace error: $ErrorMessage")
Exit 114
}

$Logger.Debug("***** Normal end of script. *****")
}

try {
Main
} finally {
$Logger.OutputBuffer()
}
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>TargetName</Name>
<Value>$Config/TargetName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>120</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="Script">
<Node ID="DS"/>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
</DataSourceModuleType>