diff --git a/freon@UshakovVasilii_Github.yahoo.com/extension.js b/freon@UshakovVasilii_Github.yahoo.com/extension.js index 821fba6..667bf0f 100644 --- a/freon@UshakovVasilii_Github.yahoo.com/extension.js +++ b/freon@UshakovVasilii_Github.yahoo.com/extension.js @@ -16,6 +16,7 @@ const AticonfigUtil = Me.imports.aticonfigUtil; const NvidiaUtil = Me.imports.nvidiaUtil; const HddtempUtil = Me.imports.hddtempUtil; const SensorsUtil = Me.imports.sensorsUtil; +const smartctlUtil = Me.imports.smartctlUtil; const BumblebeeNvidiaUtil = Me.imports.bumblebeeNvidiaUtil; const FreonItem = Me.imports.freonItem; @@ -197,6 +198,9 @@ var FreonMenuButton = new Lang.Class({ // this._updateDisplay(); we cannot change actor in background thread #74 })); break; + case 'smartctl': + this._utils.disks = new smartctlUtil.smartctlUtil(); + break; } }, diff --git a/freon@UshakovVasilii_Github.yahoo.com/prefs.js b/freon@UshakovVasilii_Github.yahoo.com/prefs.js index b11f817..70ec683 100644 --- a/freon@UshakovVasilii_Github.yahoo.com/prefs.js +++ b/freon@UshakovVasilii_Github.yahoo.com/prefs.js @@ -69,7 +69,7 @@ var FreonPrefsWidget = new GObject.Class({ help : _("Works if you have more than three voltage sensors")}); this._addComboBox({ - items : {none : 'None', hddtemp : 'Hddtemp', udisks2 : 'UDisks2'}, + items : {none : 'None', hddtemp : 'Hddtemp', udisks2 : 'UDisks2', smartctl : 'smartctl'}, key: 'drive-utility', y : i, x : 0, label: _('HDD/SSD Temperature Utility') }); diff --git a/freon@UshakovVasilii_Github.yahoo.com/smartctlUtil.js b/freon@UshakovVasilii_Github.yahoo.com/smartctlUtil.js new file mode 100644 index 0000000..351e108 --- /dev/null +++ b/freon@UshakovVasilii_Github.yahoo.com/smartctlUtil.js @@ -0,0 +1,52 @@ +const Lang = imports.lang; +const GLib = imports.gi.GLib; + +const Me = imports.misc.extensionUtils.getCurrentExtension(); +const CommandLineUtil = Me.imports.commandLineUtil; + +var smartctlUtil = new Lang.Class({ + Name: 'smartctlUtil', + Extends: CommandLineUtil.CommandLineUtil, + + _init: function() { + this.parent(); + let path = GLib.find_program_in_path('smartctl'); + this._argv = path ? [path, '-x', '/dev/nvme0'] : null; + }, + + get temp() { + if(!this._output) + return []; + + let smartctlOutput = []; + smartctlOutput = this._output; + + let sensors = []; + + let slabel="Temperature Sensor"; + for (let line of smartctlOutput) { + let matchModel = /Model Number:/.exec( line.toString() ); + if(matchModel){ + let sline=line.split(/\s+/); + slabel=sline.slice(2).join(" "); + } + //let line = "Temperature Sensor 1: 37 Celsius" + let match = /Temperature Sensor \d: *\w\d Celsius/.exec( line.toString() ); + //let match = /Use smartctl.*/.exec( line.toString() ); + //let match = /.*\[Temperature Sensor \d: .*\d Celcius.*/.exec(line.toString()); + if(match){ + let sline=line.split(/\s+/); + let sensor = { label: slabel+" "+sline[2][0], temp: parseFloat(sline[3]) }; + sensors.push(sensor); + } + } + return sensors; + + }, + + get available(){ + return true; + }, + +}); +