]>
Commit | Line | Data |
---|---|---|
8b349e01 TL |
1 | Ext.define('PMG.PBSConfig', { |
2 | extend: 'Ext.panel.Panel', | |
3 | xtype: 'pmgPBSConfig', | |
4 | ||
5 | controller: { | |
6 | xclass: 'Ext.app.ViewController', | |
7 | ||
8 | callRestore: function(grid, record) { | |
9 | let remote = this.getViewModel().get('remote'); | |
10 | Ext.create('PMG.RestoreWindow', { | |
11 | remote: remote, | |
12 | backup_id: record.data['backup-id'], | |
13 | backup_time: record.data['backup-time'], | |
14 | }).show(); | |
15 | }, | |
16 | ||
17 | restoreSnapshot: function(button) { | |
18 | let me = this; | |
19 | let view = me.lookup('pbsremotegrid'); | |
20 | let record = view.getSelection()[0]; | |
21 | me.callRestore(view, record); | |
22 | }, | |
23 | ||
24 | runBackup: function(button) { | |
25 | let me = this; | |
26 | let view = me.lookup('pbsremotegrid'); | |
27 | let remote = me.getViewModel().get('remote'); | |
28 | Proxmox.Utils.API2Request({ | |
29 | url: `/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot`, | |
30 | method: 'POST', | |
31 | waitMsgTarget: view, | |
32 | failure: function(response, opts) { | |
33 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
34 | }, | |
35 | success: function(response, opts) { | |
36 | let upid = response.result.data; | |
37 | ||
38 | let win = Ext.create('Proxmox.window.TaskViewer', { | |
39 | upid: upid, | |
40 | }); | |
41 | win.show(); | |
42 | me.mon(win, 'close', function() { view.getStore().load(); }); | |
43 | }, | |
44 | }); | |
45 | }, | |
46 | ||
47 | reload: function(grid) { | |
48 | let me = this; | |
49 | let selection = grid.getSelection(); | |
50 | me.showInfo(grid, selection); | |
51 | }, | |
52 | ||
53 | showInfo: function(grid, selected) { | |
54 | let me = this; | |
55 | let viewModel = me.getViewModel(); | |
56 | if (selected[0]) { | |
57 | let remote = selected[0].data.remote; | |
58 | viewModel.set('selected', true); | |
59 | viewModel.set('remote', remote); | |
60 | ||
61 | // set grid stores and load them | |
62 | let remstore = me.lookup('pbsremotegrid').getStore(); | |
6ff66068 TL |
63 | remstore |
64 | .getProxy() | |
65 | .setUrl(`/api2/json/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot`); | |
8b349e01 TL |
66 | remstore.load(); |
67 | } else { | |
68 | viewModel.set('selected', false); | |
69 | } | |
70 | }, | |
71 | reloadSnapshots: function() { | |
72 | let me = this; | |
73 | let grid = me.lookup('grid'); | |
74 | let selection = grid.getSelection(); | |
75 | me.showInfo(grid, selection); | |
76 | }, | |
77 | init: function(view) { | |
78 | let me = this; | |
79 | me.lookup('grid').relayEvents(view, ['activate']); | |
80 | let pbsremotegrid = me.lookup('pbsremotegrid'); | |
81 | ||
82 | Proxmox.Utils.monStoreErrors(pbsremotegrid, pbsremotegrid.getStore(), true); | |
83 | }, | |
84 | ||
85 | control: { | |
86 | 'grid[reference=grid]': { | |
87 | selectionchange: 'showInfo', | |
88 | load: 'reload', | |
89 | }, | |
90 | 'grid[reference=pbsremotegrid]': { | |
91 | itemdblclick: 'restoreSnapshot', | |
92 | }, | |
93 | }, | |
94 | }, | |
95 | ||
96 | viewModel: { | |
97 | data: { | |
98 | remote: '', | |
99 | selected: false, | |
100 | }, | |
101 | }, | |
102 | ||
103 | layout: 'border', | |
104 | ||
105 | items: [ | |
106 | { | |
107 | region: 'center', | |
108 | reference: 'grid', | |
109 | xtype: 'pmgPBSConfigGrid', | |
110 | border: false, | |
111 | }, | |
112 | { | |
113 | xtype: 'grid', | |
114 | region: 'south', | |
115 | reference: 'pbsremotegrid', | |
116 | hidden: true, | |
117 | height: '70%', | |
118 | border: false, | |
119 | split: true, | |
120 | emptyText: gettext('No backups on remote'), | |
121 | tbar: [ | |
122 | { | |
8b349e01 TL |
123 | text: gettext('Backup'), |
124 | handler: 'runBackup', | |
8b349e01 TL |
125 | }, |
126 | { | |
127 | xtype: 'proxmoxButton', | |
128 | text: gettext('Restore'), | |
129 | handler: 'restoreSnapshot', | |
130 | disabled: true, | |
131 | }, | |
132 | { | |
133 | xtype: 'proxmoxStdRemoveButton', | |
134 | text: gettext('Forget Snapshot'), | |
135 | disabled: true, | |
136 | getUrl: function(rec) { | |
137 | let me = this; | |
138 | let remote = me.lookupViewModel().get('remote'); | |
139 | let snapshot = `${rec.data['backup-id']}/${rec.data['backup-time']}`; | |
140 | return `/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot/${snapshot}`; | |
141 | }, | |
142 | confirmMsg: function(rec) { | |
143 | let me = this; | |
144 | let snapshot = `${rec.data['backup-id']}/${rec.data['backup-time']}`; | |
145 | return Ext.String.format( | |
146 | gettext('Are you sure you want to forget snapshot {0}'), | |
147 | `'${snapshot}'`, | |
148 | ); | |
149 | }, | |
150 | callback: 'reloadSnapshots', | |
151 | }, | |
152 | ], | |
153 | store: { | |
6ff66068 | 154 | fields: ['backup-id', 'backup-time', 'size', 'ctime', 'encrypted'], |
8b349e01 TL |
155 | proxy: { type: 'proxmox' }, |
156 | sorters: [ | |
157 | { | |
6ff66068 | 158 | property: 'backup-time', |
8b349e01 TL |
159 | direction: 'DESC', |
160 | }, | |
161 | ], | |
162 | }, | |
163 | bind: { | |
6ff66068 TL |
164 | title: Ext.String.format( |
165 | gettext("Backup snapshots on '{0}'"), | |
166 | '{remote}', | |
167 | ), | |
8b349e01 TL |
168 | }, |
169 | columns: [ | |
170 | { | |
171 | text: 'Group ID', | |
172 | dataIndex: 'backup-id', | |
173 | flex: 1, | |
174 | }, | |
175 | { | |
176 | text: 'Time', | |
177 | dataIndex: 'backup-time', | |
178 | width: 180, | |
179 | }, | |
180 | { | |
181 | text: 'Size', | |
182 | dataIndex: 'size', | |
183 | renderer: Proxmox.Utils.format_size, | |
184 | flex: 1, | |
185 | }, | |
186 | { | |
187 | text: 'Encrypted', | |
188 | dataIndex: 'encrypted', | |
189 | hidden: true, // FIXME: actually return from API | |
190 | renderer: Proxmox.Utils.format_boolean, | |
191 | flex: 1, | |
192 | }, | |
193 | ], | |
194 | }, | |
195 | ], | |
196 | ||
197 | }); |