diff --git a/docs/widgets.md b/docs/widgets.md
index 99f2af6f..dbb85e76 100644
--- a/docs/widgets.md
+++ b/docs/widgets.md
@@ -52,6 +52,7 @@ Dashy has support for displaying dynamic content in the form of widgets. There a
- [Disk IO](#disk-io)
- [System Load](#system-load)
- [System Load History](#system-load-history)
+ - [Resource Usage Alerts](#resource-usage-alerts)
- **[Dynamic Widgets](#dynamic-widgets)**
- [Iframe Widget](#iframe-widget)
- [HTML Embed Widget](#html-embedded-widget)
@@ -1354,6 +1355,22 @@ Shows recent historical system load, calculated from the number of processes wai
---
+### Resource Usage Alerts
+
+Lists recent high resource usage alerts (e.g. CPU, mem, IO, load, temp)
+
+

+
+##### Example
+
+```yaml
+- type: gl-alerts
+ options:
+ hostname: http://192.168.130.2:61208
+```
+
+---
+
## Dynamic Widgets
### Iframe Widget
diff --git a/src/components/Widgets/GlAlerts.vue b/src/components/Widgets/GlAlerts.vue
new file mode 100644
index 00000000..358814ed
--- /dev/null
+++ b/src/components/Widgets/GlAlerts.vue
@@ -0,0 +1,129 @@
+
+
+
+
+ {{ alert.time }}
+ Ongoing
+
+
+ {{ alert.category }} -
+ {{ alert.value }}%
+
+
{{ alert.severity }}
+
+
+
+
System is Healthy
+
There are no active alerts
+
+
+
+
+
+
diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue
index b500b16d..3623ea1b 100644
--- a/src/components/Widgets/WidgetBase.vue
+++ b/src/components/Widgets/WidgetBase.vue
@@ -109,6 +109,13 @@
@error="handleError"
:ref="widgetRef"
/>
+
import('@/components/Widgets/Flights.vue'),
GitHubTrending: () => import('@/components/Widgets/GitHubTrending.vue'),
GitHubProfile: () => import('@/components/Widgets/GitHubProfile.vue'),
+ GlAlerts: () => import('@/components/Widgets/GlAlerts.vue'),
GlCpuCores: () => import('@/components/Widgets/GlCpuCores.vue'),
GlCpuGauge: () => import('@/components/Widgets/GlCpuGauge.vue'),
GlCpuHistory: () => import('@/components/Widgets/GlCpuHistory.vue'),
diff --git a/src/utils/MiscHelpers.js b/src/utils/MiscHelpers.js
index 5e998048..e84b132f 100644
--- a/src/utils/MiscHelpers.js
+++ b/src/utils/MiscHelpers.js
@@ -117,19 +117,25 @@ export const truncateStr = (str, len = 60, ellipse = '...') => {
return str.length > len + ellipse.length ? `${str.slice(0, len)}${ellipse}` : str;
};
+/* Given two timestamp, return the difference in text format, e.g. '10 minutes' */
+export const getTimeDifference = (startTime, endTime) => {
+ const msDifference = new Date(endTime).getTime() - new Date(startTime).getTime();
+ const diff = Math.abs(Math.round(msDifference / 1000));
+ const divide = (time, round) => Math.round(time / round);
+ if (diff < 60) return `${divide(diff, 1)} seconds`;
+ if (diff < 3600) return `${divide(diff, 60)} minutes`;
+ if (diff < 86400) return `${divide(diff, 3600)} hours`;
+ if (diff < 604800) return `${divide(diff, 86400)} days`;
+ if (diff >= 604800) return `${divide(diff, 604800)} weeks`;
+ return 'unknown';
+};
+
/* Given a timestamp, return how long ago it was, e.g. '10 minutes' */
export const getTimeAgo = (dateTime) => {
const now = new Date().getTime();
- const then = new Date(dateTime).getTime();
- if (then < 0) return 'Never';
- const diff = (now - then) / 1000;
- const divide = (time, round) => Math.round(time / round);
- if (diff < 60) return `${divide(diff, 1)} seconds ago`;
- if (diff < 3600) return `${divide(diff, 60)} minutes ago`;
- if (diff < 86400) return `${divide(diff, 3600)} hours ago`;
- if (diff < 604800) return `${divide(diff, 86400)} days ago`;
- if (diff >= 604800) return `${divide(diff, 604800)} weeks ago`;
- return 'unknown';
+ const diffStr = getTimeDifference(dateTime, now);
+ if (diffStr === 'unknown') return diffStr;
+ return `${diffStr} ago`;
};
/* Given the name of a CSS variable, returns it's value */