Skip to Content
Technical Articles

Send notification when target endpoint is down using SAP Cloud Platform Alert Notification: Part 2

SAP Cloud Platform API Management enables you to manage the end to end lifecycle of your APIs, expose your APIs securely to your developer / partner ecosystem for omni-channel access.  Since the APIs are managed are SAP Cloud Platform API Management , it is easier to track whenever the target service endpoint is unavailable, detect any threat like a sudden spike in the number of API calls. SAP Cloud Platform Alert Notification enables providers to publish alerts and for consumers to subscribe to these alerts.  To know more about features, pricing and data center availability of SAP Cloud Platform Alert Notification service visit SAP Cloud Platform site.  Using SAP Cloud Platform Alert Notification service you can publish alerts from SAP Cloud Platform API Management to inform the consumer whenever such changes are detected.

In this blog series, we have showcased how to use the SAP Cloud Platform Alert Notification service to send alerts email, whenever the target service managed by SAP Cloud Platform API Management is unavailable. In the part 1 of the blog  the steps to configure a subscription in SAP Cloud Platform Alert Notification service, so that we can raise alerts whenever the target service managed by SAP Cloud Platform API Management is down was showcased. In this part 2 of the blog, we will learn the steps to publish alert to SAP Cloud Platform Alert Notification when the target service managed by SAP Cloud Platform API Management is unavailable.

Pre-requisite

To keep this blog simple,  we had used an existing API Proxy which is linked to an API Provider  which fetches the data from SAP Gateway ES5 system. To learn about creating API Provider, API Proxy on SAP Cloud Platform API Management visit us at developers.sap.com .

Logon to your SAP Cloud Platform trial and Navigate to the Neo Environment.

Navigate to the Services tab, search for API Management service tile and click to open SAP API Management service.

Click on link Access API Portal to open API Portal.

 

 

Store Alert Notification API credentials in Key Value map

 

In this section, we will learn how to store the API credentials generated from the SAP Cloud Platform Alert Notification service in the key value map store in secured way. This credentials can then be used later in the API Proxy execution flow to publish alerts via the Producer API from SAP Cloud Platform Alert Notification.

Navigate to Configure tab from the hamburger icon, then select Key Value Maps and click Create.

 

In the Create Key Value Map wizard, provide a name for the store say ANSCredentials, check the option Encrypt Key Value Map.  The name of the store would be used from the API Proxy Key value map policies and in case you would be providing a different name then use the same in the API Proxy policy as well.

Click on the Add button to add the following entries.

 

Key Value
user Client id generated by the SAP Cloud Platform Alert Notification
password Client Secret generated by the SAP Cloud Platform Alert Notification

 

Details to get your our own client id and secret from the SAP Cloud Platform Alert Notification is captured in this blog under section Acquiring API Access Credentials.

Note:-  The key field of the Entries would be used in the Key value map policies of the API Proxy and therefore in case you have provided a different key name then the same key name should be used in the policy.

Click on the Save button to persist the changes.

Update API Proxy to raise alert to SAP Cloud Platform Alert Notification

 

SAP Cloud Platform Alert Notification service provides producer API that can be used to raise custom alerts from SAP Cloud Platform API Management. The Producer API is a REST based API , which can be invoked either using Basic or OAuth authentication.  In this blog, we have used the basic authentication based approach.  To set the basic authentication header we will be using the Key value map policy to read the API credentials stored in the key value map named ANSCredentials and then later we will be using the BasicAuthentication policy to generate the credentials in Basic Auth format. To publish the alerts via the Producer API, we will be using a JavaScript policy.

In this section, you would learn how an existing API Proxy can be modified to raise alert to SAP Cloud Platform Alert Notification service  when the target service is down. To learn about creating API Provider, API Proxy on SAP Cloud Platform API Management visit us at developers.sap.com .

Navigate to Develop tab from the hamburger icon, then select the tab APIs and select any of your existing API Proxy.  In the blog we had used an API Proxy named SAPGatewayBasicDemo.

Click on the Policies to open up the Policy Designer

To enter the edit mode, click on the Edit button.

 

The policies to check for the target service unavailable would be attached to the proxy endpoint PostFlow response stream, so that we can read the status of the target service response. If the target server is down or un-available or the calls times out, it typically sets the response status as 503 .ie. Service Unavailable.

Select PostFlow from the ProxyEndPoint  section and then click on the + button next to the Key Value Map Policy available under the Mediation Policies segment.

In the Create policy screen specify the policy name say readANSCredentials, select Stream as Outgoing Response  and then click on the Add button.

 

Select the policy newly added readANSCredentials policy then add the following policy snippet to read the key value map from the map store named ANSCredentials and entries with key name user, password.

<KeyValueMapOperations mapIdentifier="ANSCredentials" async="true" continueOnError="false" enabled="true" xmlns="http://www.sap.com/apimgmt">
<Get assignTo="private.user" index="1">
    <Key>
      <Parameter>user</Parameter>
    </Key>
  </Get>
  <Get assignTo="private.password" index="1">
    <Key>
      <Parameter>password</Parameter>
    </Key>
  </Get>
