Selaa lähdekoodia

feat: admin - system info

NGPixel 7 vuotta sitten
vanhempi
sitoutus
8462e18fc5

+ 41 - 12
client/components/admin-system.vue

@@ -7,7 +7,7 @@
         v-layout.mt-3(row wrap)
         v-layout.mt-3(row wrap)
           v-flex(lg6 xs12)
           v-flex(lg6 xs12)
             v-card
             v-card
-              v-btn(fab, absolute, right, top, small, light): v-icon refresh
+              v-btn(fab, absolute, right, top, small, light, @click='refresh'): v-icon refresh
               v-list(two-line, dense)
               v-list(two-line, dense)
                 v-subheader Wiki.js
                 v-subheader Wiki.js
                 v-list-tile(avatar)
                 v-list-tile(avatar)
@@ -15,13 +15,13 @@
                     v-icon.blue.white--text system_update_alt
                     v-icon.blue.white--text system_update_alt
                   v-list-tile-content
                   v-list-tile-content
                     v-list-tile-title Current Version
                     v-list-tile-title Current Version
-                    v-list-tile-sub-title 2.0.0
+                    v-list-tile-sub-title {{ info.currentVersion }}
                 v-list-tile(avatar)
                 v-list-tile(avatar)
                   v-list-tile-avatar
                   v-list-tile-avatar
                     v-icon.blue.white--text open_in_browser
                     v-icon.blue.white--text open_in_browser
                   v-list-tile-content
                   v-list-tile-content
                     v-list-tile-title Latest Version
                     v-list-tile-title Latest Version
-                    v-list-tile-sub-title 2.0.0
+                    v-list-tile-sub-title {{ info.latestVersion }}
                   v-list-tile-action
                   v-list-tile-action
                     v-list-tile-action-text Published 4 days ago
                     v-list-tile-action-text Published 4 days ago
 
 
@@ -33,31 +33,31 @@
                     v-icon.blue-grey.white--text bubble_chart
                     v-icon.blue-grey.white--text bubble_chart
                   v-list-tile-content
                   v-list-tile-content
                     v-list-tile-title Operating System
                     v-list-tile-title Operating System
-                    v-list-tile-sub-title Linux (linux) 4.4.0-116-generic x64
+                    v-list-tile-sub-title {{ info.operatingSystem }}
                 v-list-tile(avatar)
                 v-list-tile(avatar)
                   v-list-tile-avatar
                   v-list-tile-avatar
                     v-icon.blue-grey.white--text computer
                     v-icon.blue-grey.white--text computer
                   v-list-tile-content
                   v-list-tile-content
                     v-list-tile-title Hostname
                     v-list-tile-title Hostname
-                    v-list-tile-sub-title wikijs
+                    v-list-tile-sub-title {{ info.hostname }}
                 v-list-tile(avatar)
                 v-list-tile(avatar)
                   v-list-tile-avatar
                   v-list-tile-avatar
                     v-icon.blue-grey.white--text nfc
                     v-icon.blue-grey.white--text nfc
                   v-list-tile-content
                   v-list-tile-content
                     v-list-tile-title CPU Cores
                     v-list-tile-title CPU Cores
-                    v-list-tile-sub-title 8
+                    v-list-tile-sub-title {{ info.cpuCores }}
                 v-list-tile(avatar)
                 v-list-tile(avatar)
                   v-list-tile-avatar
                   v-list-tile-avatar
                     v-icon.blue-grey.white--text memory
                     v-icon.blue-grey.white--text memory
                   v-list-tile-content
                   v-list-tile-content
                     v-list-tile-title Total RAM
                     v-list-tile-title Total RAM
-                    v-list-tile-sub-title 16.0 Gb
+                    v-list-tile-sub-title {{ info.ramTotal }}
                 v-list-tile(avatar)
                 v-list-tile(avatar)
                   v-list-tile-avatar
                   v-list-tile-avatar
                     v-icon.blue-grey.white--text last_page
                     v-icon.blue-grey.white--text last_page
                   v-list-tile-content
                   v-list-tile-content
                     v-list-tile-title Working Directory
                     v-list-tile-title Working Directory
-                    v-list-tile-sub-title /var/wiki
+                    v-list-tile-sub-title {{ info.workingDirectory }}
 
 
           v-flex(lg6 xs12)
           v-flex(lg6 xs12)
             v-card.pb-3
             v-card.pb-3
@@ -68,7 +68,7 @@
                     v-avatar.light-green(size='40')
                     v-avatar.light-green(size='40')
                       icon-node-js(fillColor='#FFFFFF')
                       icon-node-js(fillColor='#FFFFFF')
                   v-list-tile-content
                   v-list-tile-content
-                    v-list-tile-title 8.9.4
+                    v-list-tile-title {{ info.nodeVersion }}
 
 
                 v-divider
                 v-divider
 
 
@@ -78,7 +78,10 @@
                     v-avatar.red(size='40')
                     v-avatar.red(size='40')
                       icon-cube(fillColor='#FFFFFF')
                       icon-cube(fillColor='#FFFFFF')
                   v-list-tile-content
                   v-list-tile-content
-                    v-list-tile-title 4.0.8
+                    v-list-tile-title {{ info.redisVersion }}
+                    v-list-tile-sub-title {{ info.redisHost }}
+                  v-list-tile-action
+                    v-list-tile-action-text RAM Usage: {{ info.redisUsedRAM }} / {{ info.redisTotalRAM }}
 
 
                 v-divider
                 v-divider
 
 
