Merge pull request #48 from franznemeth/feature/http-status
implemented http_status platform
This commit is contained in:
commit
bee98e74f9
94
dashmachine/platform/http_status.py
Normal file
94
dashmachine/platform/http_status.py
Normal file
@ -0,0 +1,94 @@
|
||||
"""
|
||||
|
||||
##### http_status
|
||||
Make a http call on a given URL and display if the service is online.
|
||||
```ini
|
||||
[variable_name]
|
||||
platform = http_status
|
||||
resource = https://your-website.com/api
|
||||
method = get
|
||||
authentication = basic
|
||||
username = my_username
|
||||
password = my_password
|
||||
headers = {"Content-Type": "application/json"}
|
||||
return_codes = 2xx,3xx
|
||||
```
|
||||
> **Returns:** a right-aligned colored bullet point on the app card.
|
||||
|
||||
| Variable | Required | Description | Options |
|
||||
|-----------------|----------|-----------------------------------------------------------------|-------------------|
|
||||
| [variable_name] | Yes | Name for the data source. | [variable_name] |
|
||||
| platform | Yes | Name of the platform. | rest |
|
||||
| resource | Yes | Url of rest api resource. | url |
|
||||
| method | No | Method for the api call, default is GET | GET,HEAD,OPTIONS,TRACE|
|
||||
| authentication | No | Authentication for the api call, default is None | None,basic,digest |
|
||||
| username | No | Username to use for auth. | string |
|
||||
| password | No | Password to use for auth. | string |
|
||||
| headers | No | Request headers | json |
|
||||
| return_codes | No | Acceptable http status codes, x is handled as wildcard | string |
|
||||
|
||||
> **Working example:**
|
||||
>```ini
|
||||
>[http_status_test]
|
||||
>platform = http_status
|
||||
>resource = https://google.com
|
||||
>return_codes = 2xx,3xx
|
||||
>
|
||||
>[Google]
|
||||
>prefix = https://
|
||||
>url = google.com
|
||||
>icon = static/images/apps/default.png
|
||||
>open_in = this_tab
|
||||
>data_sources = http_status_test
|
||||
>```
|
||||
|
||||
"""
|
||||
|
||||
from requests import Request, Session
|
||||
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
|
||||
|
||||
|
||||
class Platform:
|
||||
def __init__(self, *args, **kwargs):
|
||||
# parse the user's options from the config entries
|
||||
for key, value in kwargs.items():
|
||||
self.__dict__[key] = value
|
||||
|
||||
# set defaults for omitted options
|
||||
if not hasattr(self, "method"):
|
||||
self.method = "GET"
|
||||
if not hasattr(self, "authentication"):
|
||||
self.authentication = None
|
||||
if not hasattr(self, "headers"):
|
||||
self.headers = None
|
||||
if not hasattr(self, "return_codes"):
|
||||
self.return_codes = "2xx,3xx"
|
||||
|
||||
def process(self):
|
||||
# Check if method is within allowed methods for http_status
|
||||
if self.method.upper() not in ["GET", "HEAD", "OPTIONS", "TRACE"]:
|
||||
raise NotImplementedError
|
||||
|
||||
s = Session()
|
||||
# prepare Authentication mechanism
|
||||
if self.authentication:
|
||||
if self.authentication.lower() == "digest":
|
||||
auth = HTTPDigestAuth(self.username, self.password)
|
||||
else:
|
||||
auth = HTTPBasicAuth(self.username, self.password)
|
||||
else:
|
||||
auth = None
|
||||
|
||||
# Send request
|
||||
req = Request(self.method.upper(), self.resource, headers=self.headers, auth=auth)
|
||||
prepped = req.prepare()
|
||||
resp = s.send(prepped)
|
||||
|
||||
return_codes = tuple([x.replace('x', '') for x in self.return_codes.split(',')])
|
||||
|
||||
if str(resp.status_code).startswith(return_codes):
|
||||
icon_class = "theme-success-text"
|
||||
else:
|
||||
icon_class = "theme-failure-text"
|
||||
|
||||
return f"<i class='material-icons right {icon_class}'>fiber_manual_record </i>"
|
Loading…
x
Reference in New Issue
Block a user