]> git.immae.eu Git - github/bastienwirtz/homer.git/commitdiff
Merge pull request #243 from waschinski/patch-1 v21.09.2
authorBastien Wirtz <bastien.wirtz@gmail.com>
Wed, 15 Sep 2021 07:40:05 +0000 (00:40 -0700)
committerGitHub <noreply@github.com>
Wed, 15 Sep 2021 07:40:05 +0000 (00:40 -0700)
Improving Adguard Home service

src/components/services/AdGuardHome.vue

index 19a2f7da8df2987691e1e1d68357dcbe6af1db86..61d4bed916d999a59f8bf283b1695e971e689d0f 100644 (file)
             </div>
             <div class="media-content">
               <p class="title is-4">{{ item.name }}</p>
-              <p class="subtitle is-6">{{ item.subtitle }}</p>
+              <p class="subtitle is-6">
+                <template v-if="item.subtitle">
+                  {{ item.subtitle }}
+                </template>
+                <template v-else-if="stats">
+                  {{ percentage }}&percnt; blocked
+                </template>
+              </p>
             </div>
-            <div
-              v-if="status"
-              class="status"
-              v-bind:class="status.protection_enabled ? 'enabled' : 'disabled'"
-            >
-              {{ status.protection_enabled }}
+            <div class="status" :class="protection">
+              {{ protection }}
             </div>
           </div>
           <div class="tag" :class="item.tagstyle" v-if="item.tag">
@@ -44,16 +47,45 @@ export default {
   data: () => {
     return {
       status: null,
+      stats: null,
     };
   },
+  computed: {
+    percentage: function () {
+      if (this.stats) {
+        return (
+          (this.stats.num_blocked_filtering * 100) /
+          this.stats.num_dns_queries
+        ).toFixed(2);
+      }
+      return "";
+    },
+    protection: function () {
+      if (this.status) {
+        return this.status.protection_enabled ? "enabled" : "disabled";
+      } else return "unknown";
+    },
+  },
   created: function () {
     this.fetchStatus();
+    if (!this.item.subtitle) {
+      this.fetchStats();
+    }
   },
   methods: {
     fetchStatus: async function () {
       this.status = await fetch(`${this.item.url}/control/status`, {
         credentials: "include",
-      }).then((response) => response.json());
+      })
+        .then((response) => response.json())
+        .catch((e) => console.log(e));
+    },
+    fetchStats: async function () {
+      this.stats = await fetch(`${this.item.url}/control/stats`, {
+        credentials: "include",
+      })
+        .then((response) => response.json())
+        .catch((e) => console.log(e));
     },
   },
 };
@@ -79,6 +111,12 @@ export default {
     box-shadow: 0px 0px 4px 1px #c9404d;
   }
 
+  &.unknown:before {
+    background-color: #c9c740;
+    border-color: #ccc935;
+    box-shadow: 0px 0px 4px 1px #c9c740;
+  }
+
   &:before {
     content: " ";
     display: inline-block;