SAT9/.resources/9ea06676d3f8d2efa2a53e4045aa92a3143be2f1cea2cfce8bc0fed9c489d315

196 lines
6.6 KiB
Plaintext

import time
from datetime import datetime
startTime = datetime.now()
def convert(duration):
current_seconds = round(time.time())
seconds_duration = (current_seconds - (duration/1000))
m, s = divmod(seconds_duration, 60)
h, m = divmod(m, 60)
return seconds_duration
def get_timestamp(duration):
timestamp = system.date.fromMillis(duration)
return timestamp
def check_device_in_device_list(device, device_list):
if len(device_list)== 0:
return True
for i in device_list:
if device.startswith(i):
return True
return False
def edit_alarm_id(alarm_id):
new_alarm_id = alarm_id.replace("/", " / ")
return new_alarm_id
def create_shelve_key(source_id, alarm_id):
"""
Creates a formatted key as Ignition ui
wont allow "/" and spaces to be stored as
key values. Formatting allows easy conversion
back to the origional sourceId and message string.
Args:
source_id: The sourceId of the alarm.
message: The alarm message.
Returns:
The formatted key..
Raises:
None.
"""
source_to_check = source_id.replace("/", "---")
key_to_check = source_to_check + "----" + str(alarm_id)
return key_to_check
def unformat_shelve_key(shelved_key):
shelved_items = shelved_key.split("----")
source_to_check = shelved_items[0].replace("---", "/")
alarm_id = int(shelved_items[1])
return source_to_check, alarm_id
def check_alarm_in_shelved_alarms(source_id, message, alarms_to_shelve):
key_to_check = create_shelve_key(source_id, message)
if key_to_check in alarms_to_shelve:
return key_to_check
return False
def get_alarm_table(self, active_alarms, severity_filters, no_filter,
device_list, alarm_states, alt_colour, table_type):
alarms_data = []
alarms_critical = []
alarms_high = []
alarms_medium = []
alarms_low = []
alarms_diagnostic = []
alarms_disconnected = []
alarm_temp_dict = {}
shelved_alarms_to_keep = {}
unshelved_alarms_to_keep = {}
shelve_alarms_dict = self.custom.alarms_to_shelve
unshelve_alarms_dict = self.custom.alarms_to_unshelve
if alt_colour:
style_props_critical = {"classes":"Alarms-Styles/Alt-Colours/Critical"}
style_props_high = {"classes":"Alarms-Styles/Alt-Colours/High"}
style_props_medium = {"classes":"Alarms-Styles/Alt-Colours/Medium"}
style_props_low = {"classes":"Alarms-Styles/Alt-Colours/Low"}
style_props_diagnostic = {"classes":"Alarms-Styles/Alt-Colours/Diagnostic"}
style_props_disconnected = {"classes":"Alarms-Styles/NoAlarm-Black"}
else:
style_props_critical = {"classes":"Alarms-Styles/Critical"}
style_props_high = {"classes":"Alarms-Styles/High"}
style_props_medium = {"classes":"Alarms-Styles/Medium"}
style_props_low = {"classes":"Alarms-Styles/Low"}
style_props_diagnostic = {"classes":"Alarms-Styles/Diagnostic"}
style_props_disconnected = {"classes":"Alarms-Styles/NoAlarm-Black"}
for i in active_alarms:
source_id = active_alarms[i].get("sourceId","Unknown")
alarm_id = active_alarms[i].get("id","Unknown")
severity = active_alarms[i].get("priority", 0)
family_type= active_alarms[i].get("type", 0)
site_id = active_alarms[i].get("siteId", "Unknown")
state = active_alarms[i].get("state", "Unknown")
state = alarms.alarm_state.get_alarm_state(state)
duration = active_alarms[i].get("timestamp", 0)
time_stamp = get_timestamp(duration)
active_duration = convert(duration)
message = active_alarms[i].get("message", "Unknown")
expiration_epoch = active_alarms[i].get("shelveExpiryEpoch")
duration_in_minutes = active_alarms[i].get("durationMinutes")
family_type_Dict={'1':'Jam','2':'Safety /Emergency','3':'Power circuit','4':'Communication',
'5':'Drive/Motor','6':'Pneumatic','7':'Mechanical','9':'Operational','10':'Scanner',
'11':'Controller','12':'Unexpected Container','20':'Miscellaneous','0':'Undefined'}
type_description= family_type_Dict.get(str(family_type))
if expiration_epoch != None:
expiration = system.date.fromMillis(expiration_epoch * 1000)
else:
expiration = "0"
device_in_list = check_device_in_device_list(source_id, device_list)
if (int(severity) in severity_filters or no_filter == True) and (
device_in_list == True and state in alarm_states):
if str(active_alarms[i].get("priority")) == "5":
style_class = style_props_critical
severity = "5. Critical"
key = "Critical"
alarm_list = alarms_critical
elif str(active_alarms[i].get("priority")) == "4":
style_class = style_props_high
severity = "4. High"
key = "High"
alarm_list = alarms_high
elif str(active_alarms[i].get("priority")) == "3":
style_class = style_props_medium
severity = "3. Medium"
key = "Medium"
alarm_list = alarms_medium
elif str(active_alarms[i].get("priority")) == "2":
style_class = style_props_low
severity = "2. Low"
key = "Low"
alarm_list = alarms_low
elif str(active_alarms[i].get("priority")) == "1":
style_class = style_props_diagnostic
severity = "1. Diagnostic"
key = "Diagnostic"
alarm_list = alarms_diagnostic
elif str(active_alarms[i].get("priority")) == "6":
style_class = style_props_disconnected
severity = "Disconnected"
key = "Disconnected"
alarm_list = alarms_disconnected
else:
style_class = style_props_diagnostic
severity = "Unknown"
key = "Diagnostic"
alarm_list = alarms_diagnostic
if table_type == "Docked-East":
source_id = edit_alarm_id(source_id)
shelve_alarm_id = check_alarm_in_shelved_alarms(source_id, alarm_id, shelve_alarms_dict)
if shelve_alarm_id:
shelved_alarms_to_keep[shelve_alarm_id] = ""
shelve_alarm = True
else:
shelve_alarm = False
unshelve_alarm_id = check_alarm_in_shelved_alarms(source_id, alarm_id, unshelve_alarms_dict)
if unshelve_alarm_id:
unshelved_alarms_to_keep[unshelve_alarm_id] = ""
unshelve_alarm = True
else:
unshelve_alarm = False
row = row_builder.build_row( SourceId = source_id, Priority = severity, Type = type_description,
Timestamp = time_stamp, State = state,
Message = message, Expiration = expiration,
Duration = active_duration, Alarm_id = alarm_id, Shelve = shelve_alarm,
Unshelve = unshelve_alarm, StyleClass = style_class)
alarm_list.append(row)
for k,v in shelve_alarms_dict.items():
if k not in shelved_alarms_to_keep:
self.custom.alarms_to_shelve.pop(k)
for k,v in unshelve_alarms_dict.items():
if k not in unshelved_alarms_to_keep:
self.custom.alarms_to_unshelve.pop(k)
return alarms_critical + alarms_high + alarms_medium + alarms_low + alarms_diagnostic + alarms_disconnected