From 0a3007a9b0e4dafd040737cb3fececc8ec0f619a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Tue, 5 Mar 2024 12:05:52 +0900 Subject: [PATCH] =?UTF-8?q?Add:=20=E7=AE=A1=E7=90=86=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E3=81=A7=E7=89=B9=E3=81=AB=E8=B2=A0=E8=8D=B7=E3=81=AE=E5=A4=A7?= =?UTF-8?q?=E3=81=8D=E3=81=84=E5=87=A6=E7=90=86=E3=82=92=E7=84=A1=E5=8A=B9?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0?= =?UTF-8?q?=20(#633)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/high_load_helper.rb | 8 ++++++++ .../mastodon/components/admin/Counter.jsx | 14 +++++++++++--- .../mastodon/components/admin/Dimension.jsx | 18 ++++++++++++++++-- app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/locales/ja.json | 1 + app/lib/admin/metrics/dimension.rb | 2 ++ app/lib/admin/metrics/measure.rb | 2 ++ 7 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 app/helpers/high_load_helper.rb 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)