]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/ha/Resources.js
move onlineHelp into classes from definition
[pve-manager.git] / www / manager6 / ha / Resources.js
1 Ext.define('PVE.ha.ResourcesView', {
2 extend: 'Ext.grid.GridPanel',
3 alias: ['widget.pveHAResourcesView'],
4
5 onlineHelp: 'ha_manager_resources',
6
7 initComponent : function() {
8 var me = this;
9
10 var caps = Ext.state.Manager.get('GuiCap');
11
12 var store = new Ext.data.Store({
13 model: 'pve-ha-resources',
14 proxy: {
15 type: 'pve',
16 url: "/api2/json/cluster/ha/resources"
17 },
18 sorters: {
19 property: 'sid',
20 order: 'DESC'
21 }
22 });
23
24 var reload = function() {
25 store.load();
26 };
27
28 var render_error = function(dataIndex, value, metaData, record) {
29 var errors = record.data.errors;
30 if (errors) {
31 var msg = errors[dataIndex];
32 if (msg) {
33 metaData.tdCls = 'x-form-invalid-field';
34 var html = '<p>' + Ext.htmlEncode(msg) + '</p>';
35 metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
36 html.replace(/\"/g,'&quot;') + '"';
37 }
38 }
39 return value;
40 };
41
42 var sm = Ext.create('Ext.selection.RowModel', {});
43
44 var run_editor = function() {
45 var rec = sm.getSelection()[0];
46 var sid = rec.data.sid;
47
48 var regex = /^(\S+):(\S+)$/;
49 var res = regex.exec(sid);
50
51 if (res[1] !== 'vm' && res[1] !== 'ct') {
52 return;
53 }
54
55 var vmid = res[2];
56
57 var win = Ext.create('PVE.ha.VMResourceEdit',{
58 vmid: vmid
59 });
60 win.on('destroy', reload);
61 win.show();
62 };
63
64 var remove_btn = new PVE.button.Button({
65 text: gettext('Remove'),
66 disabled: true,
67 selModel: sm,
68 handler: function(btn, event, rec) {
69 var sid = rec.data.sid;
70
71 PVE.Utils.API2Request({
72 url: '/cluster/ha/resources/' + sid,
73 method: 'DELETE',
74 waitMsgTarget: me,
75 callback: function() {
76 reload();
77 },
78 failure: function (response, opts) {
79 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
80 }
81 });
82 }
83 });
84
85 var edit_btn = new PVE.button.Button({
86 text: gettext('Edit'),
87 disabled: true,
88 selModel: sm,
89 handler: run_editor
90 });
91
92 Ext.apply(me, {
93 store: store,
94 selModel: sm,
95 stateful: false,
96 viewConfig: {
97 trackOver: false
98 },
99 tbar: [
100 {
101 text: gettext('Add'),
102 disabled: !caps.nodes['Sys.Console'],
103 handler: function() {
104 var win = Ext.create('PVE.ha.VMResourceEdit',{});
105 win.on('destroy', reload);
106 win.show();
107 }
108 },
109 edit_btn, remove_btn
110 ],
111
112 columns: [
113 {
114 header: 'ID',
115 width: 100,
116 sortable: true,
117 dataIndex: 'sid'
118 },
119 {
120 header: gettext('State'),
121 width: 100,
122 sortable: true,
123 renderer: function(v) {
124 return v || 'enabled';
125 },
126 dataIndex: 'state'
127 },
128 {
129 header: gettext('Max. Restart'),
130 width: 100,
131 sortable: true,
132 renderer: function(v) {
133 return v || '1';
134 },
135 dataIndex: 'max_restart'
136 },
137 {
138 header: gettext('Max. Relocate'),
139 width: 100,
140 sortable: true,
141 renderer: function(v) {
142 return v || '1';
143 },
144 dataIndex: 'max_relocate'
145 },
146 {
147 header: gettext('Group'),
148 width: 200,
149 sortable: true,
150 renderer: function(value, metaData, record) {
151 return render_error('group', value, metaData, record);
152 },
153 dataIndex: 'group'
154 },
155 {
156 header: gettext('Description'),
157 flex: 1,
158 renderer: Ext.String.htmlEncode,
159 dataIndex: 'comment'
160 }
161 ],
162 listeners: {
163 activate: reload,
164 beforeselect: function(grid, record, index, eOpts) {
165 if (!caps.nodes['Sys.Console']) {
166 return false;
167 }
168 },
169 itemdblclick: run_editor
170 }
171 });
172
173 me.callParent();
174 }
175 }, function() {
176
177 Ext.define('pve-ha-resources', {
178 extend: 'Ext.data.Model',
179 fields: [
180 'sid', 'state', 'digest', 'errors', 'group', 'comment',
181 'max_restart', 'max_relocate'
182 ],
183 idProperty: 'sid'
184 });
185
186 });