123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import { dateTime } from '@grafana/data';
- import { config } from '@grafana/runtime';
- import { CardState } from './LicenseCard';
- import { ERROR_RATE, WARNING_RATE, LIMIT_BY_USERS } from './constants';
- import { ActiveUserStats, LicenseToken } from './types';
- type Status = { state: CardState; status: string; title: string; message: string };
- export const getUserStatMessage = (includedUsers: number, activeUsers?: number): string => {
- return (activeUsers ? `${activeUsers} of ` : '') + (includedUsers > 0 ? includedUsers : 'unlimited');
- };
- const tokenExpired = (token: LicenseToken) => {
- return dateTime(token.exp * 1000) < dateTime();
- };
- const tokenWillExpireSoon = (token: LicenseToken) => {
- return dateTime(token.exp * 1000) < dateTime().add((config as any).licensing.tokenExpiryWarnDays, 'd');
- };
- const tokenWillExpireInDays = (token: LicenseToken) => {
- return Math.ceil((token.exp - dateTime().unix()) / 3600 / 24);
- };
- export const getTokenStatus = (token: LicenseToken | null): Status => {
- if (!token) {
- return { state: '', status: '', title: '', message: '' };
- }
- if (tokenExpired(token)) {
- return {
- state: 'error',
- status: 'Expired',
- title: 'Token expired',
- message: 'Contact support to renew your token, or visit the Cloud portal to learn more.',
- };
- }
- if (tokenWillExpireSoon(token)) {
- return {
- state: 'warning',
- status: ` Expiring in ${tokenWillExpireInDays(token)} day(s)`,
- title: 'Token expires soon',
- message: `Your token expires in ${tokenWillExpireInDays(token)} day(s). Contact support to renew your token.`,
- };
- }
- return { state: '', status: '', title: '', message: '' };
- };
- const trialExpired = (token: LicenseToken) => {
- return token.trial_exp && dateTime(token.trial_exp * 1000) < dateTime();
- };
- const trialWillExpireInDays = (token: LicenseToken) => {
- if (!token.trial_exp) {
- return 0;
- }
- return Math.ceil((token.trial_exp - dateTime().unix()) / 3600 / 24);
- };
- export const getTrialStatus = (token: LicenseToken | null): Status => {
- if (!token || !token.trial || !token.trial_exp) {
- return { state: '', status: '', title: '', message: '' };
- }
- if (trialExpired(token)) {
- return {
- state: 'error',
- status: 'Expired',
- title: 'Trial expired',
- message: 'Your trial period has expired, please contact sales to purchase a license.',
- };
- }
- return {
- state: 'info',
- status: ` Trial expiring in ${trialWillExpireInDays(token)} day(s)`,
- title: 'Trial active',
- message: `Your trial expires in ${trialWillExpireInDays(
- token
- )} day(s), please contact sales to purchase a license.`,
- };
- };
- export const getRate = (total: number, value = 0) => {
- return (100 * value) / total;
- };
- export const getUtilStatus = (token: LicenseToken | null, stats?: ActiveUserStats | null): Status => {
- let state: CardState = '';
- let status = '';
- let title = '';
- let message = '';
- if (!token) {
- return {
- state,
- status,
- title,
- message,
- };
- }
- if (token.limit_by === LIMIT_BY_USERS) {
- const activeUsers = stats?.active_users;
- const totalUsers = token.included_users;
- let userRate = 0;
- if (typeof activeUsers === 'number') {
- userRate = getRate(totalUsers, activeUsers);
- }
- if (userRate > ERROR_RATE) {
- state = 'error';
- status = 'Quota exceeded: active users';
- title = 'User limit exceeded';
- message = `There are more than ${totalUsers} active users using Grafana.`;
- message += ' Contact support to increase the quotas.';
- } else if (userRate >= WARNING_RATE) {
- state = 'warning';
- if (userRate >= ERROR_RATE) {
- status = 'Limit reached';
- title = 'User utilization limit reached';
- message = `You are at your limit of ${totalUsers} active users.`;
- } else {
- status = 'Reaching limit';
- title = 'User utilization reaching limit';
- message = `There are ${activeUsers} active users.`;
- message += ` You are approaching your limit of ${totalUsers} active users.`;
- }
- status += ': active users';
- message += ' Contact support to increase the quotas.';
- }
- }
- return {
- state,
- status,
- title,
- message,
- };
- };
|