Applications Systems

Disabled components still trigger alerts for Other Statuses in older versions of SAM

This article describes the issue when using the older versions of SAM and component status alerts are being fired for components even though the status is set to disabled.

First published date

11/24/2018 12:48 AM

Last published date

12/15/2021 1:38 PM

Overview

This article describes how component status alerts may still be triggered for components even though the component status is set as disabled on the application level in earlier versions of SAM.
 

Components Disabled the Application Level

 

The following figure shows that alerts are still being triggered even though the component status is disabled at the application level:

 

Product section

Server Application Monitor

Cause

The IsDisabled flag in APM_Component table is set to NULL
There is no record in APM_CurrentComponentStatus for disabled components so the Status field returns a default value 0 (Unknown) or Last polled value instead of Disabled (27).

The value from the APM_CurrentComponentStatus is used in alerting and reporting, resulting in false alerts.


This issue also occurred in the Advanced Alert Manager, which was deprecated in Orion Platform 2011.4. Alert functionality is now handled in the Alert Manager. For more information, see Alerting resources for Orion Platform products

Resolution

This issue was fixed in SAM 6.5, released in 2017. Upgrade to the latest version of SolarWinds SAM.

As a workaround, to fix without upgrading, use the following script in SQL Server Management Studio to mark all disabled components on the template level as Disabled at the application level.

SolarWinds recommends backing up your database before running this script. Follow instructions in How to Backup the Orion SQL database.

-- Scripts are not supported under any SolarWinds support program or service.
-- Scripts are provided AS IS without warranty of any kind. SolarWinds further
-- disclaims all warranties including, without limitation, any implied warranties
-- of merchantability or of fitness for a particular purpose. The risk arising
-- out of the use or performance of the scripts and documentation stays with you.
-- In no event shall SolarWinds or anyone else involved in the creation,
-- production, or delivery of the scripts be liable for any damages whatsoever
-- (including, without limitation, damages for loss of business profits, business
-- interruption, loss of business information, or other pecuniary loss) arising
-- out of the use of or inability to use the scripts or documentation.

DECLARE @ComponentID int
DECLARE @ApplicationID int

DECLARE db_cursor CURSOR FOR  

SELECT c.ID, c.ApplicationID FROM APM_ComponentTemplate ct
INNER JOIN APM_Component c ON c.TemplateID = ct.ID
WHERE ct.IsDisabled = 1 AND ISNULL(c.IsDisabled, 0) = 0

OPEN db_cursor   

FETCH NEXT FROM db_cursor INTO @ComponentID, @ApplicationID

WHILE @@FETCH_STATUS = 0   

BEGIN   

UPDATE APM_Component SET IsDisabled = 1 WHERE ID = @ComponentID

UPDATE APM_ComponentSetting SET Value = 'True' WHERE ComponentID = @ComponentID AND [Key] = '__Disabled'

IF @@ROWCOUNT = 0

INSERT INTO APM_ComponentSetting(ComponentID, [Key], [Value], [ValueType], [Required])

VALUES (@ComponentID, '__Disabled', 'True', 3, 0)

UPDATE APM_CurrentComponentStatus SET Availability = 7, [TimeStamp] = GETUTCDATE(), ComponentStatusID = 0, ErrorCode = 0 WHERE ComponentID = @ComponentID

IF @@ROWCOUNT = 0

INSERT INTO APM_CurrentComponentStatus (ComponentID, ApplicationID, Availability, [TimeStamp], ComponentStatusID, ErrorCode)

VALUES (@ComponentID, @ApplicationID, 7, GETUTCDATE(), 0, 0)

FETCH NEXT FROM db_cursor INTO @ComponentID, @ApplicationID  

END   

CLOSE db_cursor   

DEALLOCATE db_cursor