From 05f3161f8e69418fbf240f270f58864283252b84 Mon Sep 17 00:00:00 2001 From: Alex Khomenko Date: Mon, 31 May 2021 17:06:45 +0300 Subject: [PATCH] Admin: hide per role counts for licensed users (#34984) * Hide per-role counts for licensed users * Hide totals --- public/app/features/admin/ServerStats.tsx | 14 ++++-- public/app/features/admin/state/apis.ts | 34 ------------- public/app/features/admin/state/apis.tsx | 58 +++++++++++++++++++++++ 3 files changed, 69 insertions(+), 37 deletions(-) delete mode 100644 public/app/features/admin/state/apis.ts create mode 100644 public/app/features/admin/state/apis.tsx diff --git a/public/app/features/admin/ServerStats.tsx b/public/app/features/admin/ServerStats.tsx index dd9ee3b7a7c..95f45025dfe 100644 --- a/public/app/features/admin/ServerStats.tsx +++ b/public/app/features/admin/ServerStats.tsx @@ -1,11 +1,12 @@ import React, { PureComponent } from 'react'; import { hot } from 'react-hot-loader'; import { connect } from 'react-redux'; +import { Icon, Tooltip } from '@grafana/ui'; +import { NavModel } from '@grafana/data'; import { StoreState } from 'app/types'; import { getNavModel } from 'app/core/selectors/navModel'; -import { getServerStats, ServerStat } from './state/apis'; import Page from 'app/core/components/Page/Page'; -import { NavModel } from '@grafana/data'; +import { getServerStats, ServerStat } from './state/apis'; interface Props { navModel: NavModel; @@ -57,7 +58,14 @@ export class ServerStats extends PureComponent { function StatItem(stat: ServerStat) { return ( - {stat.name} + + {stat.name}{' '} + {stat.tooltip && ( + + + + )} + {stat.value} ); diff --git a/public/app/features/admin/state/apis.ts b/public/app/features/admin/state/apis.ts deleted file mode 100644 index e49cd915adf..00000000000 --- a/public/app/features/admin/state/apis.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { getBackendSrv } from '@grafana/runtime'; - -export interface ServerStat { - name: string; - value: number; -} - -export const getServerStats = async (): Promise => { - try { - const res = await getBackendSrv().get('api/admin/stats'); - return [ - { name: 'Total users', value: res.users }, - { name: 'Total admins', value: res.admins }, - { name: 'Total editors', value: res.editors }, - { name: 'Total viewers', value: res.viewers }, - { name: 'Active users (seen last 30 days)', value: res.activeUsers }, - { name: 'Active admins (seen last 30 days)', value: res.activeAdmins }, - { name: 'Active editors (seen last 30 days)', value: res.activeEditors }, - { name: 'Active viewers (seen last 30 days)', value: res.activeViewers }, - { name: 'Active sessions', value: res.activeSessions }, - { name: 'Total dashboards', value: res.dashboards }, - { name: 'Total orgs', value: res.orgs }, - { name: 'Total playlists', value: res.playlists }, - { name: 'Total snapshots', value: res.snapshots }, - { name: 'Total dashboard tags', value: res.tags }, - { name: 'Total starred dashboards', value: res.stars }, - { name: 'Total alerts', value: res.alerts }, - { name: 'Total data sources', value: res.datasources }, - ]; - } catch (error) { - console.error(error); - throw error; - } -}; diff --git a/public/app/features/admin/state/apis.tsx b/public/app/features/admin/state/apis.tsx new file mode 100644 index 00000000000..ae3a5731212 --- /dev/null +++ b/public/app/features/admin/state/apis.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { getBackendSrv } from '@grafana/runtime'; +import { PopoverContent } from '@grafana/ui'; +import { config } from 'app/core/config'; + +export interface ServerStat { + name: string; + value: number; + tooltip?: PopoverContent; +} + +const { hasLicense } = config.licenseInfo; + +export const getServerStats = async (): Promise => { + try { + const res = await getBackendSrv().get('api/admin/stats'); + return [ + { name: 'Total users', value: res.users }, + ...(!hasLicense + ? [ + { name: 'Total admins', value: res.admins }, + { name: 'Total editors', value: res.editors }, + { name: 'Total viewers', value: res.viewers }, + ] + : []), + { + name: 'Active users (seen last 30 days)', + value: res.activeUsers, + tooltip: hasLicense + ? () => ( + <> + For active user count by role, see the Licensing page. + + ) + : '', + }, + ...(!hasLicense + ? [ + { name: 'Active admins (seen last 30 days)', value: res.activeAdmins }, + { name: 'Active editors (seen last 30 days)', value: res.activeEditors }, + { name: 'Active viewers (seen last 30 days)', value: res.activeViewers }, + ] + : []), + { name: 'Active sessions', value: res.activeSessions }, + { name: 'Total dashboards', value: res.dashboards }, + { name: 'Total orgs', value: res.orgs }, + { name: 'Total playlists', value: res.playlists }, + { name: 'Total snapshots', value: res.snapshots }, + { name: 'Total dashboard tags', value: res.tags }, + { name: 'Total starred dashboards', value: res.stars }, + { name: 'Total alerts', value: res.alerts }, + { name: 'Total data sources', value: res.datasources }, + ]; + } catch (error) { + console.error(error); + throw error; + } +};