]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/ha/Resources.js
bd6c337c46ae2196b514b808bb6497f2effeeb72
[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 stateful: true,
8 stateId: 'grid-ha-resources',
9
10 initComponent : function() {
11 var me = this;
12
13 var caps = Ext.state.Manager.get('GuiCap');
14
15 if (!me.rstore) {
16 throw "no store given";
17 }
18
19 Proxmox.Utils.monStoreErrors(me, me.rstore);
20
21 var store = Ext.create('Proxmox.data.DiffStore', {
22 rstore: me.rstore,
23 filters: {
24 property: 'type',
25 value: 'service'
26 }
27 });
28
29 var reload = function() {
30 me.rstore.load();
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) {
38 metaData.tdCls = 'proxmox-invalid-row';
39 var html = '<p>' + Ext.htmlEncode(msg) + '</p>';
40 metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
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;
52
53 var regex = /^(\S+):(\S+)$/;
54 var res = regex.exec(sid);
55
56 if (res[1] !== 'vm' && res[1] !== 'ct') {
57 return;
58 }
59 var guestType = res[1];
60 var vmid = res[2];
61
62 var win = Ext.create('PVE.ha.VMResourceEdit',{
63 guestType: guestType,
64 vmid: vmid
65 });
66 win.on('destroy', reload);
67 win.show();
68 };
69
70 var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
71 selModel: sm,
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();
79 }
80 });
81
82 var edit_btn = new Proxmox.button.Button({
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,
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 },
115 {
116 header: gettext('State'),
117 width: 100,
118 sortable: true,
119 dataIndex: 'state'
120 },
121 {
122 header: gettext('Node'),
123 width: 100,
124 sortable: true,
125 dataIndex: 'node'
126 },
127 {
128 header: gettext('Request State'),
129 width: 100,
130 hidden: true,
131 sortable: true,
132 renderer: function(v) {
133 return v || 'started';
134 },
135 dataIndex: 'request_state'
136 },
137 {
138 header: gettext('CRM State'),
139 width: 100,
140 hidden: true,
141 sortable: true,
142 dataIndex: 'crm_state'
143 },
144 {
145 header: gettext('Max. Restart'),
146 width: 100,
147 sortable: true,
148 renderer: function(v) {
149 if (v === undefined) {
150 return '1';
151 }
152 return v;
153 },
154 dataIndex: 'max_restart'
155 },
156 {
157 header: gettext('Max. Relocate'),
158 width: 100,
159 sortable: true,
160 renderer: function(v) {
161 if (v === undefined) {
162 return '1';
163 }
164 return v;
165 },
166 dataIndex: 'max_relocate'
167 },
168 {
169 header: gettext('Group'),
170 width: 200,
171 sortable: true,
172 renderer: function(value, metaData, record) {
173 return render_error('group', value, metaData, record);
174 },
175 dataIndex: 'group'
176 },
177 {
178 header: gettext('Description'),
179 flex: 1,
180 renderer: Ext.String.htmlEncode,
181 dataIndex: 'comment'
182 }
183 ],
184 listeners: {
185 beforeselect: function(grid, record, index, eOpts) {
186 if (!caps.nodes['Sys.Console']) {
187 return false;
188 }
189 },
190 itemdblclick: run_editor
191 }
192 });
193
194 me.callParent();
195 }
196 }, function() {
197
198 Ext.define('pve-ha-resources', {
199 extend: 'Ext.data.Model',
200 fields: [
201 'sid', 'state', 'digest', 'errors', 'group', 'comment',
202 'max_restart', 'max_relocate', 'type', 'status', 'node',
203 'crm_state', 'request_state'
204 ],
205 idProperty: 'sid'
206 });
207
208 });