]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/ha/Resources.js
ui: eslint: fix trailing spaces
[pve-manager.git] / www / manager6 / ha / Resources.js
CommitLineData
b7ba8353
DM
1Ext.define('PVE.ha.ResourcesView', {
2 extend: 'Ext.grid.GridPanel',
3 alias: ['widget.pveHAResourcesView'],
4
ba93a9c6
DC
5 onlineHelp: 'ha_manager_resources',
6
c4bb9405
DC
7 stateful: true,
8 stateId: 'grid-ha-resources',
9
b7ba8353
DM
10 initComponent : function() {
11 var me = this;
12
13 var caps = Ext.state.Manager.get('GuiCap');
14
8a58f554
DC
15 if (!me.rstore) {
16 throw "no store given";
17 }
18
e7ade592 19 Proxmox.Utils.monStoreErrors(me, me.rstore);
8a58f554 20
eaa018d7 21 var store = Ext.create('Proxmox.data.DiffStore', {
8a58f554
DC
22 rstore: me.rstore,
23 filters: {
24 property: 'type',
25 value: 'service'
b7ba8353
DM
26 }
27 });
8a58f554 28
b7ba8353 29 var reload = function() {
8a58f554 30 me.rstore.load();
b7ba8353
DM
31 };
32
33 var render_error = function(dataIndex, value, metaData, record) {
34 var errors = record.data.errors;
35 if (errors) {
36 var msg = errors[dataIndex];
37 if (msg) {
3ab7e0ec 38 metaData.tdCls = 'proxmox-invalid-row';
b7ba8353 39 var html = '<p>' + Ext.htmlEncode(msg) + '</p>';
2a4971d8 40 metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
b7ba8353
DM
41 html.replace(/\"/g,'&quot;') + '"';
42 }
43 }
44 return value;
45 };
46
47 var sm = Ext.create('Ext.selection.RowModel', {});
48
49 var run_editor = function() {
50 var rec = sm.getSelection()[0];
51 var sid = rec.data.sid;
2a4971d8 52
b7ba8353
DM
53 var regex = /^(\S+):(\S+)$/;
54 var res = regex.exec(sid);
55
a764c5f7
DC
56 if (res[1] !== 'vm' && res[1] !== 'ct') {
57 return;
58 }
ed416f20 59 var guestType = res[1];
b7ba8353 60 var vmid = res[2];
2a4971d8 61
b7ba8353 62 var win = Ext.create('PVE.ha.VMResourceEdit',{
ed416f20 63 guestType: guestType,
b7ba8353
DM
64 vmid: vmid
65 });
66 win.on('destroy', reload);
67 win.show();
68 };
69
3b1ca3ff 70 var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
b7ba8353 71 selModel: sm,
3b1ca3ff
DC
72 baseurl: '/cluster/ha/resources/',
73 getUrl: function(rec) {
74 var me = this;
75 return me.baseurl + '/' + rec.get('sid');
76 },
77 callback: function() {
78 reload();
b7ba8353
DM
79 }
80 });
2a4971d8 81
5720fafa 82 var edit_btn = new Proxmox.button.Button({
b7ba8353
DM
83 text: gettext('Edit'),
84 disabled: true,
85 selModel: sm,
86 handler: run_editor
87 });
88
89 Ext.apply(me, {
90 store: store,
91 selModel: sm,
b7ba8353
DM
92 viewConfig: {
93 trackOver: false
94 },
95 tbar: [
96 {
97 text: gettext('Add'),
98 disabled: !caps.nodes['Sys.Console'],
99 handler: function() {
100 var win = Ext.create('PVE.ha.VMResourceEdit',{});
101 win.on('destroy', reload);
102 win.show();
103 }
104 },
105 edit_btn, remove_btn
106 ],
107
108 columns: [
109 {
110 header: 'ID',
111 width: 100,
112 sortable: true,
113 dataIndex: 'sid'
114 },
9cd33000
DC
115 {
116 header: gettext('State'),
117 width: 100,
118 sortable: true,
119 dataIndex: 'state'
120 },
3e52f2ed
TL
121 {
122 header: gettext('Node'),
123 width: 100,
124 sortable: true,
125 dataIndex: 'node'
126 },
b7ba8353 127 {
ecd45352 128 header: gettext('Request State'),
b7ba8353 129 width: 100,
9cd33000 130 hidden: true,
b7ba8353
DM
131 sortable: true,
132 renderer: function(v) {
30c93f90 133 return v || 'started';
b7ba8353 134 },
9cd33000
DC
135 dataIndex: 'request_state'
136 },
137 {
138 header: gettext('CRM State'),
139 width: 100,
140 hidden: true,
141 sortable: true,
142 dataIndex: 'crm_state'
b7ba8353 143 },
2ae20617
TL
144 {
145 header: gettext('Name'),
146 width: 100,
147 sortable: true,
105e5756 148 dataIndex: 'vname',
2ae20617 149 },
b2f9a9e4
TL
150 {
151 header: gettext('Max. Restart'),
152 width: 100,
153 sortable: true,
77a8d952 154 renderer: (v) => v === undefined ? '1' : v,
b2f9a9e4
TL
155 dataIndex: 'max_restart'
156 },
157 {
158 header: gettext('Max. Relocate'),
159 width: 100,
160 sortable: true,
77a8d952 161 renderer: (v) => v === undefined ? '1' : v,
b2f9a9e4
TL
162 dataIndex: 'max_relocate'
163 },
b7ba8353
DM
164 {
165 header: gettext('Group'),
166 width: 200,
167 sortable: true,
168 renderer: function(value, metaData, record) {
169 return render_error('group', value, metaData, record);
170 },
171 dataIndex: 'group'
172 },
173 {
174 header: gettext('Description'),
175 flex: 1,
2eb0767b 176 renderer: Ext.String.htmlEncode,
b7ba8353
DM
177 dataIndex: 'comment'
178 }
179 ],
180 listeners: {
b7ba8353
DM
181 beforeselect: function(grid, record, index, eOpts) {
182 if (!caps.nodes['Sys.Console']) {
183 return false;
184 }
185 },
186 itemdblclick: run_editor
187 }
188 });
189
190 me.callParent();
191 }
b7ba8353 192});