]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Prune.js
1 Ext
.define('pve-prune-list', {
2 extend
: 'Ext.data.Model',
9 dateFormat
: 'timestamp',
14 Ext
.define('PVE.PruneInputPanel', {
15 extend
: 'Proxmox.panel.InputPanel',
16 alias
: 'widget.pvePruneInputPanel',
17 mixins
: ['Proxmox.Mixin.CBind'],
19 onGetValues: function(values
) {
22 // the API expects a single prune-backups property string
23 let pruneBackups
= PVE
.Parser
.printPropertyString(values
);
25 'prune-backups': pruneBackups
,
26 'type': me
.backup_type
,
34 xclass
: 'Ext.app.ViewController',
36 init: function(view
) {
38 throw "no url specified";
40 if (!view
.backup_type
) {
41 throw "no backup_type specified";
43 if (!view
.backup_id
) {
44 throw "no backup_id specified";
47 this.reload(); // initial load
51 let view
= this.getView();
53 // helper to allow showing why a backup is kept
54 let addKeepReasons = function(backups
, params
) {
62 'keep-all', // when all keep options are not set
66 backups
.sort((a
, b
) => b
.ctime
- a
.ctime
);
69 let nextRule = function() {
73 rule
= rules
[ruleIndex
];
74 } while (!params
[rule
] && rule
!== 'keep-all');
79 let rule
= nextRule();
80 for (let backup
of backups
) {
81 if (backup
.mark
=== 'keep') {
83 if (rule
!== 'keep-all') {
84 backup
.keepReason
= rule
+ ': ' + counter
[rule
];
85 if (counter
[rule
] >= params
[rule
]) {
89 backup
.keepReason
= rule
;
95 let params
= view
.getValues();
96 let keepParams
= PVE
.Parser
.parsePropertyString(params
["prune-backups"]);
98 Proxmox
.Utils
.API2Request({
102 callback: function() {
103 // for easy breakpoint setting
105 failure: function(response
, opts
) {
106 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
108 success: function(response
, options
) {
109 var data
= response
.result
.data
;
110 addKeepReasons(data
, keepParams
);
111 view
.pruneStore
.setData(data
);
117 field
: { change
: 'reload' },
123 xtype
: 'pmxPruneKeepField',
125 fieldLabel
: gettext('keep-last'),
128 xtype
: 'pmxPruneKeepField',
130 fieldLabel
: gettext('keep-hourly'),
133 xtype
: 'pmxPruneKeepField',
135 fieldLabel
: gettext('keep-daily'),
138 xtype
: 'pmxPruneKeepField',
140 fieldLabel
: gettext('keep-weekly'),
143 xtype
: 'pmxPruneKeepField',
144 name
: 'keep-monthly',
145 fieldLabel
: gettext('keep-monthly'),
148 xtype
: 'pmxPruneKeepField',
150 fieldLabel
: gettext('keep-yearly'),
154 initComponent: function() {
157 me
.pruneStore
= Ext
.create('Ext.data.Store', {
158 model
: 'pve-prune-list',
159 sorters
: { property
: 'ctime', direction
: 'DESC' },
166 store
: me
.pruneStore
,
169 header
: gettext('Backup Time'),
172 renderer: function(value
, metaData
, record
) {
173 let text
= Ext
.Date
.format(value
, 'Y-m-d H:i:s');
174 if (record
.data
.mark
=== 'remove') {
175 return '<div style="text-decoration: line-through;">'+ text
+'</div>';
183 text
: 'Keep (reason)',
185 renderer: function(value
, metaData
, record
) {
186 if (record
.data
.mark
=== 'keep') {
187 return 'true (' + record
.data
.keepReason
+ ')';
188 } else if (record
.data
.mark
=== 'protected') {
189 return 'true (protected)';
190 } else if (record
.data
.mark
=== 'renamed') {
191 return 'true (renamed)';
206 Ext
.define('PVE.window.Prune', {
207 extend
: 'Proxmox.window.Edit',
210 submitText
: gettext("Prune"),
212 fieldDefaults
: { labelWidth
: 130 },
216 initComponent: function() {
220 throw "no nodename specified";
223 throw "no storage specified";
225 if (!me
.backup_type
) {
226 throw "no backup_type specified";
228 if (me
.backup_type
!== 'qemu' && me
.backup_type
!== 'lxc') {
229 throw "unknown backup type: " + me
.backup_type
;
232 throw "no backup_id specified";
235 let title
= Ext
.String
.format(
236 gettext("Prune Backups for '{0}' on Storage '{1}'"),
237 me
.backup_type
+ '/' + me
.backup_id
,
242 url
: '/api2/extjs/nodes/' + me
.nodename
+ '/storage/' + me
.storage
+ "/prunebackups",
246 xtype
: 'pvePruneInputPanel',
247 url
: '/api2/extjs/nodes/' + me
.nodename
+ '/storage/' + me
.storage
+ "/prunebackups",
248 backup_type
: me
.backup_type
,
249 backup_id
: me
.backup_id
,