]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/node/Subscription.js
ui: subscription panel: code reduction and modernization
[pve-manager.git] / www / manager6 / node / Subscription.js
CommitLineData
0bef095a 1Ext.define('PVE.node.SubscriptionKeyEdit', {
9fccc702 2 extend: 'Proxmox.window.Edit',
67dc8182 3
f2833f5f
DC
4 title: gettext('Upload Subscription Key'),
5 width: 300,
67dc8182 6
f2833f5f
DC
7 items: {
8 xtype: 'textfield',
9 name: 'key',
10 value: '',
dc54cdf8 11 fieldLabel: gettext('Subscription Key'),
f2833f5f 12 },
67dc8182 13
dc54cdf8 14 initComponent: function() {
0bef095a
DM
15 var me = this;
16
0bef095a
DM
17 me.callParent();
18
19 me.load();
dc54cdf8 20 },
0bef095a
DM
21});
22
23Ext.define('PVE.node.Subscription', {
8ea2c870 24 extend: 'Proxmox.grid.ObjectGrid',
0bef095a
DM
25
26 alias: ['widget.pveNodeSubscription'],
27
ba93a9c6
DC
28 onlineHelp: 'getting_help',
29
e83795f5 30 viewConfig: {
dc54cdf8 31 enableTextSelection: true,
e83795f5 32 },
0bef095a
DM
33
34 showReport: function() {
35 var me = this;
0bef095a 36
a764c5f7 37 var getReportFileName = function() {
0bef095a 38 var now = Ext.Date.format(new Date(), 'D-d-F-Y-G-i');
dc54cdf8 39 return `${me.nodename}-pve-report-${now}.txt`;
a764c5f7 40 };
0bef095a
DM
41
42 var view = Ext.createWidget('component', {
43 itemId: 'system-report-view',
f2833f5f 44 scrollable: true,
0bef095a 45 style: {
0bef095a
DM
46 'white-space': 'pre',
47 'font-family': 'monospace',
dc54cdf8
TL
48 padding: '5px',
49 },
0bef095a
DM
50 });
51
52 var reportWindow = Ext.create('Ext.window.Window', {
53 title: gettext('System Report'),
54 width: 1024,
55 height: 600,
56 layout: 'fit',
57 modal: true,
58 buttons: [
bc12fba5
TL
59 '->',
60 {
61 text: gettext('Download'),
62 handler: function() {
63 var fileContent = Ext.String.htmlDecode(reportWindow.getComponent('system-report-view').html);
64 var fileName = getReportFileName();
65
66 // Internet Explorer
67 if (window.navigator.msSaveOrOpenBlob) {
68 navigator.msSaveOrOpenBlob(new Blob([fileContent]), fileName);
69 } else {
70 var element = document.createElement('a');
dc54cdf8
TL
71 element.setAttribute('href', 'data:text/plain;charset=utf-8,' +
72 encodeURIComponent(fileContent));
bc12fba5
TL
73 element.setAttribute('download', fileName);
74 element.style.display = 'none';
75 document.body.appendChild(element);
76 element.click();
77 document.body.removeChild(element);
22f2f9d6 78 }
dc54cdf8
TL
79 },
80 },
bc12fba5 81 ],
dc54cdf8 82 items: view,
0bef095a
DM
83 });
84
e7ade592 85 Proxmox.Utils.API2Request({
0bef095a
DM
86 url: '/api2/extjs/nodes/' + me.nodename + '/report',
87 method: 'GET',
88 waitMsgTarget: me,
89 failure: function(response) {
90 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
91 },
92 success: function(response) {
93 var report = Ext.htmlEncode(response.result.data);
94 reportWindow.show();
95 view.update(report);
dc54cdf8 96 },
0bef095a
DM
97 });
98 },
99
dc54cdf8 100 initComponent: function() {
0bef095a
DM
101 var me = this;
102
103 if (!me.nodename) {
104 throw "no node name specified";
105 }
106
67dc8182 107 let rows = {
0bef095a 108 productname: {
dc54cdf8 109 header: gettext('Type'),
0bef095a
DM
110 },
111 key: {
dc54cdf8 112 header: gettext('Subscription Key'),
0bef095a
DM
113 },
114 status: {
115 header: gettext('Status'),
67dc8182
TL
116 renderer: v => {
117 let message = me.getObjectValue('message');
118 return message ? `${v}: ${message}` : v;
119 },
0bef095a
DM
120 },
121 message: {
dc54cdf8 122 visible: false,
0bef095a
DM
123 },
124 serverid: {
dc54cdf8 125 header: gettext('Server ID'),
0bef095a
DM
126 },
127 sockets: {
dc54cdf8 128 header: gettext('Sockets'),
0bef095a
DM
129 },
130 checktime: {
131 header: gettext('Last checked'),
dc54cdf8 132 renderer: Proxmox.Utils.render_timestamp,
0bef095a
DM
133 },
134 nextduedate: {
dc54cdf8
TL
135 header: gettext('Next due date'),
136 },
dc17baee
FG
137 signature: {
138 header: gettext('Signed/Offline'),
67dc8182 139 renderer: v => v ? gettext('Yes') : gettext('No'),
dc17baee 140 },
0bef095a
DM
141 };
142
f2833f5f 143 Ext.apply(me, {
67dc8182 144 url: `/api2/json/nodes/${me.nodename}/subscription`,
0bef095a 145 cwidth1: 170,
dc54cdf8 146 tbar: [
0bef095a
DM
147 {
148 text: gettext('Upload Subscription Key'),
67dc8182
TL
149 handler: () => Ext.create('PVE.node.SubscriptionKeyEdit', {
150 autoShow: true,
151 url: `/api2/extjs/nodes/${me.nodename}/subscription`,
152 listeners: {
153 destroy: () => me.rstore.load(),
154 },
155 }),
0bef095a
DM
156 },
157 {
158 text: gettext('Check'),
67dc8182
TL
159 handler: () => Proxmox.Utils.API2Request({
160 params: { force: 1 },
161 url: `/nodes/${me.nodename}/subscription`,
162 method: 'POST',
163 waitMsgTarget: me,
164 failure: response => Ext.Msg.alert(gettext('Error'), response.htmlStatus),
165 callback: () => me.rstore.load(),
166 }),
0bef095a 167 },
b8af8f2d
TL
168 {
169 text: gettext('Remove Subscription'),
170 xtype: 'proxmoxStdRemoveButton',
4de2b2e7 171 confirmMsg: gettext('Are you sure you want to remove the subscription key?'),
67dc8182 172 baseurl: `/nodes/${me.nodename}/subscription`,
b8af8f2d
TL
173 dangerous: true,
174 selModel: false,
67dc8182 175 callback: () => me.rstore.load(),
b8af8f2d
TL
176 },
177 '-',
0bef095a
DM
178 {
179 text: gettext('System Report'),
180 handler: function() {
dc54cdf8
TL
181 Proxmox.Utils.checked_command(function() { me.showReport(); });
182 },
183 },
0bef095a
DM
184 ],
185 rows: rows,
186 listeners: {
67dc8182 187 activate: () => me.rstore.load(),
dc54cdf8 188 },
0bef095a
DM
189 });
190
191 me.callParent();
dc54cdf8 192 },
0bef095a 193});