# Nag notice ## manual steps - `cd /usr/share/javascript/proxmox-widget-toolkit` - `cp proxmoxlib.js proxmoxlib.js.bak` - `nano proxmoxlib.js` - search for "function(orig_cmd) {" and add "orig_cmd();" and "return;" just after it - `systemctl restart pveproxy.service` --- # Sensor data ## 1) Lets install lm-sensors to show us the information we need. Type the following in the proxmox shell apt-get install lm-sensors Next we can check if its working. To do this we can type `sensors` The main part we are interested in is: root@pve:~# sensors coretemp-isa-0000 Adapter: ISA adapter Package id 0: +23.0°C (high = +84.0°C, crit = +100.0°C) Core 0: +21.0°C (high = +84.0°C, crit = +100.0°C) Core 1: +21.0°C (high = +84.0°C, crit = +100.0°C) Core 2: +22.0°C (high = +84.0°C, crit = +100.0°C) Core 3: +19.0°C (high = +84.0°C, crit = +100.0°C) If you see this you are good to go! ## 2) Adding the output of sensors to information Here we will use `Nano` to edit some files. In your shell, type the following: nano /usr/share/perl5/PVE/API2/Nodes.pm Next, you can press **F6** to search for `my $dinfo` and press **Enter** The code should look like this: $res->{pveversion} = PVE::pvecfg::package() . "/" . PVE::pvecfg::version_text(); my $dinfo = df('/', 1); # output is bytes We are going to add the following line of code in between: `$res->{thermalstate} = \sensors\;` So the final result should look like this: $res->{pveversion} = PVE::pvecfg::package() . "/" . PVE::pvecfg::version_text(); $res->{thermalstate} = `sensors`; my $dinfo = df('/', 1); # output is bytes Now press **Ctrl+O** to save and **Ctrl+X** to exit. ## 3) Making space for the new information Next we will need to edit another file, So once again we will use `Nano` Type the following command into your shell: `nano /usr/share/pve-manager/js/pvemanagerlib.js` Once in press **F6** to search for my `widget.pveNodeStatus` and press **Enter** You will get a snippit of code that looks like this: Ext.define('PVE.node.StatusView', { extend: 'PVE.panel.StatusView', alias: 'widget.pveNodeStatus', height: 300, bodyPadding: '5 15 5 15', layout: { type: 'table', columns: 2, tableAttrs: { style: { width: '100%' } } }, Next change the `bodyPadding: '5 15 5 15',` to `bodyPadding: '20 15 20 15',` As well as `height: 300,` to `height: 360,` **Dont close the file this time!** ## 4) Final part to edit Ok so you know the drill by now press **F6** to search for `PVE Manager Version` and press **Enter** You will see a section of code like this: { itemId: 'version', colspan: 2, printBar: false, title: gettext('PVE Manager Version'), textField: 'pveversion', value: '' } Ok now we need to add some code after this part. The code is: { itemId: 'thermal', colspan: 2, printBar: false, title: gettext('CPU Thermal State'), textField: 'thermalstate', renderer:function(value){ const c0 = value.match(/Core 0.*?\+([\d\.]+)Â/)[1]; const c1 = value.match(/Core 1.*?\+([\d\.]+)Â/)[1]; const c2 = value.match(/Core 2.*?\+([\d\.]+)Â/)[1]; const c3 = value.match(/Core 3.*?\+([\d\.]+)Â/)[1]; return `Core 0: ${c0} ℃ | Core 1: ${c1} ℃ | Core 2: ${c2} ℃ | Core 3: ${c3} ℃` } } Therefore your final result should look something like this: { itemId: 'version', colspan: 2, printBar: false, title: gettext('PVE Manager Version'), textField: 'pveversion', value: '' }, { itemId: 'thermal', colspan: 2, printBar: false, title: gettext('CPU Thermal State'), textField: 'thermalstate', renderer:function(value){ const c0 = value.match(/Core 0.*?\+([\d\.]+)Â/)[1]; const c1 = value.match(/Core 1.*?\+([\d\.]+)Â/)[1]; const c2 = value.match(/Core 2.*?\+([\d\.]+)Â/)[1]; const c3 = value.match(/Core 3.*?\+([\d\.]+)Â/)[1]; return `Core 0: ${c0} ℃ | Core 1: ${c1} ℃ | Core 2: ${c2} ℃ | Core 3: ${c3} ℃` } } Now we can finally press **Ctrl+O** to save and **Ctrl+X** to exit. ## 5)Restart the summery page To do this you will have to type in the following command: `systemctl restart pveproxy`