discourse/app/assets/javascripts/discourse/services/logs-notice.js.es6

72 lines
2.1 KiB
JavaScript

import { default as computed, on, observes } from 'ember-addons/ember-computed-decorators';
import { autoUpdatingRelativeAge } from 'discourse/lib/formatter';
const LOGS_NOTICE_KEY = "logs-notice-text";
const LogsNotice = Ember.Object.extend({
text: "",
@on('init')
_setup() {
if (!this.get('isActivated')) return;
const text = this.keyValueStore.getItem(LOGS_NOTICE_KEY);
if (text) this.set('text', text);
this.messageBus.subscribe("/logs_error_rate_exceeded", data => {
const duration = data.duration;
const rate = data.rate;
var siteSettingLimit = 0;
if (duration === 'minute') {
siteSettingLimit = this.siteSettings.alert_admins_if_errors_per_minute;
} else if (duration === 'hour') {
siteSettingLimit = this.siteSettings.alert_admins_if_errors_per_hour;
}
var translationKey = (rate === siteSettingLimit) ? 'reached' : 'exceeded';
this.set('text',
I18n.t(`logs_error_rate_notice.${translationKey}`, {
relativeAge: autoUpdatingRelativeAge(new Date(data.publish_at * 1000)),
siteSettingRate: I18n.t('logs_error_rate_notice.rate', { count: siteSettingLimit, duration: duration }),
rate: I18n.t('logs_error_rate_notice.rate', { count: rate, duration: duration }),
url: Discourse.getURL('/logs')
})
);
});
},
@computed('text')
isEmpty(text) {
return Ember.isEmpty(text);
},
@computed('text')
message(text) {
return new Handlebars.SafeString(text);
},
@computed('currentUser')
isAdmin(currentUser) {
return currentUser && currentUser.admin;
},
@computed('isEmpty', 'isAdmin')
hidden(isEmpty, isAdmin) {
return !isAdmin || isEmpty;
},
@observes('text')
_updateKeyValueStore() {
this.keyValueStore.setItem(LOGS_NOTICE_KEY, this.get('text'));
},
@computed('siteSettings.alert_admins_if_errors_per_hour', 'siteSettings.alert_admins_if_errors_per_minute')
isActivated(errorsPerHour, errorsPerMinute) {
return errorsPerHour > 0 || errorsPerMinute > 0;
}
});
export default LogsNotice;