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.
The Alert Notification SDK works with the 4.1.2 release version of the Swift binaries. You can download this version from Swift.org.
In order to use this SDK, you need to add it to the dependencies in your application's Package.swift file.
import PackageDescription
let package = Package(
name: "MyAlertEnabledSwiftProject",
...
dependencies: [
.package(url: "https://github.com/IBM-Swift/alert-notification-sdk.git", .upToNextMajor(from: "2.0.0")),
...
]
...
)
Once the Package.swift file has been updated, import the AlertNotifications module into your project.
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>")
The Alert class is used to specify a single instance of an alert. An Alert has 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 Alert can 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 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 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 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.
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 briefStringdescription of the link.URL- AStringcontaining the URL of the link.
An Alert.URL only has one method, the constructor.
Alert.URL(description: String, URL: String)
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- AStringindicating the detail name.value- AStringindicating the corresponding value.
An Alert.Detail only has one method, the constructor.
Alert.Detail(name: String, value: String)
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- AStringcontaining the subject line.body- AStringcontaining the e-mail body.
An Alert.EmailMessage only has one method, the constructor.
Alert.EmailMessage(subject: String, body: String)
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.
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.
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).
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 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.Builder object, so they can be chained together such as in the following example:
Alert.Builder().setSummary("summary").setLocation("location").setSeverity(.fatal).build()
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.
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:
AlertService.post(_: Alert, usingCredentials: ServiceCredentials, callback: ((Alert?, Error?) -> Void)? = nil) throws
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.
AlertService.get(shortId: String, usingCredentials: ServiceCredentials, callback: (Alert?, Error?) -> Void) throws
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.
AlertService.delete(shortId: String, usingCredentials: ServiceCredentials, callback: ((Error?) -> Void)? = nil) throws
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.
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- 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 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 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 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.
Message(subject: String, message: String, recipients: [Message.Recipient]) throws
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- 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.Recipient only has one method, the constructor. If the type is .integration and the broadcast property is nil, this constructor will throw an error.
Message.Recipient(name: String, type: Message.RecipientType, broadcast: String? = nil) throws
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.
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:
MessageService.post(_: Message, usingCredentials: ServiceCredentials, callback: ((Message?, Error?) -> Void)? = nil) throws
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.
MessageService.get(shortId: String, usingCredentials: ServiceCredentials, callback: (Message?, Error?) -> Void) throws
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.
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:
ServiceCredentials(url: String, name: String, password: String)
This Swift package is licensed under Apache 2.0. Full license text is available in LICENSE.