196 lines
6.6 KiB
Plaintext
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
|