diff --git a/app/helpers/high_load_helper.rb b/app/helpers/high_load_helper.rb new file mode 100644 index 0000000000..b4606c039f --- /dev/null +++ b/app/helpers/high_load_helper.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module HighLoadHelper + def allow_high_load? + ENV.fetch('ALLOW_HIGH_LOAD', 'true') == 'true' + end + module_function :allow_high_load? +end diff --git a/app/javascript/mastodon/components/admin/Counter.jsx b/app/javascript/mastodon/components/admin/Counter.jsx index 6ce23c9f05..9fd9ab9cd3 100644 --- a/app/javascript/mastodon/components/admin/Counter.jsx +++ b/app/javascript/mastodon/components/admin/Counter.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import { PureComponent } from 'react'; -import { FormattedNumber } from 'react-intl'; +import { FormattedNumber, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; @@ -43,6 +43,7 @@ export default class Counter extends PureComponent { state = { loading: true, data: null, + empty: false, }; componentDidMount () { @@ -52,6 +53,7 @@ export default class Counter extends PureComponent { this.setState({ loading: false, data: res.data, + empty: res.data.length === 0, }); }).catch(err => { console.error(err); @@ -60,7 +62,7 @@ export default class Counter extends PureComponent { render () { const { label, href, target } = this.props; - const { loading, data } = this.state; + const { loading, data, empty } = this.state; let content; @@ -71,6 +73,12 @@ export default class Counter extends PureComponent { ); + } else if (empty) { + content = ( + + + + ); } else { const measure = data[0]; const percentChange = measure.previous_total && percIncrease(measure.previous_total * 1, measure.total * 1); @@ -94,7 +102,7 @@ export default class Counter extends PureComponent {
- {!loading && ( + {!loading && !empty && ( x.value * 1)}> diff --git a/app/javascript/mastodon/components/admin/Dimension.jsx b/app/javascript/mastodon/components/admin/Dimension.jsx index bfda6c93d7..1ba68fd169 100644 --- a/app/javascript/mastodon/components/admin/Dimension.jsx +++ b/app/javascript/mastodon/components/admin/Dimension.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import { PureComponent } from 'react'; -import { FormattedNumber } from 'react-intl'; +import { FormattedNumber, FormattedMessage } from 'react-intl'; import api from 'mastodon/api'; import { Skeleton } from 'mastodon/components/skeleton'; @@ -21,6 +21,7 @@ export default class Dimension extends PureComponent { state = { loading: true, data: null, + empty: false, }; componentDidMount () { @@ -30,6 +31,7 @@ export default class Dimension extends PureComponent { this.setState({ loading: false, data: res.data, + empty: res.data.length === 0, }); }).catch(err => { console.error(err); @@ -38,7 +40,7 @@ export default class Dimension extends PureComponent { render () { const { label, limit } = this.props; - const { loading, data } = this.state; + const { loading, data, empty } = this.state; let content; @@ -60,6 +62,18 @@ export default class Dimension extends PureComponent { ); + } else if (empty) { + content = ( + + + + + + +
+ +
+ ); } else { const sum = data[0].data.reduce((sum, cur) => sum + (cur.value * 1), 0); diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 8ad552775d..6b776d1f80 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -89,6 +89,7 @@ "admin.dashboard.retention.average": "Average", "admin.dashboard.retention.cohort": "Sign-up month", "admin.dashboard.retention.cohort_size": "New users", + "admin.dimenssions.disabled_key": "This information is invalid.", "admin.impact_report.instance_accounts": "Accounts profiles this would delete", "admin.impact_report.instance_followers": "Followers our users would lose", "admin.impact_report.instance_follows": "Followers their users would lose", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 0bc4adf2a7..0c6153b99c 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -88,6 +88,7 @@ "admin.dashboard.retention.average": "平均", "admin.dashboard.retention.cohort": "サインアップ月", "admin.dashboard.retention.cohort_size": "新しいユーザー", + "admin.dimenssions.disabled_key": "この情報は無効です。", "admin.impact_report.instance_accounts": "プロフィール情報が削除されるアカウントの数", "admin.impact_report.instance_followers": "このサーバーのユーザーが失うフォロワー数", "admin.impact_report.instance_follows": "対象のサーバーのユーザーが失うフォロワー数", diff --git a/app/lib/admin/metrics/dimension.rb b/app/lib/admin/metrics/dimension.rb index e0122a65b5..5889667d47 100644 --- a/app/lib/admin/metrics/dimension.rb +++ b/app/lib/admin/metrics/dimension.rb @@ -14,6 +14,8 @@ class Admin::Metrics::Dimension }.freeze def self.retrieve(dimension_keys, start_at, end_at, limit, params) + dimension_keys.delete('servers') unless HighLoadHelper.allow_high_load? + Array(dimension_keys).filter_map do |key| klass = DIMENSIONS[key.to_sym] klass&.new(start_at, end_at, limit, klass.with_params? ? params.require(key.to_sym) : nil) diff --git a/app/lib/admin/metrics/measure.rb b/app/lib/admin/metrics/measure.rb index fe7e049290..ae7e03a74c 100644 --- a/app/lib/admin/metrics/measure.rb +++ b/app/lib/admin/metrics/measure.rb @@ -19,6 +19,8 @@ class Admin::Metrics::Measure }.freeze def self.retrieve(measure_keys, start_at, end_at, params) + measure_keys.delete('instance_statuses') unless HighLoadHelper.allow_high_load? + Array(measure_keys).filter_map do |key| klass = MEASURES[key.to_sym] klass&.new(start_at, end_at, klass.with_params? ? params.require(key.to_sym) : nil)