]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Prune.js
f503773ded2220ad4f277c58ab3a93bbd7ce5033
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(function(a
, b
) {
67 return a
.ctime
< b
.ctime
;
71 let nextRule = function() {
75 rule
= rules
[ruleIndex
];
76 } while (!params
[rule
] && rule
!== 'keep-all');
81 let rule
= nextRule();
82 for (let backup
of backups
) {
83 if (backup
.mark
=== 'keep') {
85 if (rule
!== 'keep-all') {
86 backup
.keepReason
= rule
+ ': ' + counter
[rule
];
87 if (counter
[rule
] >= params
[rule
]) {
91 backup
.keepReason
= rule
;
97 let params
= view
.getValues();
98 let keepParams
= PVE
.Parser
.parsePropertyString(params
["prune-backups"]);
100 Proxmox
.Utils
.API2Request({
104 callback: function() {
105 // for easy breakpoint setting
107 failure: function(response
, opts
) {
108 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
110 success: function(response
, options
) {
111 var data
= response
.result
.data
;
112 addKeepReasons(data
, keepParams
);
113 view
.pruneStore
.setData(data
);
119 field
: { change
: 'reload' },
125 xtype
: 'pmxPruneKeepField',
127 fieldLabel
: gettext('keep-last'),
130 xtype
: 'pmxPruneKeepField',
132 fieldLabel
: gettext('keep-hourly'),
135 xtype
: 'pmxPruneKeepField',
137 fieldLabel
: gettext('keep-daily'),
140 xtype
: 'pmxPruneKeepField',
142 fieldLabel
: gettext('keep-weekly'),
145 xtype
: 'pmxPruneKeepField',
146 name
: 'keep-monthly',
147 fieldLabel
: gettext('keep-monthly'),
150 xtype
: 'pmxPruneKeepField',
152 fieldLabel
: gettext('keep-yearly'),
156 initComponent: function() {
159 me
.pruneStore
= Ext
.create('Ext.data.Store', {
160 model
: 'pve-prune-list',
161 sorters
: { property
: 'ctime', direction
: 'DESC' },
168 store
: me
.pruneStore
,
171 header
: gettext('Backup Time'),
174 renderer: function(value
, metaData
, record
) {
175 let text
= Ext
.Date
.format(value
, 'Y-m-d H:i:s');
176 if (record
.data
.mark
=== 'remove') {
177 return '<div style="text-decoration: line-through;">'+ text
+'</div>';
185 text
: 'Keep (reason)',
187 renderer: function(value
, metaData
, record
) {
188 if (record
.data
.mark
=== 'keep') {
189 return 'true (' + record
.data
.keepReason
+ ')';
190 } else if (record
.data
.mark
=== 'protected') {
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
,