@@ -88,7 +91,16 @@
                     v-avatar.indigo.darken-1(size='40')
                     v-avatar.indigo.darken-1(size='40')
                       icon-database(fillColor='#FFFFFF')
                       icon-database(fillColor='#FFFFFF')
                   v-list-tile-content
                   v-list-tile-content
-                    v-list-tile-title 9.6.8
+                    v-list-tile-title {{ info.postgreVersion }}
+                    v-list-tile-sub-title {{ info.postgreHost }}
+
+    v-snackbar(
+      color='success'
+      top
+      v-model='refreshCompleted'
+    )
+      v-icon.mr-3(dark) cached
+      | System Info has been refreshed.
 
 
 </template>
 </template>
 
 
@@ -97,6 +109,8 @@ import IconCube from 'mdi/cube'
 import IconDatabase from 'mdi/database'
 import IconDatabase from 'mdi/database'
 import IconNodeJs from 'mdi/nodejs'
 import IconNodeJs from 'mdi/nodejs'
 
 
+/* global CONSTANTS */
+
 export default {
 export default {
   components: {
   components: {
     IconCube,
     IconCube,
@@ -104,7 +118,22 @@ export default {
     IconNodeJs
     IconNodeJs
   },
   },
   data() {
   data() {
-    return {}
+    return {
+      info: {},
+      refreshCompleted: false
+    }
+  },
+  apollo: {
+    info: {
+      query: CONSTANTS.GRAPH.SYSTEM.QUERY_INFO,
+      update: (data) => data.system.info
+    }
+  },
+  methods: {
+    async refresh() {
+      await this.$apollo.queries.info.refetch()
+      this.refreshCompleted = true
+    }
   }
   }
 }
 }
 </script>
 </script>

+ 25 - 0
client/constants/graphql.js

@@ -65,6 +65,31 @@ export default {
       }
       }
     `
     `
   },
   },
+  SYSTEM: {
+    QUERY_INFO: gql`
+      query {
+        system {
+          info {
+            currentVersion
+            latestVersion
+            latestVersionReleaseDate
+            operatingSystem
+            hostname
+            cpuCores
+            ramTotal
+            workingDirectory
+            nodeVersion
+            redisVersion
+            redisUsedRAM
+            redisTotalRAM
+            redisHost
+            postgreVersion
+            postgreHost
+          }
+        }
+      }
+    `
+  },
   TRANSLATIONS: {
   TRANSLATIONS: {
     QUERY_NAMESPACE: gql`
     QUERY_NAMESPACE: gql`
       query($locale: String!, $namespace: String!) {
       query($locale: String!, $namespace: String!) {

+ 36 - 0
server/graph/resolvers/system.js

@@ -0,0 +1,36 @@
+const _ = require('lodash')
+const os = require('os')
+const filesize = require('filesize')
+
+/* global WIKI */
+
+module.exports = {
+  Query: {
+    async system() { return {} }
+  },
+  Mutation: {
+    async system() { return {} }
+  },
+  SystemQuery: {
+    async info(obj, args, context, info) {
+      return {
+        currentVersion: WIKI.version,
+        latestVersion: WIKI.version, // TODO
+        latestVersionReleaseDate: new Date(), // TODO
+        operatingSystem: `${os.type()} (${os.platform()}) ${os.release()} ${os.arch()}`,
+        hostname: os.hostname(),
+        cpuCores: os.cpus().length,
+        ramTotal: filesize(os.totalmem()),
+        workingDirectory: process.cwd(),
+        nodeVersion: process.version.substr(1),
+        redisVersion: WIKI.redis.serverInfo.redis_version,
+        redisUsedRAM: WIKI.redis.serverInfo.used_memory_human,
+        redisTotalRAM: _.get(WIKI.redis.serverInfo, 'total_system_memory_human', 'N/A'),
+        redisHost: WIKI.redis.options.host,
+        postgreVersion: WIKI.db.inst.options.databaseVersion,
+        postgreHost: WIKI.db.inst.options.host
+      }
+    }
+  },
+  SystemMutation: { }
+}

+ 5 - 1
server/graph/schemas/system.graphql

@@ -37,9 +37,13 @@ type SystemInfo {
   operatingSystem: String
   operatingSystem: String
   hostname: String
   hostname: String
   cpuCores: Int
   cpuCores: Int
-  ramTotal: Int
+  ramTotal: String
   workingDirectory: String
   workingDirectory: String
   nodeVersion: String
   nodeVersion: String
   redisVersion: String
   redisVersion: String
+  redisUsedRAM: String
+  redisTotalRAM: String
+  redisHost: String
   postgreVersion: String
   postgreVersion: String
+  postgreHost: String
 }
 }

+ 2 - 3
server/views/master.pug

@@ -27,8 +27,7 @@ html
 
 
     block head
     block head
 
 
-    link(href="/css/client.css?c473342a20546c545ebc" rel="stylesheet")
-    script(type="text/javascript" src="/js/runtime.js?c473342a20546c545ebc")
-    script(type="text/javascript" src="/js/client.js?c473342a20546c545ebc" async)
+    script(type="text/javascript" src="/js/runtime.js")
+    script(type="text/javascript" src="/js/client.js")
   body
   body
     block body
     block body