]> git.proxmox.com Git - proxmox-backup.git/blob - www/DataStorePrune.js
src/bin/proxmox-backup-proxy.rs: gather iowait stats
[proxmox-backup.git] / www / DataStorePrune.js
1 Ext.define('pbs-prune-list', {
2 extend: 'Ext.data.Model',
3 fields: [
4 'backup-type',
5 'backup-id',
6 {
7 name: 'backup-time',
8 type: 'date',
9 dateFormat: 'timestamp'
10 },
11 ]
12 });
13
14 Ext.define('PBS.DataStorePruneInputPanel', {
15 extend: 'Proxmox.panel.InputPanel',
16 alias: 'widget.pbsDataStorePruneInputPanel',
17 mixins: ['Proxmox.Mixin.CBind'],
18
19 onGetValues: function(values) {
20 var me = this;
21
22 values["backup-type"] = me.backup_type;
23 values["backup-id"] = me.backup_id;
24 return values;
25 },
26
27 controller: {
28 xclass: 'Ext.app.ViewController',
29
30 init: function(view) {
31 if (!view.url) {
32 throw "no url specified";
33 }
34 if (!view.backup_type) {
35 throw "no backup_type specified";
36 }
37 if (!view.backup_id) {
38 throw "no backup_id specified";
39 }
40
41 this.reload(); // initial load
42 },
43
44 reload: function() {
45 var view = this.getView();
46
47 let params = view.getValues();
48 params["dry-run"] = true;
49
50 Proxmox.Utils.API2Request({
51 url: view.url,
52 method: "POST",
53 params: params,
54 callback: function() {
55 console.log("DONE");
56 },
57 failure: function (response, opts) {
58 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
59 },
60 success: function(response, options) {
61 var data = response.result.data;
62 console.log(data);
63 view.prune_store.setData(data);
64 }
65 });
66 },
67
68 control: {
69 field: { change: 'reload' }
70 }
71 },
72
73 column1: [
74 {
75 xtype: 'proxmoxintegerfield',
76 name: 'keep-last',
77 allowBlank: true,
78 fieldLabel: gettext('keep-last'),
79 minValue: 1,
80 },
81 {
82 xtype: 'proxmoxintegerfield',
83 name: 'keep-hourly',
84 allowBlank: true,
85 fieldLabel: gettext('keep-hourly'),
86 minValue: 1,
87 },
88 {
89 xtype: 'proxmoxintegerfield',
90 name: 'keep-daily',
91 allowBlank: true,
92 fieldLabel: gettext('keep-daily'),
93 minValue: 1,
94 },
95 {
96 xtype: 'proxmoxintegerfield',
97 name: 'keep-weekly',
98 allowBlank: true,
99 fieldLabel: gettext('keep-weekly'),
100 minValue: 1,
101 },
102 {
103 xtype: 'proxmoxintegerfield',
104 name: 'keep-monthly',
105 allowBlank: true,
106 fieldLabel: gettext('keep-monthly'),
107 minValue: 1,
108 },
109 {
110 xtype: 'proxmoxintegerfield',
111 name: 'keep-yearly',
112 allowBlank: true,
113 fieldLabel: gettext('keep-yearly'),
114 minValue: 1,
115 }
116 ],
117
118
119 initComponent : function() {
120 var me = this;
121
122 me.prune_store = Ext.create('Ext.data.Store', {
123 model: 'pbs-prune-list',
124 sorters: { property: 'backup-time', direction: 'DESC' }
125 });
126
127 me.column2 = [
128 {
129 xtype: 'grid',
130 height: 200,
131 store: me.prune_store,
132 columns: [
133 {
134 header: gettext('Backup Time'),
135 sortable: true,
136 dataIndex: 'backup-time',
137 renderer: function(value, metaData, record) {
138 let text = Ext.Date.format(value, 'Y-m-d H:i:s');
139 if (record.data.keep) {
140 return text;
141 } else {
142 return '<div style="text-decoration: line-through;">'+ text +'</div>';
143 }
144 },
145 flex: 1,
146 },
147 {
148 text: "keep",
149 dataIndex: 'keep'
150 }
151 ]
152 }
153 ];
154
155 me.callParent();
156 }
157 });
158
159 Ext.define('PBS.DataStorePrune', {
160 extend: 'Proxmox.window.Edit',
161
162 method: 'POST',
163 submitText: "Prune",
164
165 isCreate: true,
166
167 initComponent : function() {
168 var me = this;
169
170 if (!me.datastore) {
171 throw "no datastore specified";
172 }
173 if (!me.backup_type) {
174 throw "no backup_type specified";
175 }
176 if (!me.backup_id) {
177 throw "no backup_id specified";
178 }
179
180 Ext.apply(me, {
181 url: '/api2/extjs/admin/datastore/' + me.datastore + "/prune",
182 title: "Prune Datastore '" + me.datastore + "'",
183 items: [{
184 xtype: 'pbsDataStorePruneInputPanel',
185 url: '/api2/extjs/admin/datastore/' + me.datastore + "/prune",
186 backup_type: me.backup_type,
187 backup_id: me.backup_id
188 }]
189 });
190
191 me.callParent();
192 }
193 });