<Scope>environment</Scope>
</KeyValueMapOperations>

 

In the Condition String text box, enter the following snippet so that the Key Value map policy is executed only when the target response status code is 503, ie. service unavailable or the connection has timed out.

response.status.code = "503" or response.status.code = 503

 

Click on the + button next to the Basic Authentication Policy available under the Security Policies segment.

 

 

In the Create policy screen specify the policy name say setANSCredentials, select Stream as Outgoing Response  and then click on the Add button.

 

Select the policy newly added setANSCredentialspolicy then add the following policy snippet to encode the user, password read from the key value map policies into basic authentication format and store it a local flow variable named sapapim.anscredentials.

<BasicAuthentication async='true' continueOnError='false' enabled='true' xmlns='http://www.sap.com/apimgmt'>
 	<!-- Operation can be Encode or Decode -->
	<Operation>Encode</Operation>
	<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
	<User ref='private.user'></User>
	<Password ref='private.password'></Password>
 	<AssignTo createNew="false">sapapim.anscredentials</AssignTo>
</BasicAuthentication>

In the Condition String text box, enter the following snippet so that the Basic Authentication map policy is executed only when the target response status code is 503, ie. service unavailable or the connection has timed out.

response.status.code = "503" or response.status.code = 503

 

Click on the + button next to the JavaScript Policy available under the Extension Policies segment.

 

In the Create policy screen specify the policy name say raiseAlerts, select Stream as Outgoing Response and then click on the Add button.

 

Select the policy newly added raiseAlert then add the following policy snippet to invoke the JavaScript named maincode.

<!-- this policy allows us to execute java script code during execution of an API Proxy -->
<Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" xmlns='http://www.sap.com/apimgmt'>
	<ResourceURL>jsc://maincode.js</ResourceURL>
</Javascript> 

 

In the Condition String text box, enter the following snippet so that the Basic Authentication map policy is executed only when the target response status code is 503, ie. service unavailable or the connection has timed out.

response.status.code = "503" or response.status.code = 503

 

Click on the + button next to Scripts to add a new script named maincode.js

 

 

In the Create Script dialog, enter the name as maincode and then select Create for the Script dropdown. Click Add to add a Javascript named maincode.

 

 

Select the newly added JavaScript file maincode and in the Script Resource copy paste the following code snippet.

var headers = {
      'Content-Type' : 'application/json;charset=utf-8',
      'Accept' : 'application/json;charset=utf-8',
      'Authorization' : context.getVariable("sapapim.anscredentials")
    };
    
var payload = {
  "eventType": "targetserviceunavailable",
  "resource": {
    "resourceName": context.getVariable("apiproxy.name"),
    "resourceType": "app",
    "tags": {
      "env": "prod"
    }
  },
  "severity": "FATAL",
  "category": "ALERT",
  "subject": "API Proxy " + context.getVariable("apiproxy.name") + " target server is down",
  "body": "The target service for API Proxy is down. Logon to your API Portal dashboard for more information"
};

var myRequest = new Request("https://{your_sap_cloud_platform_alert_notification_producer_url}/v1/resource-events","POST",headers,JSON.stringify(payload));
var exchange = httpClient.send(myRequest);

 

Note :- The URL of the myRequest parameter of the above policy snippet would have to be changed to your SAP Cloud Platform Alert Notification producer API endpoint.

The policy snippet can be adjusted to custom the alert information based on your scenario. More about the producer APIs of SAP Cloud Platform Alert Notification is available in SAP API Business Hub.

Click on the update button to save all the policy changes

The default behavior of SAP Cloud Platform API Management is to ignore all the polices attached in the outgoing response stream in case of error received from the target server.  To process the polices in case of the target server response, the success.codes target endpoint properties can be set to 2xx,4xx,5xx. This would enable the policies to raise the alerts to SAP Cloud Platform Alert Notification service to be invoked in case of target server failure like service unavailable.  More details about the target endpoint properties is available in help documentation .

Navigate to the Target EndPoint Property tab, from the Target EndPoint Properties, click Add to enter the property as follows :-

Name Value
success.codes  2xx,4xx,5xx

 

Click on Save button to persist all the changes to API Proxy.

 

 

With this we have successfully updated the API Proxy to raise alert to SAP Cloud Platform Alert Notification service whenever the target service is unavailable.

Finally testing the flow

 

To simulate the service unavailable error, either we would have to bring the target service down or to simplify the testing, we can change the target endpoint to a target system that doesn’t exist.  For testing the flow, API Provider was changed to a Provider named SAPGateway, which points to host or port that doesn’t exist.

Just invoke your API Proxy endpoint as show in the screenshot below

 

 

If the target service is not accessible or the connection times out you would receive an alert notification email to your subscribed email address provided in SAP Cloud Platform Alert Notification.

 

 

For more blogs on SAP Cloud Platform API Management visit us at SAP Community

 

Be the first to leave a comment
You must be Logged on to comment or reply to a post.