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.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 theAlertNotifications
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
andpassword
fields for your application, but you should only use theurl
field up to and including/api
. Do not include any portions of theurl
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.API
Alert
The
Alert
class is used to specify a single instance of an alert. AnAlert
has the following required properties:summary
- AString
that gives a short description of the alert.location
- AString
that describes the area where the condition that caused the alert occurred.severity
- A property of typeAlert.Severity
that describes the severity of the alert.An
Alert
can also be given these additional optional properties by the application:id
- AString
giving this alert a unique identifier, which is used for deduplication.date
- ADate
object indicating when the alert was raised.status
- A property of typeAlert.Status
indicating whether or not the alert has been resolved. The default value is.problem
.source
- AString
indicating the source of the alert condition.applicationsOrServices
- An array ofString
s, indicating which IBM Cloud applications or services are impacted by this alert.URLs
- An array ofAlert.URL
objects, to supply additional links associated with the alert.details
- An array ofAlert.Detail
objects, to provide additional key-value pairs as details associated with the alert.emailMessageToSend
- AnAlert.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
- AString
specifying an SMS message to be sent to recipients when the alert is posted. It may optionally be formatted using Mustache templates.voiceMessageToSend
- AString
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 identifyingString
set by the Alert Notification service. This is the identifier that the application should use when attempting to call aGET
orDELETE
request on an alert.notificationState
- A property of typeAlert.NotificationState
indicating where in the reporting process the alert currently resides.firstOccurrence
- ADate
object indicating when this alert was first sent.lastNotified
- ADate
object indicating when the last notification regarding this alert was sent.internalTime
- ADate
object indicating when this alert was posted.expired
- ABool
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 anAlert
is created, it cannot be modified. TheAlert.Builder
class can be used to create a modified version of an existingAlert
.Alert.URL
The
Alert.URL
object is used to provide additional informative links alongside an alert, such as a link to a runbook. AnAlert.URL
object has the following properties:description
- A briefString
description of the link.URL
- AString
containing the URL of the link.An
Alert.URL
only has one method, the constructor.Alert.Detail
The
Alert.Detail
object is used to provide additional details alongside an alert, in the form of key-value pairs. AAlert.Detail
object has the following properties:name
- AString
indicating the detail name.value
- AString
indicating the corresponding value.An
Alert.Detail
only has one method, the constructor.Alert.EmailMessage
The
Alert.EmailMessage
object is used to specify an e-mail message to be sent along with an alert. AnAlert.EmailMessage
object has the following properties:subject
- AString
containing the subject line.body
- AString
containing the e-mail body.An
Alert.EmailMessage
only has one method, the constructor.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. TheAlert.Builder
class is currently the only way to create anAlert
object, or to modify an existingAlert
(which will create a new one, asAlert
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 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 aDate
object from a formatted date string. The string must have the formatyyyy-MM-dd HH:mm:ss
.setDate(fromIntInMilliseconds: Int)
- Creates aDate
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 anAlert
object. If thesummary
,location
orseverity
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, aServiceCredentials
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 anAlert
object with additional fields initialized, such asshortId
. 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 providedshortId
parameter. Note that this is not the same as theid
parameter that is used for deduplication. Unlike thepost
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 providedshortId
parameter. Note that this is not the same as theid
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. AMessage
has the following required properties:subject
- AString
that acts as the subject line of the message. This can be no more than 80 characters long.message
- AString
that acts as the body of the message. This can be no more than 1500 characters long.recipients
- An array ofMessage.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 identifyingString
set by the Alert Notification service. This is the identifier that the application should use when attempting to call aGET
request on a message.internalTime
- ADate
object indicating when this message was posted.All of the properties of a
Message
are immutable. Once aMessage
is created, it cannot be modified.Unlike the
Alert
class, theMessage
class does not have a builder, and uses a simple constructor. If the length restrictions onsubject
ormessage
are violated, the constructor will throw an error.Message.Recipient
The
Message.Recipient
object is used to specify a person, group or integration that is to receive the message. AMessage.Recipient
object has the following properties:name
- AString
specifying the name of the recipient.type
- AMessage.RecipientType
property indicating which kind of recipient this is (seeMessage.RecipientType
below).broadcast
- AString
used to indicate which integration this recipient is intended to hook into. This property is only required if thetype
is.integration
.A
Message.Recipient
only has one method, the constructor. If thetype
is.integration
and thebroadcast
property isnil
, this constructor will throw an error.Message.RecipientType
The
Message.RecipientType
type indicates which kind of recipient aMessage.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, aServiceCredentials
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 aMessage
object with additional fields initialized, such asshortId
. 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 providedshortId
parameter. Note that this is not the same as theid
parameter that is used for deduplication. Unlike thepost
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 allAlertService
andMessageService
functions. AServiceCredentials
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:License
This Swift package is licensed under Apache 2.0. Full license text is available in LICENSE.