2026-04-24 FE Backup
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import pprint, time
|
||||
Logger = system.util.getLogger("alarm.summary")
|
||||
provider = "[default]"
|
||||
|
||||
def initAlarmSummaries():
|
||||
""" This function will reset all the alarm summary udt's in the system
|
||||
|
||||
"""
|
||||
allActiveAlarmsTag = []
|
||||
newValues = []
|
||||
for t in system.tag.browse(provider, {"tagType":"UdtInstance", "typeId": "AlarmSummary", "recursive":True}):
|
||||
allActiveAlarmsTag.append(t["fullPath"].toString() +"/ActiveAlarms")
|
||||
newValues.append({})
|
||||
|
||||
system.tag.writeAsync(allActiveAlarmsTag, newValues)
|
||||
|
||||
def updateAlarmCount(srcPath, priority, state):
|
||||
pass
|
||||
|
||||
|
||||
def calcMaxPriority(levelPath):
|
||||
""" Pass in the path level to determine the max priority and return the value
|
||||
levelPath: string of the object level path without the /AlarmSummary/ActiveAlarms
|
||||
"""
|
||||
aggAlarmStatus = system.tag.readBlocking([levelPath+"/AlarmSummary/ActiveAlarms"])[0].value.toDict()
|
||||
|
||||
return determinePriority(aggAlarmStatus)
|
||||
|
||||
def determinePriority(tagValue):
|
||||
""" Use this method to figure out the highest priority level of a tag. Useful with transforms from front-end
|
||||
Args:
|
||||
tagValue: dict/document of the expected structure of {srcPath:priority}
|
||||
Returns:
|
||||
maxState: int -1 for none, 0-Diag, 1-Low, 2- Med, 3- High, 4-Critical
|
||||
"""
|
||||
maxState = -1
|
||||
for k, v in tagValue.iteritems():
|
||||
maxState = v if v > maxState else maxState
|
||||
|
||||
return maxState
|
||||
|
||||
|
||||
|
||||
def syncAlarms():
|
||||
"""
|
||||
Timer based function to update all of the aggregate alarm tags.
|
||||
|
||||
"""
|
||||
sublog = Logger.createSubLogger("syncAlarms")
|
||||
start = time.time()
|
||||
levelAlarmSummary = {} #{"alarmPath":[{srcAlarm:priority}]
|
||||
for alm in system.alarm.queryStatus(priority=[0,1,2,3,4],state=['ActiveUnacked','ActiveAcked']):
|
||||
srcPath = alm.getSource().toString()
|
||||
mainTagPath = srcPath.split("/tag:")[1].split(":/alm")[0]
|
||||
priorityVal = alm.getPriority().intValue
|
||||
|
||||
pathLevelsList = mainTagPath.split("/")
|
||||
|
||||
# Because alarms can exist outside of the /Alarms folder in the UDT, we will account for this
|
||||
almOffset = -1
|
||||
if "Alarms" not in pathLevelsList:
|
||||
almOffset= 0
|
||||
|
||||
for i in range(1, len(pathLevelsList) + almOffset):
|
||||
path = provider+"/".join(pathLevelsList[:i])+"/AlarmSummary/ActiveAlarms"
|
||||
if path not in levelAlarmSummary.keys():
|
||||
levelAlarmSummary[path]= {}
|
||||
|
||||
levelAlarmSummary[path][srcPath] = max([levelAlarmSummary[path].get(srcPath,0), priorityVal ])
|
||||
|
||||
# pprint.pprint(levelAlarmSummary)
|
||||
writeTags, writeVals = [], []
|
||||
for k, v in levelAlarmSummary.iteritems():
|
||||
writeTags.append(str(k))
|
||||
writeVals.append(v)
|
||||
sublog.debug("%s - %s"%(writeTags, writeVals))
|
||||
if len(writeTags) == len(writeVals) and len(writeTags) > 0:
|
||||
system.tag.writeAsync(writeTags, writeVals)
|
||||
|
||||
|
||||
sublog.trace("finished in %s sec"%(time.time() - start))
|
||||
Reference in New Issue
Block a user