...
Expand | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
You will require a GitHub repository/Repo to store the scripts themselves.
|
Tip |
---|
If you have your Personal Access Token and your Repository we can start scripting. |
2. Scripting an Example Python Check
...
We will be coding a straightforward Python check for its use in ASM. This Python check will call a URL that we specify, and it will return the response that we received from this URL.
Step | Screenshot | |||||
---|---|---|---|---|---|---|
Import Libraries (as needed)
After Python is up, import the requests {a library for doing any URL call}, sys, JSON, and time libraries into the virtual environment.
|
| |||||
Set the URL RequestSet the URL call to be an argument. Make a GET request against that URL. The response will need to set a default URL to call, if we don't have an argument. Set exceptions as 'e'. and The URL will be http://google.com. Our script returned a 200 status code. Our script will call either http://google.com or a URL that we provide. |
| |||||
Add JSON formatWhat JSON format does Apica’s back-end system expect? Apica’s back-end is based on MongoDB. MongoDB allows us to have an expandable result format. So that's a result format that you can upload almost anything to, and it will become a part of the result. We have the start and end times that we need. So the start and end times will be the start and end times of your check in ASM (These will show up in the check Result view in ASM).
Note: we're doing the Set a message. So our message is “URL call returned status code”, then adds a string response (the returned status code) the value that you see here, in the JSON format, it will be the value of the results. So this is the main value that you will see. Usually, it's the duration, but it could be anything. To show this, let's say that it's the status code, because this is what we're saying in the message. So we'll set it to |
| |||||
Expanding the Returned valuesLet's expand this a little bit; we have an expandable JSON format, so let's give ourselves more content and data. How many headers do we have here? What is the length of the returned content? Add these lines below the "value" (line 16 above) to return the response header count and the size of the content. |
|
Although simple, the above is a perfectly valid example of a Python Scripted Check. It uses Python standard libraries and the 'requests' library, included in the Apica Scripted Check Private Agent installation.
...
Some additional points to the previous steps.
Step | Screenshot |
---|---|
About Adding JSON Return ValuesWhen we simply added some values into the JSON, we could have added any sort of content that you want to include. In the previous case, we added these:
| |
Adding More ValuesA very powerful concept that Apica supports with Scripted Checks: Add more fields to add more values. Let’s capture the headers coming out of our response by creating another field and calling it ' Add | Anything that JSON supports is supported in this result format. So you can add lists, inner dictionaries, null values, integers, booleans, etc. to this JSON. |
Later, we will show you how to retrieve this information through the ASM API. So anything that you can get from your code, you can get through the ASM API as your check is run.
...
We've uploaded a script into GitHub, we will use the script to create a check in ASM.
Step | Screenshot | |||||||
---|---|---|---|---|---|---|---|---|
Open ASMNavigate to New Check+ | ||||||||
Add Script via Run Python.The Run Python Scripted Check type icon should be displayed. If you don't have this, you may need to get it unlocked. Please ask your sales team for access because this is a more advanced check, not available for customers by default. | ||||||||
Creating a Run Python Check, Step 1Enter "New Test Check." Add any description and relevant tags, and then click Next. | ||||||||
Run Python Step 2Configure this check
| Resource URL/Github URL: This answers the question, "Where do we find your script?" This could be an HTTP download link, or it can be to your GitHub repository. For this example, go to your repository and copy+paste the URL here, ending with the branch ( Enter the URL that this script resides at. In this example, it resides in a GitHub Repo at Resource Auth Type: This type of resource authorization will be needed, GitHub or HTTP. This example uses GitHub. But if you have your file on an HTTP server, you could use HTTP as the type. Resource Auth: Resource authorization is required. The authorization header allows you to download resources.
Resource Path: This is the path inside your repository to the scripts you want to run. Our example scripts are just in the base level repository, so enter Secondary Resource: If your script requires any sort of additional files, you can use this secondary resource to download another file. However, you can also start your script off by downloading the file directly: That way, you can use any sort of security you want to protect it. For example, you could have a secondary resource, like a certificate protected by OAuth: Your script could go through the whole OAuth process and then use the local file. In this example, the secondary resource will be blank because it is unnecessary. It is possible to reference subfolders from a base directory using the “Secondary Resource” field. For instance, if your use case requires a “/python/main.py” file and main.py depends on a module defined in /python/modules, you can specify /python, and the check runner will recognize the module because it is able to “search” the /python folder for secondary resources. For example, if “local_module_sample.py” depends on a subfolder in /python, you can specify the project like so: Script Runner: Python is pre-selected (as the only choice). Script Arguments: These will be provided if we enter them on the command lines. Enter Location: So now let's look at all of our private locations to use this. This example uses the Sweden Stockholm Amazon location. Click Next, | |||||||
Step 3 Interval, Thresholds & Monitor Groups In this example, we will be creating a manual check. Select an interval, if needed, and check the groups you want this check to be a part of. Click Next. | ||||||||
Confirm your CheckA Confirmation Page will be displayed for you to either go Back to edit it or Create to continue. If you are satisfied, you click Create to create the check. | ||||||||
Check Created
Apica generally recommends these settings for testing because what can happen is too long with the default behaviors. If Max Attempts remains at three and the Attempt Pause for each attempt is 30 seconds, this means that your test check could wait up to 90 seconds if it's failing. And so these settings don't help when trying just to debug something; it's better to have the information that your check failed from the beginning. Click the Check Details button in the upper right as we're ready to run our check. | ||||||||
Check Details PageThe Check Details page has a section called "Status Last 24 Hours," and beneath that will be a "Run Check" icon. Click to run manually. | ||||||||
Check ResultsIn this example, we set the “Last Value” to the status code by assigning it to the variable “value” in the script. |
| |||||||
Drill downDrilling into these results, we see the Result value (ms) is 200 because, even though the typical value for a result is the number of milliseconds it took to respond, we specified in our JSON that the value would be the response status code, so the 200 is displayed in its place. The number of Attempts is shown as 1, and beneath the result, code is the JSON that we specified: |
| |||||||
Messaging via JSONFrom Returned Value Table View, note the message it says URL call return status code 200. But this is the message that we sent inside of our JSON. So message when you set it will be placed here. So you can record any data you like, and it will show up here. |
Any metrics data that you want to record, you can keep for any data mining.
...
After creating our new check, using a Python script that we uploaded into GitHub, we know that the script presents the HTTP status code of the URL called as the value of the result in ASM. Next, we will use the ASM API to get information about this check.
Step | Screenshot |
---|---|
Open ASMNavigate to Tools, API Select a check using the drop-down box | |
Select the Target check for the APIWe've selected the Test Demo check. Beneath that check selection is some example API calls to help you get started quickly. We've copied the Last Result call pasted it into Postman to run it. |
|
Postman Results of Standard API Check EndpointHere, via API, is the last value of your check run, 200. | 200 is the last status code of the URL. This is nice but is just a raw number without data or context, and there's no JSON used. This could be used just for a small script or something you can pull the last result of your check maybe test it for something. A better API endpoint is the Checks Generic Check ID Results API endpoint. |
Apica API for Generic ResultsThis API endpoint looks up the results for checks that present a result type of generic. 'Generic' checks mean that they have the expandable JSON result format we saw in Step 5 above. | Generic type Checks: Run Python scripts, Run Javascript, Run Java, and (when released) Run Azure Cloud, Run Lamda, etc. |
Postman Results of Generic API Check EndpointIn Postman, using this API endpoint:
Instead of the earlier (for comparison):
| The API documentation for Generic Check shows these capabilities:
This is a POST endpoint: Note the JSON results returned above. So you may need to use these in some other API call to lookup even more information. In this example, we're just going to use the most recent because that is the simplest and easiest to show. |
The Result ObjectNote the headers that returned and (not shown in the screen capture) the content size, the header count, etc. All of the information you recorded in your script comes through the API. | What you choose to do next with these metrics is all up to your needs.
|
Review:
We've scripted our check (in this example, Python).
We've uploaded a script to GitHub.
We’ve created our ASM check using a script in a GitHub repository.
We've run our check in ASM and viewed the results.
We've pulled the results for the API, including the custom JSON.
...