diff --git a/docs/widgets.md b/docs/widgets.md index be9eb796..d5f7d92a 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -1350,6 +1350,9 @@ Displays the current and recent uptime of your running services, via a self-host **Field** | **Type** | **Required** | **Description** --- | --- | --- | --- **`hostname`** | `string` | Required | The URL to your StatPing instance, without a trailing slash +**`groupId`** | `number` | Optional | If provided, only Services in the given group are displayed. Defaults to `0` in which case all services are displayed. +**`showChart`** | `boolean`| Optional | If provided and `false` then charts are not displayed. Defaults to `true`. +**`showInfo`** | `boolean`| Optional | If provided and `false` then information summaries are not displayed. Defaults to `true`. ##### Example @@ -1358,6 +1361,18 @@ Displays the current and recent uptime of your running services, via a self-host options: hostname: http://192.168.130.1:8080 ``` +or +```yaml +- type: stat-ping + options: + hostname: http://192.168.130.1:8080 + groupId: 3 + showChart: false + showInfo: false +``` +You can use multiple StatPing widgets with different `groupId`s. + +Note, the Group Id is not directly visible in SttatPing UI, you can inspect the group select HTML element or the API response to find out. ##### Info - **CORS**: 🟠Proxied diff --git a/src/components/Widgets/StatPing.vue b/src/components/Widgets/StatPing.vue index 1e405e5b..fb8abd27 100644 --- a/src/components/Widgets/StatPing.vue +++ b/src/components/Widgets/StatPing.vue @@ -15,9 +15,13 @@ <span v-else class="status-offline"> {{ $t('widgets.stat-ping.down') }} </span> + <Button v-on:click="service.infoHidden = !service.infoHidden" + class="far fa-info"></Button> + <Button v-on:click="service.chartHidden = !service.chartHidden" + class="far fa-chart-line"></button> </p> <!-- Charts --> - <div class="charts"> + <div v-if="!service.chartHidden" class="charts"> <img class="uptime-pie-chart" alt="24 Hour Uptime Chart" :src="makeChartUrl(service.uptime24, '24 Hours')" /> @@ -25,7 +29,7 @@ :src="makeChartUrl(service.uptime7, '7 Days')" /> </div> <!-- Info --> - <div class="info"> + <div v-if="!service.infoHidden" class="info"> <div class="info-row"> <span class="lbl">Failed Pings</span> <span class="val">{{ service.totalFailure }}/{{ service.totalSuccess }}</span> @@ -73,6 +77,15 @@ export default { endpoint() { return `${this.hostname}/api/services`; }, + groupId() { + return this.options.groupId || 0; + }, + showChart() { + return typeof this.options.showChart !== 'boolean' ? true : this.options.showChart; + }, + showInfo() { + return typeof this.options.showInfo !== 'boolean' ? true : this.options.showInfo; + }, }, methods: { fetchData() { @@ -99,6 +112,7 @@ export default { processData(data) { let services = []; data.forEach((service) => { + if (this.groupId && this.groupId !== service.group_id) return; services.push({ name: service.name, online: service.online, @@ -109,6 +123,8 @@ export default { totalFailure: showNumAsThousand(service.stats.failures), lastSuccess: getTimeAgo(service.last_success), lastFailure: getTimeAgo(service.last_error), + chartHidden: this.showChart ? 0 : 1, + infoHidden: this.showInfo ? 0 : 1, }); }); if (this.limit) services = services.slice(0, this.limit); @@ -135,6 +151,18 @@ export default { &.status-offline { color: var(--danger); } } } + button { + float: right; + color: var(--widget-text-color); + top: 4px; + background: none; + border: none; + position: relative; + opacity: .4; + } + button:hover { + opacity: .75; + } .charts { display: flex; flex-direction: row;