Skip to content

Commit

Permalink
Remove internal alert definition by name cache used for recovery aler…
Browse files Browse the repository at this point in the history
…t lookups. Instead

query the resource in question for the definition by that name.  This fixes problems where
a sync file may have many problem/recoveries and may not be in order.
[HHQ-2973]
  • Loading branch information
Ryan Morgan committed Jun 12, 2009
1 parent b4cbd70 commit c00ce09
Showing 1 changed file with 15 additions and 25 deletions.
40 changes: 15 additions & 25 deletions hqu/hqapi1/app/AlertdefinitionController.groovy
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ public class AlertdefinitionController extends ApiController {


def sync(params) { def sync(params) {
def syncRequest = new XmlParser().parseText(getUpload('postdata')) def syncRequest = new XmlParser().parseText(getUpload('postdata'))
def definitionsByName = [:] def definitions = []


for (xmlDef in syncRequest['AlertDefinition']) { for (xmlDef in syncRequest['AlertDefinition']) {
def failureXml = null def failureXml = null
Expand Down Expand Up @@ -610,33 +610,23 @@ public class AlertdefinitionController extends ApiController {
break break
} }


def recoveryDef = definitionsByName[xmlCond.'@recover'] // If a resource alert, look up alert by name
if (recoveryDef) { if (resource) {
if (aeid.type == recoveryDef.appdefType && log.debug("Looking up alerts for resource=" + resource.id)
aeid.id == recoveryDef.appdefId) { def resourceDefs = resource.getAlertDefinitions(user)
acv.measurementId = recoveryDef.id def recovery = resourceDefs.find { it.name == xmlCond.'@recover' }
} if (recovery) {
} else { log.info("Found recovery definition " + recovery.id)
// Attempt to look for the name of alert on the acv.measurementId = recovery.id
// given resource. break
if (resource) {
log.warn("Recovery alert " +
xmlCond.'@recover' + " not found " +
"in sync XML, checking resource.")
def resourceDefs = resource.getAlertDefinitions(user)
def recovery = resourceDefs.find { it.name == xmlCond.'@recover' }
if (recovery) {
log.info("Found definition " + recovery.id)
acv.measurementId = recovery.id
break
}
} }
}


if (!acv.measurementId) {
failureXml = getFailureXML(ErrorCode.OBJECT_NOT_FOUND, failureXml = getFailureXML(ErrorCode.OBJECT_NOT_FOUND,
"Unable to find recovery " + "Unable to find recovery " +
"with name '" + "with name '" +
xmlCond.'@recover' + "'") xmlCond.'@recover' + "'")
break
} }


break break
Expand Down Expand Up @@ -738,14 +728,14 @@ public class AlertdefinitionController extends ApiController {
pojo.unsetEscalation(user) pojo.unsetEscalation(user)
} }


// Keep defs around so we don't need to look up recovery alerts // Keep synced defintions for sync return XML
definitionsByName[pojo.name] = pojo definitions << pojo
} }


renderXml() { renderXml() {
out << AlertDefinitionsResponse() { out << AlertDefinitionsResponse() {
out << getSuccessXML() out << getSuccessXML()
for (alertdef in definitionsByName.values()) { for (alertdef in definitions) {
out << getAlertDefinitionXML(alertdef, false) out << getAlertDefinitionXML(alertdef, false)
} }
} }
Expand Down

0 comments on commit c00ce09

Please sign in to comment.