When the "SQL_AZURE - Database Unresponsive" alarm is configured with a custom email setting, the email setting is saved to a registry value. The Topology association is DBSS_Azure_Database which is incorrect.
When the alarm is fired and needs to send an email, it checks the associated topology and searches for Topology type "DBSS_Azure_Database". This cannot be found as the customized registry value.
Then program will fallback to get default email setting. When this default email setting is not configured, no email will be sent.
WORKAROUND 1
Replace the following functional groovy code based on the steps below.
/**
* This software is confidential. Quest Software Inc., or one of its subsidiaries, has supplied this software to you
* under terms of a license agreement, nondisclosure agreement or both.
*
* You may not copy, disclose, or use this software except in accordance with those terms.
*
* Copyright 2017 Quest Software Inc. ALL RIGHTS RESERVED.
*
* QUEST SOFTWARE INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
* OR NON-INFRINGEMENT. QUEST SOFTWARE SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
* MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package system._dbwc_azure_GA_OverrideFuncs.scripts;
/**
* This function returns relevant scope for usability alrms (Azure_Instance_Agent\Azure_Database_Agent)
* @param agentName - String
* @param registryName - String
* @return Object
*/
CAT = com.quest.qsi.fason.framework.fmslogger.LogFactory.getLogForWCF(functionHelper.getFunctionId())
CAT.debug("getRelevantScopeForAgentModel - enter. agentName:${agentName}, registryName:${registryName}.")
agentService = server.get("AgentService");
agents = agentService.findByName(agentName);
if ((agents == null) || (agents.size() == 0)) {
CAT.debug("Get - Relevant Scope fo AgentModel: error agent not exist " + agentName)
return null;
}
agentObject = agents[0];
agentType = agentObject.getTypeId();
result = null;
realAgentName = agentName;
/*DB_Azure_Instance - Get relevant Scope*/
if (agentType.equals("DB_Azure_Instance"))
result = functionHelper.invokeQuery("system:dbwc_azure_GA_OverrideFuncs.27", agentName);
else { /* DB_Azure_Database - Get relevant Scope */
result = functionHelper.invokeQuery("system:dbwc_azure_GA_OverrideFuncs.28", agentName)
if ((registryName.startsWith("SQL_AZURE-DatabaseReachingMaximumLimitCapacity"))
|| (registryName.startsWith("SQL_AZURE-DatabaseRequiresChangeInEdition"))
|| (registryName.startsWith("SQL_AZURE-DatabaseReachingCurrentLimitCapacity"))) {
agentName = result.name;
agentName = agentName[0];
Instance = result.instance;
result = functionHelper.invokeQuery("system:dbwc_azure_GA_OverrideFuncs.31", agentName, Instance);
if (result[0] == null) {
result = functionHelper.invokeQuery("system:dbwc_azure_GA_OverrideFuncs.28", realAgentName)
}
}
}
def retScope = result[0]//"retScope" is with type "DBSS_Azure_Database"
//If "retScope" should not be "DBSS_Azure_Database" for the rule, then we need to add special logic for the rules.
if ((registryName.startsWith("SQL_AZURE-ResponseTime")) || (registryName.startsWith("SQL_AZURE-ConnectionTime")) || (registryName.startsWith("SQL_AZURE-CostWasNotSet")) || (registryName.startsWith("SQL_AZURE-CostChange")) || (registryName.startsWith("SQL_AZURE-DatabaseUnresponsive"))
|| (registryName.startsWith("SQL_AZURE-CollectionStatus"))) {
retScope = retScope.get("monitoringAgent")
}
CAT.debug("getRelevantScopeForAgentModel - exit. agentName:${agentName}, retScope:${retScope}.")
return retScope;
WORKAROUND 2
Set a default email setting for the SQL Azure alarms (this would send the email to a different email address unless the email address is the same as the configured address for this specific alarm)
STATUS
This issue has been logged as bug FOM-313 and has been fixed in the 5.9.7.10 and higher releases of the Azure SQL DB cartridge.
© 2024 Quest Software Inc. ALL RIGHTS RESERVED. Terms of Use Privacy Cookie Preference Center