Skip to content

Commit

Permalink
✨ Adds option for continious status checking
Browse files Browse the repository at this point in the history
Re #35
  • Loading branch information
Lissy93 committed Jun 22, 2021
1 parent 88c48ec commit 2560f16
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 0 deletions.
11 changes: 11 additions & 0 deletions docs/status-indicators.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,17 @@ sections:
statusCheck: true
```

## Continuous Checking
By default, with status indicators enabled Dashy will check an applications status on page load, and will not keep indicators updated. This is usually desirable behavior. However, if you do want the status indicators to continue to poll your running services, this can be enabled by setting the `statusCheckInterval` attribute. Here you define an interval in seconds, and Dashy will poll your apps every x seconds. Note that if this number is very low (below 5 seconds), you may notice the app running slightly slower.

The following example, will instruct Dashy to continuously check the status of your services every 20 seconds

```
appConfig:
statusCheck: true
statusCheckInterval: 20
```
## How it Works
When Dashy is loaded, items with `statusCheck` enabled will make a request, to `https://[your-host-name]/ping?url=[address-or-servce]`, which in turn will ping that running service, and respond with a status code. Response time is calculated from the difference between start and end time of the request.
Expand Down
5 changes: 5 additions & 0 deletions src/components/LinkItems/Item.vue
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export default {
},
itemSize: String,
enableStatusCheck: Boolean,
statusCheckInterval: Number,
},
data() {
return {
Expand Down Expand Up @@ -114,6 +115,7 @@ export default {
}
},
checkWebsiteStatus() {
this.statusResponse = undefined;
const baseUrl = process.env.VUE_APP_DOMAIN || window.location.origin;
const endpoint = `${baseUrl}/ping?url=${this.url}`;
axios.get(endpoint)
Expand All @@ -131,6 +133,9 @@ export default {
mounted() {
this.manageTitleEllipse();
if (this.enableStatusCheck) this.checkWebsiteStatus();
if (this.statusCheckInterval > 0) {
setInterval(this.checkWebsiteStatus, this.statusCheckInterval * 1000);
}
},
};
</script>
Expand Down
8 changes: 8 additions & 0 deletions src/components/LinkItems/ItemGroup.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
:backgroundColor="item.backgroundColor"
:itemSize="newItemSize"
:enableStatusCheck="shouldEnableStatusCheck(item.statusCheck)"
:statusCheckInterval="getStatusCheckInterval()"
@itemClicked="$emit('itemClicked')"
@triggerModal="triggerModal"
/>
Expand Down Expand Up @@ -98,6 +99,13 @@ export default {
const globalPreference = this.config.appConfig.statusCheck || false;
return itemPreference !== undefined ? itemPreference : globalPreference;
},
getStatusCheckInterval() {
let interval = this.config.appConfig.statusCheckInterval;
if (!interval) return 0;
if (interval > 60) interval = 60;
if (interval < 1) interval = 0;
return interval;
},
},
};
</script>
Expand Down
5 changes: 5 additions & 0 deletions src/utils/ConfigSchema.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@
"default": false,
"description": "Displays an online/ offline status for each of your services"
},
"statusCheckInterval": {
"type": "number",
"default": 0,
"description": "How often to recheck statuses. If set to 0, status will only be checked on page load"
},
"auth": {
"type": "array",
"description": "Usernames and hashed credentials for frontend authentication",
Expand Down

0 comments on commit 2560f16

Please sign in to comment.