|
| 1 | +import uuid |
| 2 | +from datetime import datetime, timezone |
| 3 | + |
| 4 | +from nisystemlink.clients.alarm import AlarmClient |
| 5 | +from nisystemlink.clients.alarm.models import ( |
| 6 | + AcknowledgeByInstanceIdRequest, |
| 7 | + CreateOrUpdateAlarmRequest, |
| 8 | + DeleteByInstanceIdRequest, |
| 9 | + QueryWithFilterRequest, |
| 10 | +) |
| 11 | +from nisystemlink.clients.alarm.models._alarm import AlarmTransitionType |
| 12 | +from nisystemlink.clients.alarm.models._create_or_update_alarm_request import ( |
| 13 | + CreateAlarmTransition, |
| 14 | +) |
| 15 | +from nisystemlink.clients.alarm.models._query_alarms_request import ( |
| 16 | + AlarmOrderBy, |
| 17 | + TransitionInclusionOption, |
| 18 | +) |
| 19 | +from nisystemlink.clients.core import HttpConfiguration |
| 20 | + |
| 21 | +# Setup the server configuration to point to your instance of SystemLink Enterprise |
| 22 | +server_configuration = HttpConfiguration( |
| 23 | + server_uri="https://yourserver.yourcompany.com", |
| 24 | + api_key="YourAPIKeyGeneratedFromSystemLink", |
| 25 | +) |
| 26 | +client = AlarmClient(configuration=server_configuration) |
| 27 | + |
| 28 | +# Create a unique alarm ID for this example |
| 29 | +alarm_id = f"example_alarm_{uuid.uuid1().hex}" |
| 30 | + |
| 31 | +# Create an alarm with a SET transition |
| 32 | +create_request = CreateOrUpdateAlarmRequest( |
| 33 | + alarm_id=alarm_id, |
| 34 | + transition=CreateAlarmTransition( |
| 35 | + transition_type=AlarmTransitionType.SET, |
| 36 | + occurred_at=datetime.now(timezone.utc), |
| 37 | + severity_level=3, |
| 38 | + condition="Temperature exceeded threshold", |
| 39 | + message="Temperature sensor reading: 85°C", |
| 40 | + ), |
| 41 | +) |
| 42 | +create_response = client.create_or_update_alarm(create_request) |
| 43 | +instance_id = create_response.instance_id |
| 44 | + |
| 45 | +# Get the alarm by instance ID |
| 46 | +alarm = client.get_alarm(instance_id) |
| 47 | + |
| 48 | +# Update the alarm with a higher severity |
| 49 | +update_request = CreateOrUpdateAlarmRequest( |
| 50 | + alarm_id=alarm_id, |
| 51 | + transition=CreateAlarmTransition( |
| 52 | + transition_type=AlarmTransitionType.SET, |
| 53 | + occurred_at=datetime.now(timezone.utc), |
| 54 | + severity_level=5, |
| 55 | + condition="Temperature critically high", |
| 56 | + message="Temperature sensor reading: 95°C", |
| 57 | + ), |
| 58 | +) |
| 59 | +update_response = client.create_or_update_alarm(update_request) |
| 60 | + |
| 61 | +# Query alarms with a filter |
| 62 | +query_request = QueryWithFilterRequest( |
| 63 | + filter=f'alarmId="{alarm_id}"', |
| 64 | + transition_inclusion_option=TransitionInclusionOption.ALL, |
| 65 | + order_by=AlarmOrderBy.UPDATED_AT, |
| 66 | + order_by_descending=True, |
| 67 | + return_count=True, |
| 68 | +) |
| 69 | +query_response = client.query_alarms(query_request) |
| 70 | + |
| 71 | +# Acknowledge the alarm |
| 72 | +ack_request = AcknowledgeByInstanceIdRequest(instance_ids=[instance_id]) |
| 73 | +ack_response = client.acknowledge_instances_by_instance_id(ack_request) |
| 74 | + |
| 75 | +# Clear the alarm |
| 76 | +clear_request = CreateOrUpdateAlarmRequest( |
| 77 | + alarm_id=alarm_id, |
| 78 | + transition=CreateAlarmTransition( |
| 79 | + transition_type=AlarmTransitionType.CLEAR, |
| 80 | + occurred_at=datetime.now(timezone.utc), |
| 81 | + severity_level=0, |
| 82 | + condition="Temperature returned to normal", |
| 83 | + ), |
| 84 | +) |
| 85 | +clear_response = client.create_or_update_alarm(clear_request) |
| 86 | + |
| 87 | +# Delete the alarm by instance ID |
| 88 | +client.delete_alarm(instance_id) |
0 commit comments