]>
git.proxmox.com Git - proxmox-backup.git/blob - www/datastore/Prune.js
1 Ext
.define('pbs-prune-list', {
2 extend
: 'Ext.data.Model',
9 dateFormat
: 'timestamp',
14 Ext
.define('PBS.PruneKeepInput', {
15 extend
: 'Proxmox.form.field.Integer',
16 alias
: 'widget.pbsPruneKeepInput',
22 change: function(field
, newValue
, oldValue
) {
23 if (newValue
!== this.originalValue
) {
24 this.triggers
.clear
.setVisible(true);
30 cls
: 'pmx-clear-trigger',
34 this.triggers
.clear
.setVisible(false);
35 this.setValue(this.originalValue
);
42 Ext
.define('PBS.Datastore.PruneInputPanel', {
43 extend
: 'Proxmox.panel.InputPanel',
44 alias
: 'widget.pbsDataStorePruneInputPanel',
45 mixins
: ['Proxmox.Mixin.CBind'],
47 onGetValues: function(values
) {
50 values
["backup-type"] = me
.backup_type
;
51 values
["backup-id"] = me
.backup_id
;
52 if (me
.ns
&& me
.ns
!== '') {
55 values
["use-task"] = true;
60 xclass
: 'Ext.app.ViewController',
62 init: function(view
) {
64 throw "no url specified";
66 if (!view
.backup_type
) {
67 throw "no backup_type specified";
69 if (!view
.backup_id
) {
70 throw "no backup_id specified";
73 this.reload(); // initial load
77 var view
= this.getView();
79 // helper to allow showing why a backup is kept
80 let addKeepReasons = function(backups
, params
) {
88 'keep-all', // when all keep options are not set
92 backups
.sort(function(a
, b
) {
93 return b
["backup-time"] - a
["backup-time"];
97 let nextRule = function() {
101 rule
= rules
[ruleIndex
];
102 } while (!params
[rule
] && rule
!== 'keep-all');
107 let rule
= nextRule();
108 for (let backup
of backups
) {
110 if (backup
.protected) {
111 backup
.keepReason
= 'protected';
115 if (rule
!== 'keep-all') {
116 backup
.keepReason
= rule
+ ': ' + counter
[rule
];
117 if (counter
[rule
] >= params
[rule
]) {
121 backup
.keepReason
= rule
;
127 let params
= view
.getValues();
128 params
["dry-run"] = true;
129 if (view
.ns
&& view
.ns
!== '') {
133 Proxmox
.Utils
.API2Request({
137 callback: function() {
138 // for easy breakpoint setting
140 failure
: response
=> Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
),
141 success: function(response
, options
) {
142 let data
= response
.result
.data
;
143 addKeepReasons(data
, params
);
144 view
.prune_store
.setData(data
);
150 field
: { change
: 'reload' },
156 xtype
: 'pbsPruneKeepInput',
158 fieldLabel
: gettext('keep-last'),
161 xtype
: 'pbsPruneKeepInput',
163 fieldLabel
: gettext('keep-hourly'),
166 xtype
: 'pbsPruneKeepInput',
168 fieldLabel
: gettext('keep-daily'),
171 xtype
: 'pbsPruneKeepInput',
173 fieldLabel
: gettext('keep-weekly'),
176 xtype
: 'pbsPruneKeepInput',
177 name
: 'keep-monthly',
178 fieldLabel
: gettext('keep-monthly'),
181 xtype
: 'pbsPruneKeepInput',
183 fieldLabel
: gettext('keep-yearly'),
188 initComponent: function() {
191 me
.prune_store
= Ext
.create('Ext.data.Store', {
192 model
: 'pbs-prune-list',
193 sorters
: { property
: 'backup-time', direction
: 'DESC' },
200 store
: me
.prune_store
,
203 header
: gettext('Backup Time'),
205 dataIndex
: 'backup-time',
206 renderer: function(value
, metaData
, record
) {
207 let text
= Ext
.Date
.format(value
, 'Y-m-d H:i:s');
208 if (record
.data
.keep
) {
211 return '<div style="text-decoration: line-through;">'+ text
+'</div>';
217 text
: 'Keep (reason)',
219 renderer: function(value
, metaData
, record
) {
220 if (record
.data
.keep
) {
221 return 'true (' + record
.data
.keepReason
+ ')';
236 Ext
.define('PBS.DataStorePrune', {
237 extend
: 'Proxmox.window.Edit',
239 onlineHelp
: 'maintenance_pruning',
246 fieldDefaults
: { labelWidth
: 130 },
248 initComponent: function() {
252 throw "no datastore specified";
254 if (!me
.backup_type
) {
255 throw "no backup_type specified";
258 throw "no backup_id specified";
261 let ns
= me
.ns
&& me
.ns
!== '' ? `${me.ns} ` : '';
264 url
: '/api2/extjs/admin/datastore/' + me
.datastore
+ "/prune",
265 title
: `Prune Group '${me.backup_type}/${me.backup_id}' on '${me.datastore}:${ns}'`,
267 xtype
: 'pbsDataStorePruneInputPanel',
268 url
: '/api2/extjs/admin/datastore/' + me
.datastore
+ "/prune",
270 backup_type
: me
.backup_type
,
271 backup_id
: me
.backup_id
,