The Alert Notification Service SDK allows Swift developers to utilize the Alert Notifications IBM Cloud service in their applications, allowing for the proactive remediation of issues for applications running on IBM Cloud. Alerts and messages can be created, received and deleted through the use of this SDK. The servive can be acquired at this link, and the documentation is available at this link; both links may require a IBM Cloud account to access. A non-IBM Cloud Quick Start Guide can be viewed on the IBM website.
This SDK is for the consumption/usage of the Alert Notification service and not for administration of the service. Adding users, groups, notification policies, etc. should be done through the IBM Cloud dashboard.
Swift Version
The Alert Notification SDK works with the 4.1.2 release version of the Swift binaries. You can download this version from Swift.org.
Usage
In order to use this SDK, you need to add it to the dependencies in your application’s Package.swift file.
Once the Package.swift file has been updated, import the AlertNotifications module into your project.
Credentials Setup
In order to use all of the features of the Alert Notifications SDK, you need an instance of the Alert Notifications service (be aware that this is a paid service only). Once you have obtained an instance of this service, select it from your IBM Cloud dashboard, and then click the “Service Credentials” tab. Create a credential if you have not already.
Once you have a credential created, select “View Credentials” and take note of the information that appears there. You will need the entire name and password fields for your application, but you should only use the url field up to and including /api. Do not include any portions of the url that come after that.
Using this information, you should create a ServiceCredentials object in your application, which will be used in all functions that create, retrieve or delete alerts or messages.
let credentials = ServiceCredentials(url: "<url>", name: "<name>", password: "<password>")
API
Alert
The Alert class is used to specify a single instance of an alert. An Alert has the following required properties:
summary - A String that gives a short description of the alert.
location - A String that describes the area where the condition that caused the alert occurred.
severity - A property of type Alert.Severity that describes the severity of the alert.
An Alert can also be given these additional optional properties by the application:
id - A String giving this alert a unique identifier, which is used for deduplication.
date - A Date object indicating when the alert was raised.
status - A property of type Alert.Status indicating whether or not the alert has been resolved. The default value is .problem.
source - A String indicating the source of the alert condition.
applicationsOrServices - An array of Strings, indicating which IBM Cloud applications or services are impacted by this alert.
URLs - An array of Alert.URL objects, to supply additional links associated with the alert.
details - An array of Alert.Detail objects, to provide additional key-value pairs as details associated with the alert.
emailMessageToSend - An Alert.EmailMessage object specifying an e-mail message to be sent to recipients when the alert is posted. It may optionally be formatted using Mustache templates.
SMSMessageToSend - A String specifying an SMS message to be sent to recipients when the alert is posted. It may optionally be formatted using Mustache templates.
voiceMessageToSend - A String specifying a voice message to be sent to recipients when the alert is posted. It may optionally be formatted using Mustache templates.
Lastly, an Alert object may contain several more properties when it is sent by the Alert Notification service. These cannot be set by the application.
shortId - A shorter identifying String set by the Alert Notification service. This is the identifier that the application should use when attempting to call a GET or DELETE request on an alert.
notificationState - A property of type Alert.NotificationState indicating where in the reporting process the alert currently resides.
firstOccurrence - A Date object indicating when this alert was first sent.
lastNotified - A Date object indicating when the last notification regarding this alert was sent.
internalTime - A Date object indicating when this alert was posted.
expired - A Bool indicating whether the alert is still valid or has expired. Expired alerts will not appear in the Alert Viewer UI.
All of the properties of an Alert are immutable. Once an Alert is created, it cannot be modified. The Alert.Builder class can be used to create a modified version of an existing Alert.
Alert.URL
The Alert.URL object is used to provide additional informative links alongside an alert, such as a link to a runbook. An Alert.URL object has the following properties:
description - A brief String description of the link.
URL - A String containing the URL of the link.
An Alert.URL only has one method, the constructor.
Alert.URL(description: String, URL: String)
Alert.Detail
The Alert.Detail object is used to provide additional details alongside an alert, in the form of key-value pairs. A Alert.Detail object has the following properties:
name - A String indicating the detail name.
value - A String indicating the corresponding value.
An Alert.Detail only has one method, the constructor.
Alert.Detail(name: String, value: String)
Alert.EmailMessage
The Alert.EmailMessage object is used to specify an e-mail message to be sent along with an alert. An Alert.EmailMessage object has the following properties:
subject - A String containing the subject line.
body - A String containing the e-mail body.
An Alert.EmailMessage only has one method, the constructor.
Alert.EmailMessage(subject: String, body: String)
Alert.Severity
The Alert.Severity type indicates the level of severity associated with an alert. The type is an enum with the following possible values, as seen in the Alert Notification service documentation:
.fatal - A service-terminating condition has occurred. Immediate action is required.
.critical - A service-affecting condition has occurred, and corrective action is immediately required. For example, a device has gone out of service and needs to be restored.
.major - A service-affecting problem occurred. Corrective action is urgently required. For example, a severe degradation occurred in the capability of a device and full capability must be restored.
.minor - A non-service affecting problem occurred; take corrective action to prevent alerts of higher severity. For example, a problem occurred on a device but it does not impair the capacity or performance of the device.
.warning - Potential or impending problems were detected. Further investigation is needed to prevent alerts of higher severity.
.indeterminate - The severity level cannot be determined from the device.
.clear - Indicates that the alert was resolved, either manually by an operator, or automatically by a process that determined the fault condition no longer exists.
Alert.Status
The Alert.Status type indicates whether or not an alert has been acknowledged or resolved. The type is an enum with the following possible values:
.problem - The alert has been posted but no action has been taken.
.acknowledged - The alert has been seen and acknowledged, and action is being taken to resolve it.
.resolved - The alert has been resolved.
Alert.NotificationState
The Alert.NotificationState type indicates in greater detail if users have been alerted to the problem. The type is an enum with the following possible values:
.unnotified - Alert Notification has received the alert but no notification was generated. Indicates that an alert does not match any existing notification policy.
.notified - Alert Notification has matched the alert to a notification policy and triggered a notification, which was sent to the users or groups defined in the notification policy. No contact has yet acknowledged the alert. Indicates that no one is working on an alert.
.acknowledged - Indicates to Alert Notification that the alert is being worked on. A contact has acknowledged the alert, either from the notification or in the Alert Viewer. Alerts can switch between the acknowledged and unacknowledged states, for example, if an alert was mistakenly acknowledged.
.escalated - A time period specified in the notification policy has passed without the alert being acknowledged. An escalation notification has been sent to the users or groups defined in the notification policy.
.archived - The alert is currently archived. An alert API request with a Type = Resolution converts the alert into an Archived state. When an incoming alert deduplicates an existing alert that is older than eight hours, the existing alert is archived (not the incoming alert).
Alert.Builder
Because the Alert class has so many properties, a builder class has been provided. The Alert.Builder class is currently the only way to create an Alert object, or to modify an existing Alert (which will create a new one, as Alert objects are immutable). A builder has two different constructors:
Alert.Builder() - Creates a new builder with all properties initialized to nil.
Alert.Builder(from: Alert) - Creates a new builder with all properties initialized to the values they have in the provided Alert.
While building, the following methods will set certain properties:
setSummary(_: String)
setLocation(_: String)
setSeverity(_: Alert.Severity)
setID(_: String)
setDate(_: Date)
setDate(fromString: String) - Creates a Date object from a formatted date string. The string must have the format yyyy-MM-dd HH:mm:ss.
setDate(fromIntInMilliseconds: Int) - Creates a Date object from an integer indicating the number of milliseconds since the epoch.
setStatus(_: Alert.Status)
setSource(_: String)
setApplicationsOrServices(_: [String])
setURLs(_: [Alert.URL])
setDetails(_: [Alert.Detail])
setEmailMessageToSend(_: Alert.EmailMessage)
setSMSMessageToSend(_: String)
setVoiceMessageToSend(_: String)
Each of the above methods returns an Alert.Builder object, so they can be chained together such as in the following example:
When all of the desired properties are set, the build() function will complete the build and return an Alert object. If the summary, location or severity variables are not set, build() will throw an error.
AlertService
The AlertService class is a static class used to create, retrieve and delete alerts from the Alert Notification service. All of the API functions are asynchronous, so callback functions must be provided if the application is to use the data returned from them. In order to authenticate with the service, a ServiceCredentials object is required for all functions (see “Credentials Setup” above). The following methods are provided:
Posts a provided Alert object to the Alert Notification service. The service returns an Alert object with additional fields initialized, such as shortId. While optional, a callback function with the signature (Alert?, Error?) -> Void must be included in order to view this returned alert or any possible errors. This method only throws errors that occur before the underlying POST request is made, or while making the request; any errors that occur after this point are passed through the callback function.
Retrieves an Alert object from the Alert Notification service corresponding to the provided shortId parameter. Note that this is not the same as the id parameter that is used for deduplication. Unlike the post function, a callback function with the signature (Alert?, Error?) -> Void is required for this method. This method only throws errors that occur before the underlying GET request is made, or while making the request; any errors that occur after this point are passed through the callback function.
Deletes an Alert object from the Alert Notification service corresponding to the provided shortId parameter. Note that this is not the same as the id parameter that is used for deduplication. An optional callback function with the signature (Error?) -> Void is required to view errors that may return from the Alert Notification service. This method only throws errors that occur before the underlying DELETE request is made, or while making the request; any errors that occur after this point are passed through the callback function.
Message
The Message class is used to specify a single instance of a message related to alerts and alert notifications. A Message has the following required properties:
subject - A String that acts as the subject line of the message. This can be no more than 80 characters long.
message - A String that acts as the body of the message. This can be no more than 1500 characters long.
recipients - An array of Message.Recipient objects that specifies which people, groups or integrations are to receive the message.
A Message may contain two more properties when it is sent by the Alert Notification service. These cannot be set by the application.
shortId - A shorter identifying String set by the Alert Notification service. This is the identifier that the application should use when attempting to call a GET request on a message.
internalTime - A Date object indicating when this message was posted.
All of the properties of a Message are immutable. Once a Message is created, it cannot be modified.
Unlike the Alert class, the Message class does not have a builder, and uses a simple constructor. If the length restrictions on subject or message are violated, the constructor will throw an error.
The Message.Recipient object is used to specify a person, group or integration that is to receive the message. A Message.Recipient object has the following properties:
name - A String specifying the name of the recipient.
type - A Message.RecipientType property indicating which kind of recipient this is (see Message.RecipientType below).
broadcast - A String used to indicate which integration this recipient is intended to hook into. This property is only required if the type is .integration.
A Message.Recipient only has one method, the constructor. If the type is .integration and the broadcast property is nil, this constructor will throw an error.
The Message.RecipientType type indicates which kind of recipient a Message.Recipient object is intended for. The type is an enum with the following possible values:
.user - An individual user.
.group - A user group.
.integration - An integrated service such as Slack.
MessageService
The MessageService class is a static class used to create and retrieve messages from the Alert Notification service. All of the API functions are asynchronous, so callback functions must be provided if the application is to use the data returned from them. In order to authenticate with the service, a ServiceCredentials object is required for all functions (see “Credentials Setup” above). The following methods are provided:
Posts a provided Message object to the Alert Notification service. The service returns a Message object with additional fields initialized, such as shortId. While optional, a callback function with the signature (Message?, Error?) -> Void must be included in order to view this returned message or any possible errors. This method only throws errors that occur before the underlying POST request is made, or while making the request; any errors that occur after this point are passed through the callback function.
Retrieves a Message object from the Alert Notification service corresponding to the provided shortId parameter. Note that this is not the same as the id parameter that is used for deduplication. Unlike the post function, a callback function with the signature (Message?, Error?) -> Void is required for this method. This method only throws errors that occur before the underlying GET request is made, or while making the request; any errors that occur after this point are passed through the callback function.
ServiceCredentials
The ServiceCredentials class is used to specify authentication credentials for the Alert Notification service on IBM Cloud. This is the object that is passed into all AlertService and MessageService functions. A ServiceCredentials object has the following required properties, directly corresponding to the credentials found in the IBM Cloud service (see the “Credentials Setup”) section above:
url - The URL that the SDK will connect to in order to create, retrieve and delete alerts or messages. Note that you should only include the URL provided in the service credentials up to and including /api.
name - The user name for the service.
password - The password used to authenticate with the service.
All of the ServiceCredentials properties are immutable, and cannot be changed after the object is created. The object only has one method, the constructor:
Alert Notification Service SDK
The Alert Notification Service SDK allows Swift developers to utilize the Alert Notifications IBM Cloud service in their applications, allowing for the proactive remediation of issues for applications running on IBM Cloud. Alerts and messages can be created, received and deleted through the use of this SDK. The servive can be acquired at this link, and the documentation is available at this link; both links may require a IBM Cloud account to access. A non-IBM Cloud Quick Start Guide can be viewed on the IBM website.
This SDK is for the consumption/usage of the Alert Notification service and not for administration of the service. Adding users, groups, notification policies, etc. should be done through the IBM Cloud dashboard.
Swift Version
The Alert Notification SDK works with the
4.1.2release version of the Swift binaries. You can download this version from Swift.org.Usage
In order to use this SDK, you need to add it to the dependencies in your application’s
Package.swiftfile.Once the
Package.swiftfile has been updated, import theAlertNotificationsmodule into your project.Credentials Setup
In order to use all of the features of the Alert Notifications SDK, you need an instance of the Alert Notifications service (be aware that this is a paid service only). Once you have obtained an instance of this service, select it from your IBM Cloud dashboard, and then click the “Service Credentials” tab. Create a credential if you have not already.
Once you have a credential created, select “View Credentials” and take note of the information that appears there. You will need the entire
nameandpasswordfields for your application, but you should only use theurlfield up to and including/api. Do not include any portions of theurlthat come after that.Using this information, you should create a
ServiceCredentialsobject in your application, which will be used in all functions that create, retrieve or delete alerts or messages.API
Alert
The
Alertclass is used to specify a single instance of an alert. AnAlerthas the following required properties:summary- AStringthat gives a short description of the alert.location- AStringthat describes the area where the condition that caused the alert occurred.severity- A property of typeAlert.Severitythat describes the severity of the alert.An
Alertcan also be given these additional optional properties by the application:id- AStringgiving this alert a unique identifier, which is used for deduplication.date- ADateobject indicating when the alert was raised.status- A property of typeAlert.Statusindicating whether or not the alert has been resolved. The default value is.problem.source- AStringindicating the source of the alert condition.applicationsOrServices- An array ofStrings, indicating which IBM Cloud applications or services are impacted by this alert.URLs- An array ofAlert.URLobjects, to supply additional links associated with the alert.details- An array ofAlert.Detailobjects, to provide additional key-value pairs as details associated with the alert.emailMessageToSend- AnAlert.EmailMessageobject specifying an e-mail message to be sent to recipients when the alert is posted. It may optionally be formatted using Mustache templates.SMSMessageToSend- AStringspecifying an SMS message to be sent to recipients when the alert is posted. It may optionally be formatted using Mustache templates.voiceMessageToSend- AStringspecifying a voice message to be sent to recipients when the alert is posted. It may optionally be formatted using Mustache templates.Lastly, an
Alertobject may contain several more properties when it is sent by the Alert Notification service. These cannot be set by the application.shortId- A shorter identifyingStringset by the Alert Notification service. This is the identifier that the application should use when attempting to call aGETorDELETErequest on an alert.notificationState- A property of typeAlert.NotificationStateindicating where in the reporting process the alert currently resides.firstOccurrence- ADateobject indicating when this alert was first sent.lastNotified- ADateobject indicating when the last notification regarding this alert was sent.internalTime- ADateobject indicating when this alert was posted.expired- ABoolindicating whether the alert is still valid or has expired. Expired alerts will not appear in the Alert Viewer UI.All of the properties of an
Alertare immutable. Once anAlertis created, it cannot be modified. TheAlert.Builderclass can be used to create a modified version of an existingAlert.Alert.URL
The
Alert.URLobject is used to provide additional informative links alongside an alert, such as a link to a runbook. AnAlert.URLobject has the following properties:description- A briefStringdescription of the link.URL- AStringcontaining the URL of the link.An
Alert.URLonly has one method, the constructor.Alert.Detail
The
Alert.Detailobject is used to provide additional details alongside an alert, in the form of key-value pairs. AAlert.Detailobject has the following properties:name- AStringindicating the detail name.value- AStringindicating the corresponding value.An
Alert.Detailonly has one method, the constructor.Alert.EmailMessage
The
Alert.EmailMessageobject is used to specify an e-mail message to be sent along with an alert. AnAlert.EmailMessageobject has the following properties:subject- AStringcontaining the subject line.body- AStringcontaining the e-mail body.An
Alert.EmailMessageonly has one method, the constructor.Alert.Severity
The
Alert.Severitytype indicates the level of severity associated with an alert. The type is an enum with the following possible values, as seen in the Alert Notification service documentation:.fatal- A service-terminating condition has occurred. Immediate action is required..critical- A service-affecting condition has occurred, and corrective action is immediately required. For example, a device has gone out of service and needs to be restored..major- A service-affecting problem occurred. Corrective action is urgently required. For example, a severe degradation occurred in the capability of a device and full capability must be restored..minor- A non-service affecting problem occurred; take corrective action to prevent alerts of higher severity. For example, a problem occurred on a device but it does not impair the capacity or performance of the device..warning- Potential or impending problems were detected. Further investigation is needed to prevent alerts of higher severity..indeterminate- The severity level cannot be determined from the device..clear- Indicates that the alert was resolved, either manually by an operator, or automatically by a process that determined the fault condition no longer exists.Alert.Status
The
Alert.Statustype indicates whether or not an alert has been acknowledged or resolved. The type is an enum with the following possible values:.problem- The alert has been posted but no action has been taken..acknowledged- The alert has been seen and acknowledged, and action is being taken to resolve it..resolved- The alert has been resolved.Alert.NotificationState
The
Alert.NotificationStatetype indicates in greater detail if users have been alerted to the problem. The type is an enum with the following possible values:.unnotified- Alert Notification has received the alert but no notification was generated. Indicates that an alert does not match any existing notification policy..notified- Alert Notification has matched the alert to a notification policy and triggered a notification, which was sent to the users or groups defined in the notification policy. No contact has yet acknowledged the alert. Indicates that no one is working on an alert..acknowledged- Indicates to Alert Notification that the alert is being worked on. A contact has acknowledged the alert, either from the notification or in the Alert Viewer. Alerts can switch between the acknowledged and unacknowledged states, for example, if an alert was mistakenly acknowledged..escalated- A time period specified in the notification policy has passed without the alert being acknowledged. An escalation notification has been sent to the users or groups defined in the notification policy..archived- The alert is currently archived. An alert API request with a Type = Resolution converts the alert into an Archived state. When an incoming alert deduplicates an existing alert that is older than eight hours, the existing alert is archived (not the incoming alert).Alert.Builder
Because the
Alertclass has so many properties, a builder class has been provided. TheAlert.Builderclass is currently the only way to create anAlertobject, or to modify an existingAlert(which will create a new one, asAlertobjects are immutable). A builder has two different constructors:Alert.Builder()- Creates a new builder with all properties initialized to nil.Alert.Builder(from: Alert)- Creates a new builder with all properties initialized to the values they have in the providedAlert.While building, the following methods will set certain properties:
setSummary(_: String)setLocation(_: String)setSeverity(_: Alert.Severity)setID(_: String)setDate(_: Date)setDate(fromString: String)- Creates aDateobject from a formatted date string. The string must have the formatyyyy-MM-dd HH:mm:ss.setDate(fromIntInMilliseconds: Int)- Creates aDateobject from an integer indicating the number of milliseconds since the epoch.setStatus(_: Alert.Status)setSource(_: String)setApplicationsOrServices(_: [String])setURLs(_: [Alert.URL])setDetails(_: [Alert.Detail])setEmailMessageToSend(_: Alert.EmailMessage)setSMSMessageToSend(_: String)setVoiceMessageToSend(_: String)Each of the above methods returns an
Alert.Builderobject, so they can be chained together such as in the following example:When all of the desired properties are set, the
build()function will complete the build and return anAlertobject. If thesummary,locationorseverityvariables are not set,build()will throw an error.AlertService
The
AlertServiceclass is a static class used to create, retrieve and delete alerts from the Alert Notification service. All of the API functions are asynchronous, so callback functions must be provided if the application is to use the data returned from them. In order to authenticate with the service, aServiceCredentialsobject is required for all functions (see “Credentials Setup” above). The following methods are provided:Posts a provided
Alertobject to the Alert Notification service. The service returns anAlertobject with additional fields initialized, such asshortId. While optional, a callback function with the signature(Alert?, Error?) -> Voidmust be included in order to view this returned alert or any possible errors. This method only throws errors that occur before the underlying POST request is made, or while making the request; any errors that occur after this point are passed through the callback function.Retrieves an
Alertobject from the Alert Notification service corresponding to the providedshortIdparameter. Note that this is not the same as theidparameter that is used for deduplication. Unlike thepostfunction, a callback function with the signature(Alert?, Error?) -> Voidis required for this method. This method only throws errors that occur before the underlying GET request is made, or while making the request; any errors that occur after this point are passed through the callback function.Deletes an
Alertobject from the Alert Notification service corresponding to the providedshortIdparameter. Note that this is not the same as theidparameter that is used for deduplication. An optional callback function with the signature(Error?) -> Voidis required to view errors that may return from the Alert Notification service. This method only throws errors that occur before the underlying DELETE request is made, or while making the request; any errors that occur after this point are passed through the callback function.Message
The
Messageclass is used to specify a single instance of a message related to alerts and alert notifications. AMessagehas the following required properties:subject- AStringthat acts as the subject line of the message. This can be no more than 80 characters long.message- AStringthat acts as the body of the message. This can be no more than 1500 characters long.recipients- An array ofMessage.Recipientobjects that specifies which people, groups or integrations are to receive the message.A
Messagemay contain two more properties when it is sent by the Alert Notification service. These cannot be set by the application.shortId- A shorter identifyingStringset by the Alert Notification service. This is the identifier that the application should use when attempting to call aGETrequest on a message.internalTime- ADateobject indicating when this message was posted.All of the properties of a
Messageare immutable. Once aMessageis created, it cannot be modified.Unlike the
Alertclass, theMessageclass does not have a builder, and uses a simple constructor. If the length restrictions onsubjectormessageare violated, the constructor will throw an error.Message.Recipient
The
Message.Recipientobject is used to specify a person, group or integration that is to receive the message. AMessage.Recipientobject has the following properties:name- AStringspecifying the name of the recipient.type- AMessage.RecipientTypeproperty indicating which kind of recipient this is (seeMessage.RecipientTypebelow).broadcast- AStringused to indicate which integration this recipient is intended to hook into. This property is only required if thetypeis.integration.A
Message.Recipientonly has one method, the constructor. If thetypeis.integrationand thebroadcastproperty isnil, this constructor will throw an error.Message.RecipientType
The
Message.RecipientTypetype indicates which kind of recipient aMessage.Recipientobject is intended for. The type is an enum with the following possible values:.user- An individual user..group- A user group..integration- An integrated service such as Slack.MessageService
The
MessageServiceclass is a static class used to create and retrieve messages from the Alert Notification service. All of the API functions are asynchronous, so callback functions must be provided if the application is to use the data returned from them. In order to authenticate with the service, aServiceCredentialsobject is required for all functions (see “Credentials Setup” above). The following methods are provided:Posts a provided
Messageobject to the Alert Notification service. The service returns aMessageobject with additional fields initialized, such asshortId. While optional, a callback function with the signature(Message?, Error?) -> Voidmust be included in order to view this returned message or any possible errors. This method only throws errors that occur before the underlying POST request is made, or while making the request; any errors that occur after this point are passed through the callback function.Retrieves a
Messageobject from the Alert Notification service corresponding to the providedshortIdparameter. Note that this is not the same as theidparameter that is used for deduplication. Unlike thepostfunction, a callback function with the signature(Message?, Error?) -> Voidis required for this method. This method only throws errors that occur before the underlying GET request is made, or while making the request; any errors that occur after this point are passed through the callback function.ServiceCredentials
The
ServiceCredentialsclass is used to specify authentication credentials for the Alert Notification service on IBM Cloud. This is the object that is passed into allAlertServiceandMessageServicefunctions. AServiceCredentialsobject has the following required properties, directly corresponding to the credentials found in the IBM Cloud service (see the “Credentials Setup”) section above:url- The URL that the SDK will connect to in order to create, retrieve and delete alerts or messages. Note that you should only include the URL provided in the service credentials up to and including/api.name- The user name for the service.password- The password used to authenticate with the service.All of the
ServiceCredentialsproperties are immutable, and cannot be changed after the object is created. The object only has one method, the constructor:License
This Swift package is licensed under Apache 2.0. Full license text is available in LICENSE.