<Rule ID="SCDPM.SLATrendCollection.Rule" Enabled="true" Target="DPM!Microsoft.SystemCenter.DataProtectionManager.2011.Library.DPMServer" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.EventProvider">
<IntervalSeconds>21600</IntervalSeconds>
<SyncTime/>
<ScriptName>CollectSLATrend.js</ScriptName>
<Arguments/>
<ScriptBody><Script>
var SCRIPT_NAME = "CollectSLATrend.js";
var SEVERITY_ERROR = 1;
var SEVERITY_WARNING = 2;
var SEVERITY_INFO = 4;
var EVENT_ID = 90100;
var ARGUMENT_COUNT = 0;
var SCRIPT_FREQUENCY = 24;
var MAX_ROWS = 1000;
if (WScript.Arguments.length != ARGUMENT_COUNT) {
WScript.Quit(0);
}
var DPM_INSTALL_REGKEY = "HKLM\\SOFTWARE\\Microsoft\\Microsoft Data Protection Manager\\Setup\\InstallPath";
var logFilePath = "";
var dpmNotInstalled = false;
var useRowNum = false;
var rowsProcessed = 0;
var totalRowsFetched = 0;
var wsh = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = null;
try
{
fh = fso.CreateTextFile(logFilePath, 2, true);
}
catch (err)
{
//Ignore
}
function Trace(fileH, str) {
var traceDate = new Date();
if(fileH != null) fileH.WriteLine(traceDate + ": " + str);
}
if (dpmNotInstalled)
{
Trace(fh, "DPM install path not found in registry. Is DPM installed?");
WScript.Quit(0);
}
var momApi = new ActiveXObject("MOM.ScriptAPI");
var lastFetchTime = new Date()
var fetchUptoTime = new Date();
var regPath = momApi.GetScriptStateKeyPath(SCRIPT_NAME);
var regPathFetchTime = "HKLM\\" + regPath + "\\LastFetchTime";
var regPathRowsProcessed = "HKLM\\" + regPath + "\\RowsProcessed";
var regPathTotalRowsFetched = "HKLM\\" + regPath + "\\TotalRowsFetched";
try
{
var lastFetchTimeStr = wsh.RegRead(regPathFetchTime)
lastFetchTime = new Date(lastFetchTimeStr)
}
catch (err)
{
// Registry entry does not exist yet. Start time is current time minus some hours
//JScript can handle -ve value for hours
lastFetchTime.setHours(lastFetchTime.getHours() - SCRIPT_FREQUENCY);
}
//If lastFetchTime is too old, reset it to current time
var oldDateTime = new Date();
oldDateTime.setDate(oldDateTime.getDate() - 30); //30 days old. -ve values are handled by setDate
if (lastFetchTime < oldDateTime)
{
lastFetchTime = new Date();
lastFetchTime.setHours(lastFetchTime.getHours() - SCRIPT_FREQUENCY)
}
try
{
var rowsProcessedStr = wsh.RegRead(regPathRowsProcessed);
var totalRowsFetchedStr = wsh.RegRead(regPathTotalRowsFetched);
rowsProcessed = parseInt(rowsProcessedStr);
totalRowsFetched = parseInt(totalRowsFetchedStr);
}
catch (err)
{
// Registry entry does not exist yet. Set values to 0
rowsProcessed = 0;
totalRowsFetched = 0;
}
function getValue(str) {
if(str==null) str="";
return str;
}
var connString = "";
var lastFetchSQLTime = "";
try
{
var sqlServer = wsh.RegRead("HKLM\\SOFTWARE\\Microsoft\\Microsoft Data Protection Manager\\DB\\SqlServer");
var sqlInstance = wsh.RegRead("HKLM\\SOFTWARE\\Microsoft\\Microsoft Data Protection Manager\\DB\\InstanceName");
var dbName = wsh.RegRead("HKLM\\SOFTWARE\\Microsoft\\Microsoft Data Protection Manager\\DB\\DatabaseName");
momApi.AddItem(pBag);
//Rowset does not support fetching backward so keep collecting fetchUpto time here
maxDate = new Date(getValue(rs.fields(8).Value));
count++;
rs.movenext;
}
Trace(fh, count + " records fetched");
//Get new last fetch time
if (count != 0)
{
var utcDate = new Date();
utcDate.setUTCFullYear(maxDate.getFullYear());
utcDate.setUTCMonth(maxDate.getMonth());
utcDate.setUTCDate(maxDate.getDate());
utcDate.setUTCHours(maxDate.getHours());
utcDate.setUTCMinutes(maxDate.getMinutes());
utcDate.setUTCSeconds(maxDate.getSeconds());
utcDate.setUTCMilliseconds(maxDate.getMilliseconds());
fetchUptoTime = new Date(utcDate.toUTCString());
}
Trace(fh, "fetchUptoTime = " + fetchUptoTime.toUTCString());