]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/SnapshotTree.js
1 Ext
.define('PVE.lxc.SnapshotTree', {
2 extend
: 'Ext.tree.Panel',
3 alias
: ['widget.pveLxcSnapshotTree'],
9 sorterFn: function(rec1
, rec2
) {
10 var v1
= rec1
.data
.snaptime
;
11 var v2
= rec2
.data
.snaptime
;
13 if (rec1
.data
.name
=== 'current') {
16 if (rec2
.data
.name
=== 'current') {
20 return (v1
> v2
? 1 : (v1
< v2
? -1 : 0));
23 reload: function(repeat
) {
26 PVE
.Utils
.API2Request({
27 url
: '/nodes/' + me
.nodename
+ '/lxc/' + me
.vmid
+ '/snapshot',
29 failure: function(response
, opts
) {
30 PVE
.Utils
.setErrorMask(me
, response
.htmlStatus
);
31 me
.load_task
.delay(me
.load_delay
);
33 success: function(response
, opts
) {
34 PVE
.Utils
.setErrorMask(me
, false);
35 var digest
= 'invalid';
37 var root
= { name
: '__root', expanded
: true, children
: [] };
38 Ext
.Array
.each(response
.result
.data
, function(item
) {
41 if (item
.name
=== 'current') {
42 digest
= item
.digest
+ item
.running
;
44 item
.iconCls
= 'fa fa-fw fa-desktop x-fa-tree-running';
46 item
.iconCls
= 'fa fa-fw fa-desktop x-fa-tree';
49 item
.iconCls
= 'fa fa-fw fa-history x-fa-tree';
51 idhash
[item
.name
] = item
;
54 if (digest
!== me
.old_digest
) {
55 me
.old_digest
= digest
;
57 Ext
.Array
.each(response
.result
.data
, function(item
) {
58 if (item
.parent
&& idhash
[item
.parent
]) {
59 var parent_item
= idhash
[item
.parent
];
60 parent_item
.children
.push(item
);
61 parent_item
.leaf
= false;
62 parent_item
.expanded
= true;
63 parent_item
.expandable
= false;
65 root
.children
.push(item
);
72 me
.load_task
.delay(me
.load_delay
);
76 PVE
.Utils
.API2Request({
77 url
: '/nodes/' + me
.nodename
+ '/lxc/' + me
.vmid
+ '/feature',
78 params
: { feature
: 'snapshot' },
80 success: function(response
, options
) {
81 var res
= response
.result
.data
;
83 var snpBtns
= Ext
.ComponentQuery
.query('#snapshotBtn');
84 snpBtns
.forEach(function(item
){
94 initComponent: function() {
97 me
.nodename
= me
.pveSelNode
.data
.node
;
99 throw "no node name specified";
102 me
.vmid
= me
.pveSelNode
.data
.vmid
;
104 throw "no VM ID specified";
107 me
.load_task
= new Ext
.util
.DelayedTask(me
.reload
, me
);
109 var sm
= Ext
.create('Ext.selection.RowModel', {});
111 var valid_snapshot = function(record
) {
112 return record
&& record
.data
&& record
.data
.name
&&
113 record
.data
.name
!== 'current';
116 var valid_snapshot_rollback = function(record
) {
117 return record
&& record
.data
&& record
.data
.name
&&
118 record
.data
.name
!== 'current' && !record
.data
.snapstate
;
121 var run_editor = function() {
122 var rec
= sm
.getSelection()[0];
123 if (valid_snapshot(rec
)) {
124 var win
= Ext
.create('PVE.window.LxcSnapshot', {
125 snapname
: rec
.data
.name
,
126 nodename
: me
.nodename
,
130 me
.mon(win
, 'close', me
.reload
, me
);
134 var editBtn
= new PVE
.button
.Button({
135 text
: gettext('Edit'),
138 enableFn
: valid_snapshot
,
142 var rollbackBtn
= new PVE
.button
.Button({
143 text
: gettext('Rollback'),
146 enableFn
: valid_snapshot_rollback
,
147 confirmMsg: function(rec
) {
148 return PVE
.Utils
.format_task_description('vzrollback', me
.vmid
) +
149 " '" + rec
.data
.name
+ "'";
151 handler: function(btn
, event
) {
152 var rec
= sm
.getSelection()[0];
156 var snapname
= rec
.data
.name
;
158 PVE
.Utils
.API2Request({
159 url
: '/nodes/' + me
.nodename
+ '/lxc/' + me
.vmid
+ '/snapshot/' + snapname
+ '/rollback',
162 callback: function() {
165 failure: function (response
, opts
) {
166 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
168 success: function(response
, options
) {
169 var upid
= response
.result
.data
;
170 var win
= Ext
.create('PVE.window.TaskProgress', { upid
: upid
});
177 var removeBtn
= new PVE
.button
.Button({
178 text
: gettext('Remove'),
181 confirmMsg: function(rec
) {
182 var msg
= Ext
.String
.format(gettext('Are you sure you want to remove entry {0}'),
183 "'" + rec
.data
.name
+ "'");
186 enableFn
: valid_snapshot
,
187 handler: function(btn
, event
) {
188 var rec
= sm
.getSelection()[0];
192 var snapname
= rec
.data
.name
;
194 PVE
.Utils
.API2Request({
195 url
: '/nodes/' + me
.nodename
+ '/lxc/' + me
.vmid
+ '/snapshot/' + snapname
,
198 callback: function() {
201 failure: function (response
, opts
) {
202 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
204 success: function(response
, options
) {
205 var upid
= response
.result
.data
;
206 var win
= Ext
.create('PVE.window.TaskProgress', { upid
: upid
});
213 var snapshotBtn
= Ext
.create('Ext.Button', {
214 itemId
: 'snapshotBtn',
215 text
: gettext('Take Snapshot'),
217 handler: function() {
218 var win
= Ext
.create('PVE.window.LxcSnapshot', {
219 nodename
: me
.nodename
,
230 sortableColumns
: false,
232 tbar
: [ snapshotBtn
, rollbackBtn
, removeBtn
, editBtn
],
234 'name', 'description', 'snapstate', 'vmstate', 'running',
235 { name
: 'snaptime', type
: 'date', dateFormat
: 'timestamp' }
240 text
: gettext('Name'),
243 renderer: function(value
, metaData
, record
) {
244 if (value
=== 'current') {
252 // text: gettext('RAM'),
255 // dataIndex: 'vmstate',
257 // renderer: function(value, metaData, record) {
258 // if (record.data.name !== 'current') {
259 // return PVE.Utils.format_boolean(value);
264 text
: gettext('Date') + "/" + gettext("Status"),
265 dataIndex
: 'snaptime',
268 renderer: function(value
, metaData
, record
) {
269 if (record
.data
.snapstate
) {
270 return record
.data
.snapstate
;
273 return Ext
.Date
.format(value
,'Y-m-d H:i:s');
278 text
: gettext('Description'),
279 dataIndex
: 'description',
281 renderer: function(value
, metaData
, record
) {
282 if (record
.data
.name
=== 'current') {
283 return gettext("You are here!");
285 return Ext
.String
.htmlEncode(value
);
293 destroy
: me
.load_task
.cancel
,
294 itemdblclick
: run_editor
300 me
.store
.sorters
.add(new Ext
.util
.Sorter({
301 sorterFn
: me
.sorterFn