]> git.immae.eu Git - github/bastienwirtz/homer.git/commitdiff
PiAlert custom service (#674)
authorthedroid <thedroid@gmail.com>
Sun, 6 Aug 2023 19:48:52 +0000 (14:48 -0500)
committerGitHub <noreply@github.com>
Sun, 6 Aug 2023 19:48:52 +0000 (21:48 +0200)
Add Pi Alert custom service

docs/customservices.md
dummy-data/pialert/php/server/devices.php [new file with mode: 0644]
src/components/services/PiAlert.vue [new file with mode: 0644]

index ca88d853b43d83e595faaae57178b339a8abc9b9..cb897a2883f1350fb0bad68faa60a3bc4e3750a9 100644 (file)
@@ -33,6 +33,7 @@ within Homer:
   - [SABnzbd](#sabnzbd)
   - [OctoPrint](#octoprint)
   - [Tdarr](#tdarr)
+  - [PiAlert](#pialert)
   - [Immich](#immich)
 
 If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page.
@@ -413,6 +414,16 @@ for transcoding on your Tdarr instance as well as the number of errored items.
   checkInterval: 5000 # (Optional) Interval (in ms) for updating the queue & error counts
 ```
 
+## PiAlert
+
+The PiAlert service displays stats from your PiAlert server.
+
+```yaml
+- name: "PiAlert"
+  type: "PiAlert"
+  updateInterval: 5000 # (Optional) Interval (in ms) for updating the stats
+```
+
 ## Immich
 
 The Immich service displays stats from your Immich server.
@@ -422,4 +433,4 @@ The Immich service displays stats from your Immich server.
   type: "Immich"
   apikey: "<--- Your api key --->" # administrator user
   updateInterval: 5000 # (Optional) Interval (in ms) for updating the stats
-```
\ No newline at end of file
+```
diff --git a/dummy-data/pialert/php/server/devices.php b/dummy-data/pialert/php/server/devices.php
new file mode 100644 (file)
index 0000000..55dbfa6
--- /dev/null
@@ -0,0 +1 @@
+[89,82,0,15,0,0]
\ No newline at end of file
diff --git a/src/components/services/PiAlert.vue b/src/components/services/PiAlert.vue
new file mode 100644 (file)
index 0000000..fb0d9ed
--- /dev/null
@@ -0,0 +1,104 @@
+<template>
+    <Generic :item="item">
+        <template #indicator>
+            <div class="notifs">
+                <strong class="notif total" title="Total Devices">
+                    {{ total }}
+                </strong>
+                <strong class="notif connected" title="Connected Devices">
+                    {{ connected }}
+                </strong>
+                <strong class="notif newdevices" title="New Devices">
+                    {{ newdevices }}
+                </strong>
+                <strong class="notif alert" title="Down Alerts">
+                    {{ downalert }}
+                </strong>
+                <strong v-if="serverError" class="notif alert"
+                    title="Connection error to PiAlert server, check the url in config.yml">?</strong>
+            </div>
+        </template>
+    </Generic>
+</template>
+  
+<script>
+import service from "@/mixins/service.js";
+import Generic from "./Generic.vue";
+
+export default {
+    name: "PiAlert",
+    mixins: [service],
+    props: {
+        item: Object,
+    },
+    components: {
+        Generic,
+    },
+    data: () => {
+        return {
+            total: 0,
+            connected: 0,
+            newdevices: 0,
+            downalert: 0,
+            serverError: false,
+        };
+    },
+    created() {
+        const updateInterval = parseInt(this.item.updateInterval, 10) || 0;
+        if (updateInterval > 0) {
+            setInterval(() => this.fetchStatus(), updateInterval);
+        }
+        this.fetchStatus();
+    },
+    methods: {
+        fetchStatus: async function () {
+            this.fetch("/php/server/devices.php?action=getDevicesTotals")
+                .then((response) => {
+                    this.total = response[0];
+                    this.connected = response[1];
+                    this.newdevices = response[3];
+                    this.downalert = response[4];
+                })
+                .catch((e) => {
+                    console.log(e);
+                    this.serverError = true;
+                });
+        },
+    },
+};
+</script>
+  
+<style scoped lang="scss">
+.notifs {
+    position: absolute;
+    color: white;
+    font-family: sans-serif;
+    top: 0.3em;
+    right: 0.5em;
+
+    .notif {
+        display: inline-block;
+        padding: 0.2em 0.35em;
+        border-radius: 0.25em;
+        position: relative;
+        margin-left: 0.3em;
+        font-size: 0.8em;
+
+        &.total {
+            background-color: #4fb5d6;
+        }
+
+        &.connected {
+            background-color: #4fd671;
+        }
+
+        &.newdevices {
+            background-color: #d08d2e;
+        }
+
+        &.alert {
+            background-color: #e51111;
+        }
+    }
+}
+</style>
\ No newline at end of file