mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-11-04 19:43:45 +00:00
ui: dc: remove unneeded notification events panel
The notification event settings are replaced by notification matchers, which will combine the notification routing and filtering into a single concept. Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
This commit is contained in:
parent
46499a47b4
commit
2cb6c8df37
@ -160,7 +160,6 @@ JSSRC= \
|
||||
dc/Health.js \
|
||||
dc/Log.js \
|
||||
dc/NodeView.js \
|
||||
dc/NotificationEvents.js \
|
||||
dc/OptionView.js \
|
||||
dc/PermissionView.js \
|
||||
dc/PoolEdit.js \
|
||||
@ -347,6 +346,3 @@ install: pvemanagerlib.js
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf pvemanagerlib.js OnlineHelpInfo.js .lint-incremental
|
||||
|
||||
|
||||
|
||||
|
||||
@ -319,18 +319,6 @@ Ext.define('PVE.dc.Config', {
|
||||
|
||||
// this is being reworked, but we need to release newer manager versions already..
|
||||
let notification_enabled = false;
|
||||
if (notification_enabled && caps.dc['Sys.Audit']) {
|
||||
me.items.push(
|
||||
{
|
||||
xtype: 'pveNotificationEvents',
|
||||
title: gettext('Notifications'),
|
||||
onlineHelp: 'notification_events',
|
||||
iconCls: 'fa fa-bell-o',
|
||||
itemId: 'notifications',
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
if (notification_enabled && (
|
||||
caps.mapping['Mapping.Audit'] ||
|
||||
caps.mapping['Mapping.Use'] ||
|
||||
@ -340,12 +328,11 @@ Ext.define('PVE.dc.Config', {
|
||||
me.items.push(
|
||||
{
|
||||
xtype: 'pmxNotificationConfigView',
|
||||
title: gettext('Notification Targets'),
|
||||
title: gettext('Notifications'),
|
||||
onlineHelp: 'notification_targets',
|
||||
itemId: 'notification-targets',
|
||||
iconCls: 'fa fa-dot-circle-o',
|
||||
iconCls: 'fa fa-bell-o',
|
||||
baseUrl: '/cluster/notifications',
|
||||
groups: ['notifications'],
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@ -1,276 +0,0 @@
|
||||
Ext.define('PVE.dc.NotificationEventsPolicySelector', {
|
||||
alias: ['widget.pveNotificationEventsPolicySelector'],
|
||||
extend: 'Proxmox.form.KVComboBox',
|
||||
deleteEmpty: false,
|
||||
value: '__default__',
|
||||
|
||||
config: {
|
||||
warningRef: null,
|
||||
warnIfValIs: null,
|
||||
},
|
||||
|
||||
listeners: {
|
||||
change: function(field, newValue) {
|
||||
let me = this;
|
||||
if (!me.warningRef && !me.warnIfValIs) {
|
||||
return;
|
||||
}
|
||||
|
||||
let warningField = field.nextSibling(
|
||||
`displayfield[reference=${me.warningRef}]`,
|
||||
);
|
||||
warningField.setVisible(newValue === me.warnIfValIs);
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Ext.define('PVE.dc.NotificationEventDisabledWarning', {
|
||||
alias: ['widget.pveNotificationEventDisabledWarning'],
|
||||
extend: 'Ext.form.field.Display',
|
||||
userCls: 'pmx-hint',
|
||||
hidden: true,
|
||||
value: gettext('Disabling notifications is not recommended for production systems!'),
|
||||
});
|
||||
|
||||
Ext.define('PVE.dc.NotificationEventsTargetSelector', {
|
||||
alias: ['widget.pveNotificationEventsTargetSelector'],
|
||||
extend: 'PVE.form.NotificationTargetSelector',
|
||||
fieldLabel: gettext('Notification Target'),
|
||||
allowBlank: true,
|
||||
editable: true,
|
||||
autoSelect: false,
|
||||
deleteEmpty: false,
|
||||
emptyText: `${Proxmox.Utils.defaultText} (mail-to-root)`,
|
||||
});
|
||||
|
||||
Ext.define('PVE.dc.NotificationEvents', {
|
||||
extend: 'Proxmox.grid.ObjectGrid',
|
||||
alias: ['widget.pveNotificationEvents'],
|
||||
|
||||
// Taken from OptionView.js, but adapted slightly.
|
||||
// The modified version allows us to have multiple rows in the ObjectGrid
|
||||
// for the same underlying property (notify).
|
||||
// Every setting is eventually stored as a property string in the
|
||||
// notify key of datacenter.cfg.
|
||||
// When updating 'notify', all properties that were already set
|
||||
// also have to be submitted, even if they were not modified.
|
||||
// This means that we need to save the old value somewhere.
|
||||
addInputPanelRow: function(name, propertyName, text, opts) {
|
||||
let me = this;
|
||||
|
||||
opts = opts || {};
|
||||
me.rows = me.rows || {};
|
||||
|
||||
me.rows[name] = {
|
||||
required: true,
|
||||
defaultValue: opts.defaultValue,
|
||||
header: text,
|
||||
renderer: opts.renderer,
|
||||
name: propertyName,
|
||||
editor: {
|
||||
xtype: 'proxmoxWindowEdit',
|
||||
width: opts.width || 400,
|
||||
subject: text,
|
||||
onlineHelp: opts.onlineHelp,
|
||||
fieldDefaults: {
|
||||
labelWidth: opts.labelWidth || 150,
|
||||
},
|
||||
setValues: function(values) {
|
||||
let value = values[propertyName];
|
||||
|
||||
if (opts.parseBeforeSet) {
|
||||
value = PVE.Parser.parsePropertyString(value);
|
||||
}
|
||||
|
||||
Ext.Array.each(this.query('inputpanel'), function(panel) {
|
||||
panel.setValues(value);
|
||||
|
||||
// Save the original value
|
||||
panel.originalValue = {
|
||||
...value,
|
||||
};
|
||||
});
|
||||
},
|
||||
url: opts.url,
|
||||
items: [{
|
||||
xtype: 'inputpanel',
|
||||
onGetValues: function(values) {
|
||||
let fields = this.config.items.map(field => field.name).filter(n => n);
|
||||
|
||||
// Restore old, unchanged values
|
||||
for (const [key, value] of Object.entries(this.originalValue)) {
|
||||
if (!fields.includes(key)) {
|
||||
values[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
let value = {};
|
||||
if (Object.keys(values).length > 0) {
|
||||
value[propertyName] = PVE.Parser.printPropertyString(values);
|
||||
} else {
|
||||
Proxmox.Utils.assemble_field_data(value, { 'delete': propertyName });
|
||||
}
|
||||
|
||||
return value;
|
||||
},
|
||||
items: opts.items,
|
||||
}],
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
initComponent: function() {
|
||||
let me = this;
|
||||
|
||||
// Helper function for rendering the property
|
||||
// Needed since the actual value is always stored in the 'notify' property
|
||||
let render_value = (store, target_key, mode_key, default_val) => {
|
||||
let value = store.getById('notify')?.get('value') ?? {};
|
||||
let target = value[target_key] ?? 'mail-to-root';
|
||||
let template;
|
||||
|
||||
switch (value[mode_key]) {
|
||||
case 'always':
|
||||
template = gettext('Always, notify via target \'{0}\'');
|
||||
break;
|
||||
case 'never':
|
||||
template = gettext('Never');
|
||||
break;
|
||||
case 'auto':
|
||||
template = gettext('Automatically, notify via target \'{0}\'');
|
||||
break;
|
||||
default:
|
||||
template = gettext('{1} ({2}), notify via target \'{0}\'');
|
||||
break;
|
||||
}
|
||||
|
||||
return Ext.String.format(template, target, Proxmox.Utils.defaultText, default_val);
|
||||
};
|
||||
|
||||
me.addInputPanelRow('fencing', 'notify', gettext('Node Fencing'), {
|
||||
renderer: (value, metaData, record, rowIndex, colIndex, store) =>
|
||||
render_value(store, 'target-fencing', 'fencing', gettext('Always')),
|
||||
url: "/api2/extjs/cluster/options",
|
||||
items: [
|
||||
{
|
||||
xtype: 'pveNotificationEventsPolicySelector',
|
||||
name: 'fencing',
|
||||
fieldLabel: gettext('Notify'),
|
||||
comboItems: [
|
||||
['__default__', `${Proxmox.Utils.defaultText} (${gettext('Always')})`],
|
||||
['always', gettext('Always')],
|
||||
['never', gettext('Never')],
|
||||
],
|
||||
warningRef: 'warning',
|
||||
warnIfValIs: 'never',
|
||||
},
|
||||
{
|
||||
xtype: 'pveNotificationEventsTargetSelector',
|
||||
name: 'target-fencing',
|
||||
},
|
||||
{
|
||||
xtype: 'pveNotificationEventDisabledWarning',
|
||||
reference: 'warning',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.addInputPanelRow('replication', 'notify', gettext('Replication'), {
|
||||
renderer: (value, metaData, record, rowIndex, colIndex, store) =>
|
||||
render_value(store, 'target-replication', 'replication', gettext('Always')),
|
||||
url: "/api2/extjs/cluster/options",
|
||||
items: [
|
||||
{
|
||||
xtype: 'pveNotificationEventsPolicySelector',
|
||||
name: 'replication',
|
||||
fieldLabel: gettext('Notify'),
|
||||
comboItems: [
|
||||
['__default__', `${Proxmox.Utils.defaultText} (${gettext('Always')})`],
|
||||
['always', gettext('Always')],
|
||||
['never', gettext('Never')],
|
||||
],
|
||||
warningRef: 'warning',
|
||||
warnIfValIs: 'never',
|
||||
},
|
||||
{
|
||||
xtype: 'pveNotificationEventsTargetSelector',
|
||||
name: 'target-replication',
|
||||
},
|
||||
{
|
||||
xtype: 'pveNotificationEventDisabledWarning',
|
||||
reference: 'warning',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
me.addInputPanelRow('updates', 'notify', gettext('Package Updates'), {
|
||||
renderer: (value, metaData, record, rowIndex, colIndex, store) =>
|
||||
render_value(
|
||||
store,
|
||||
'target-package-updates',
|
||||
'package-updates',
|
||||
gettext('Automatically'),
|
||||
),
|
||||
url: "/api2/extjs/cluster/options",
|
||||
items: [
|
||||
{
|
||||
xtype: 'pveNotificationEventsPolicySelector',
|
||||
name: 'package-updates',
|
||||
fieldLabel: gettext('Notify'),
|
||||
comboItems: [
|
||||
[
|
||||
'__default__',
|
||||
`${Proxmox.Utils.defaultText} (${gettext('Automatically')})`,
|
||||
],
|
||||
['auto', gettext('Automatically')],
|
||||
['always', gettext('Always')],
|
||||
['never', gettext('Never')],
|
||||
],
|
||||
warningRef: 'warning',
|
||||
warnIfValIs: 'never',
|
||||
},
|
||||
{
|
||||
xtype: 'pveNotificationEventsTargetSelector',
|
||||
name: 'target-package-updates',
|
||||
},
|
||||
{
|
||||
xtype: 'pveNotificationEventDisabledWarning',
|
||||
reference: 'warning',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// Hack: Also load the notify property to make it accessible
|
||||
// for our render functions.
|
||||
me.rows.notify = {
|
||||
visible: false,
|
||||
};
|
||||
|
||||
me.selModel = Ext.create('Ext.selection.RowModel', {});
|
||||
|
||||
Ext.apply(me, {
|
||||
tbar: [{
|
||||
text: gettext('Edit'),
|
||||
xtype: 'proxmoxButton',
|
||||
disabled: true,
|
||||
handler: () => me.run_editor(),
|
||||
selModel: me.selModel,
|
||||
}],
|
||||
url: "/api2/json/cluster/options",
|
||||
editorConfig: {
|
||||
url: "/api2/extjs/cluster/options",
|
||||
},
|
||||
interval: 5000,
|
||||
cwidth1: 200,
|
||||
listeners: {
|
||||
itemdblclick: me.run_editor,
|
||||
},
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
|
||||
me.on('activate', me.rstore.startUpdate);
|
||||
me.on('destroy', me.rstore.stopUpdate);
|
||||
me.on('deactivate', me.rstore.stopUpdate);
|
||||
},
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user