From 3200b8624bc44ebc287350825e196e860890294a Mon Sep 17 00:00:00 2001 From: Douglas Barone Date: Thu, 10 Dec 2020 10:11:36 -0400 Subject: [PATCH] Added StatsWidget --- server/src/resolvers/Mutation.js | 5 + server/src/resolvers/Stats.js | 5 +- server/src/typeDefs.js | 2 + web/src/components/widgets/StatsWidget.vue | 117 ++++++++++++++++++ .../components/widgets/TokenStatsWidget.vue | 26 ++-- web/src/components/widgets/Widget.vue | 8 +- web/src/scss/style.scss | 4 + web/src/views/Home.vue | 19 ++- 8 files changed, 165 insertions(+), 21 deletions(-) create mode 100644 web/src/components/widgets/StatsWidget.vue diff --git a/server/src/resolvers/Mutation.js b/server/src/resolvers/Mutation.js index 62121f3..a245fa3 100755 --- a/server/src/resolvers/Mutation.js +++ b/server/src/resolvers/Mutation.js @@ -2,6 +2,7 @@ import { replacePassword } from '../utils/activedirectory/passwordUtils' import { User } from '../classes/User' import { ResetToken } from '../classes/ResetToken' +import { updateDevicesInfo } from '../utils/wifiUtils' import { updateUserIdMappings } from '../utils/paloalto' const Mutation = { @@ -31,6 +32,10 @@ const Mutation = { return 'A importação está sendo feita. Isso pode demorar alguns minutos.' }, + async updateWifiDevices() { + return updateDevicesInfo() + }, + async updateUserIdMappings() { return updateUserIdMappings() } diff --git a/server/src/resolvers/Stats.js b/server/src/resolvers/Stats.js index 1caadcd..4b501c8 100644 --- a/server/src/resolvers/Stats.js +++ b/server/src/resolvers/Stats.js @@ -37,7 +37,10 @@ const Stats = { totalUsers: async () => prisma.user.count(), - totalWifiDevices: async () => prisma.wifiDevice.count() + totalWifiDevices: async () => prisma.wifiDevice.count(), + + onlineWifiDevices: async () => + prisma.wifiDevice.count({ where: { status: 'ONLINE' } }) } export { Stats } diff --git a/server/src/typeDefs.js b/server/src/typeDefs.js index 41ca243..7c22e3b 100644 --- a/server/src/typeDefs.js +++ b/server/src/typeDefs.js @@ -43,6 +43,7 @@ const typeDefs = gql` @auth(roles: ["superAdmin", "tokenCreator"]) useResetToken(data: UseResetTokenInput!): Boolean! importUsers: String! @auth(roles: ["superAdmin"]) + updateWifiDevices: String! @auth(roles: ["superAdmin"]) updateUserIdMappings: String! @auth(roles: ["superAdmin"]) } @@ -149,6 +150,7 @@ const typeDefs = gql` offlineUsers: Int! totalUsers: Int! totalWifiDevices: Int! + onlineWifiDevices: Int! } type WifiDevice { diff --git a/web/src/components/widgets/StatsWidget.vue b/web/src/components/widgets/StatsWidget.vue new file mode 100644 index 0000000..5e46137 --- /dev/null +++ b/web/src/components/widgets/StatsWidget.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/web/src/components/widgets/TokenStatsWidget.vue b/web/src/components/widgets/TokenStatsWidget.vue index 47f7665..e161b76 100755 --- a/web/src/components/widgets/TokenStatsWidget.vue +++ b/web/src/components/widgets/TokenStatsWidget.vue @@ -10,9 +10,11 @@ mdi-qrcode - Tokens criados até agora - + {{ stats.tokenCountTotal }} + + + Tokens criados até agora @@ -22,10 +24,10 @@ mdi-checkbox-marked-circle-outline - Tokens usados até agora - + {{ stats.tokenCountUsed }} - + + Tokens usados até agora @@ -34,10 +36,10 @@ mdi-clock-alert-outline - Tokens expirados - + {{ stats.tokenCountExpired }} - + + Tokens expirados @@ -46,10 +48,10 @@ mdi-clock-outline - Tokens aguardando uso - + {{ stats.tokenCountNotUsed }} - + + Tokens aguardando uso @@ -60,7 +62,7 @@ import Widget from './Widget' import gql from 'graphql-tag' export default { - name: 'ActionsWidget', + name: 'TokenStatsWidget', components: { Widget }, apollo: { me: gql` diff --git a/web/src/components/widgets/Widget.vue b/web/src/components/widgets/Widget.vue index 2695dcc..0634eb2 100755 --- a/web/src/components/widgets/Widget.vue +++ b/web/src/components/widgets/Widget.vue @@ -2,8 +2,11 @@ {{ widgetIcon }} - {{ title }} + + {{ title }} + + @@ -27,7 +30,8 @@ export default { diff --git a/web/src/scss/style.scss b/web/src/scss/style.scss index bebc629..8ea0aff 100755 --- a/web/src/scss/style.scss +++ b/web/src/scss/style.scss @@ -31,3 +31,7 @@ .bottom-border { border-bottom: 1px solid rgba(0, 0, 0, 0.12) !important; } + +.light-shadow { + box-shadow: 1.5px 1.5px 12px rgba(0, 0, 0, 0.05) !important; +} diff --git a/web/src/views/Home.vue b/web/src/views/Home.vue index 5eeb8b4..5a86682 100755 --- a/web/src/views/Home.vue +++ b/web/src/views/Home.vue @@ -1,15 +1,21 @@ @@ -18,11 +24,12 @@ import UserInfoWidget from '../components/widgets/UserInfoWidget' import TokenStatsWidget from '../components/widgets/TokenStatsWidget' import DevicesWidget from '../components/widgets/DevicesWidget' +import StatsWidget from '../components/widgets/StatsWidget' import gql from 'graphql-tag' export default { name: 'Home', - components: { DevicesWidget, TokenStatsWidget, UserInfoWidget }, + components: { DevicesWidget, TokenStatsWidget, UserInfoWidget, StatsWidget }, data: () => ({ searchText: '' }),