NetXMS Support Forum

English Support => General Support => Topic started by: krazi on February 20, 2017, 12:38:46 AM

Title: Transformation Script execution error - Error 17
Post by: krazi on February 20, 2017, 12:38:46 AM
Hello,
I'm experiencing this error after implementing MTBF (Mean Time Between Failures) and MTTR (Mean Time To Repair) Calculation (https://wiki.netxms.org/index.php?title=MTBF_(Mean_Time_Between_Failures)_and_MTTR_(Mean_Time_To_Repair)_Calculation&mobileaction=toggle_view_mobile)

This is related to the "Node availability (percentage)" DCI only (other DCIs are OK):
See attached Capture1.PNG

Here's the error msg:
See attached Capture3.PNG

Here's the line of code being referred to:
See attached Capture2.PNG

Here's the full script:
// This script calculates MTTR, MTBF and perAvailability parameters and stores them in custom attributes
// Initialize some custom attributes the first time.
// Undefined attributes are created by SetCustomAttribute function automatically
CurrentStatus = GetDCIValue($node, FindDCIByName($node, "Status"));
PreviousState = GetCustomAttribute($node, "PreviousState");
if (PreviousState == null)
{ // In the first time, previous state is null
SetCustomAttribute($node, "PreviousState", CurrentStatus);
SetCustomAttribute($node, "TimeStamp", time());   
SetCustomAttribute($node, "NumFailures", 0);
SetCustomAttribute($node, "TotalUptime", 0);
SetCustomAttribute($node, "TotalDowntime", 0);
return 100;
}

// From here the 2nd and subsequent times
NumFailures = GetCustomAttribute($node, "NumFailures");
LastTime = time() - GetCustomAttribute($node, "TimeStamp");

// Status is up
if (CurrentStatus == 0)
{
if (PreviousState != CurrentStatus)
{   // just changed to up
// update mttr
TotalDowntime = GetCustomAttribute($node, "TotalDowntime") + LastTime;
mttr = TotalDowntime / ((NumFailures == 0) ? 1 : NumFailures) / 3600;   // to prevent division by ze
SetCustomAttribute($node, "TotalDowntime", TotalDowntime);
SetCustomAttribute($node, "mttr", mttr);
}
else
{      // still up
// update mtbf
TotalUptime = GetCustomAttribute($node, "TotalUptime") + LastTime;
mtbf = TotalUptime / ((NumFailures == 0) ? 1 : NumFailures) / 3600;   // to prevent division by zero
SetCustomAttribute($node, "TotalUptime", TotalUptime);
SetCustomAttribute($node, "mtbf", mtbf);
}
}

// Status is down
if (CurrentStatus == 4)
{
if (PreviousState != CurrentStatus)
{   // just changed to down
// update mtbf
NumFailures++;
TotalUptime = GetCustomAttribute($node, "TotalUptime") + LastTime;
mtbf = TotalUptime / NumFailures / 3600;
SetCustomAttribute($node, "NumFailures", NumFailures);
SetCustomAttribute($node, "TotalUptime", TotalUptime);
SetCustomAttribute($node, "mtbf", mtbf);
}
else
{   // still down
// update mttr
TotalDowntime = GetCustomAttribute($node, "TotalDowntime") + LastTime;
mttr = TotalDowntime / NumFailures / 3600;
SetCustomAttribute($node, "TotalDowntime", TotalDowntime);
SetCustomAttribute($node, "mttr", mttr);
}
}

if (CurrentStatus == 0 || CurrentStatus == 4)
{
// Save previous state and timestamp
SetCustomAttribute($node, "PreviousState", CurrentStatus);
SetCustomAttribute($node, "TimeStamp", time());   

// perAvailability section
TotalUptime = GetCustomAttribute($node, "TotalUptime");
TotalDowntime = GetCustomAttribute($node, "TotalDowntime");
perAvailability = TotalUptime / (TotalUptime + TotalDowntime) * 100;
SetCustomAttribute($node, "perAvailability", perAvailability);

return perAvailability;
}


Appreciate any help.
Thanks
Title: Re: Transformation Script execution error - Error 17
Post by: krazi on February 21, 2017, 08:36:09 PM
I have added additional info to my original post as FYI.
Title: Re: Transformation Script execution error - Error 17
Post by: Tursiops on February 22, 2017, 02:35:05 AM
Does a DCI called "Status" exist on the node?
I know this used to be an internal DCI that was added for any node automatically, but it isn't in newer versions.

You may have to create a script DCI providing the result of $node->status for what you are trying to achieve.
See https://wiki.netxms.org/wiki/NXSL:NetObj for possible values.
Title: Re: Transformation Script execution error - Error 17
Post by: sodalist on February 24, 2017, 11:22:34 AM
Hello,

You can solve issue by:
1. unbind template with SLA DCI from node
2. delete SLA custom attributes from node
3. on node create DCI described Status collecting Status parameter from origin Internal
4. apply template with SLA DCI to node

or:
1. manually populate SLA custom attributes with values
2. on node create DCI described Status collecting Status parameter from origin Internal

Br, A