]> git.proxmox.com Git - pmg-gui.git/blob - js/dashboard/NodeInfo.js
bdf8f85e56c16ca9ac399fb6f2114eae73d9d754
[pmg-gui.git] / js / dashboard / NodeInfo.js
1 Ext.define('PMG.NodeInfoPanel', {
2 extend: 'Proxmox.panel.StatusView',
3 alias: 'widget.pmgNodeInfoPanel',
4
5 layout: {
6 type: 'table',
7 columns: 2,
8 tableAttrs: {
9 style: {
10 width: '100%',
11 },
12 },
13 },
14
15 defaults: {
16 xtype: 'pmxInfoWidget',
17 padding: '0 10 5 10',
18 },
19
20 viewModel: {
21 data: {
22 subscriptionActive: '',
23 noSubscriptionRepo: '',
24 enterpriseRepo: '',
25 testRepo: '',
26 },
27 formulas: {
28 repoStatus: function(get) {
29 if (get('subscriptionActive') === '' || get('enterpriseRepo') === '') {
30 return '';
31 }
32
33 if (get('noSubscriptionRepo') || get('testRepo')) {
34 return 'non-production';
35 } else if (get('subscriptionActive') && get('enterpriseRepo')) {
36 return 'ok';
37 } else if (!get('subscriptionActive') && get('enterpriseRepo')) {
38 return 'no-sub';
39 } else if (!get('enterpriseRepo') || !get('noSubscriptionRepo') || !get('testRepo')) {
40 return 'no-repo';
41 }
42 return 'unknown';
43 },
44 repoStatusMessage: function(get) {
45 const status = get('repoStatus');
46 let repoLink = ` <a data-qtip="${gettext("Open Repositories Panel")}"
47 href="#pmgServerAdministration:aptrepositories">
48 <i class="fa black fa-chevron-right txt-shadow-hover"></i>
49 </a>`;
50 return Proxmox.Utils.formatNodeRepoStatus(status, 'Proxmox Mail Gateway') + repoLink;
51 },
52 },
53 },
54
55 items: [
56 {
57 itemId: 'nodecpu',
58 iconCls: 'fa fa-fw pmx-itype-icon-processor pmx-icon',
59 title: gettext('CPU usage'),
60 valueField: 'cpu',
61 maxField: 'cpuinfo',
62 renderer: Proxmox.Utils.render_node_cpu_usage,
63 },
64 {
65 itemId: 'wait',
66 iconCls: 'pmx-icon-size fa fa-fw fa-clock-o',
67 title: gettext('IO delay'),
68 valueField: 'wait',
69 },
70 {
71 xtype: 'box',
72 colspan: 2,
73 padding: '0 0 20 0',
74 },
75 {
76 iconCls: 'fa fa-fw pmx-itype-icon-memory pmx-icon',
77 itemId: 'memory',
78 title: gettext('RAM usage'),
79 valueField: 'memory',
80 maxField: 'memory',
81 renderer: Proxmox.Utils.render_node_size_usage,
82 },
83 {
84 itemId: 'load',
85 iconCls: 'pmx-icon-size fa fa-fw fa-tasks',
86 title: gettext('Load average'),
87 printBar: false,
88 textField: 'loadavg',
89 },
90 {
91 iconCls: 'pmx-icon-size fa fa-fw fa-hdd-o',
92 itemId: 'rootfs',
93 title: gettext('HD space') + ' (root)',
94 valueField: 'rootfs',
95 maxField: 'rootfs',
96 renderer: Proxmox.Utils.render_node_size_usage,
97 },
98 {
99 iconCls: 'pmx-icon-size fa fa-fw fa-refresh',
100 itemId: 'swap',
101 printSize: true,
102 title: gettext('SWAP usage'),
103 valueField: 'swap',
104 maxField: 'swap',
105 renderer: Proxmox.Utils.render_node_size_usage,
106 },
107 {
108 xtype: 'box',
109 colspan: 2,
110 padding: '0 0 20 0',
111 },
112 {
113 itemId: 'cpus',
114 colspan: 2,
115 printBar: false,
116 title: gettext('CPU(s)'),
117 textField: 'cpuinfo',
118 renderer: Proxmox.Utils.render_cpu_model,
119 value: '',
120 },
121 {
122 itemId: 'kversion',
123 colspan: 2,
124 title: gettext('Kernel Version'),
125 printBar: false,
126 textField: 'kversion',
127 value: '',
128 },
129 {
130 itemId: 'repositoryStatus',
131 colspan: 2,
132 printBar: false,
133 title: gettext('Repository Status'),
134 setValue: function(value) { // for binding below
135 this.updateValue(value);
136 },
137 bind: {
138 value: '{repoStatusMessage}',
139 },
140 },
141 ],
142
143 updateTitle: function() {
144 var me = this;
145 var uptime = Proxmox.Utils.render_uptime(me.getRecordValue('uptime'));
146 me.setTitle(Proxmox.NodeName + ' (' + gettext('Uptime') + ': ' + uptime + ')');
147 },
148
149 setRepositoryInfo: function(standardRepos) {
150 let me = this;
151 let vm = me.getViewModel();
152
153 for (const standardRepo of standardRepos) {
154 const handle = standardRepo.handle;
155 const status = standardRepo.status || 0;
156
157 if (handle === "enterprise") {
158 vm.set('enterpriseRepo', status);
159 } else if (handle === "no-subscription") {
160 vm.set('noSubscriptionRepo', status);
161 } else if (handle === "test") {
162 vm.set('testRepo', status);
163 }
164 }
165 },
166
167 setSubscriptionStatus: function(status) {
168 let me = this;
169 let vm = me.getViewModel();
170
171 vm.set('subscriptionActive', status);
172 },
173
174 initComponent: function() {
175 let me = this;
176
177 me.rstore = Ext.create('Proxmox.data.ObjectStore', {
178 interval: 3000,
179 url: '/api2/json/nodes/localhost/status',
180 autoStart: true,
181 });
182
183 me.callParent();
184
185 me.on('destroy', function() { me.rstore.stopUpdate(); });
186 },
187 });