Navigation

    Netgate Discussion Forum
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search

    Dashboard Widget for harddrive SMART status

    webGUI
    3
    5
    4302
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mkirbst last edited by

      hey,

      i've put togehter a dashboard widget that shows the SMART status of the drives installed in the system. i hacked it together mainly from the code of the wake on lan widget and it looks like it work for me at the moment. but i think its a good idea if some people look over the code :)

      
      require_once("guiconfig.inc");
      require_once("pfsense-utils.inc");
      require_once("functions.inc");
      $devs = array();
      ?>
      
      		echo '';
      		echo '';
      		echo '';
      		?>
      
      // Get all AD* and DA* (IDE and SCSI) devices currently installed and st$
      exec("ls /dev | grep '^[ad][da][0-9]\{1,2\}$'", $devs);
      
      if(count($devs) > 0)  {
      	foreach($devs as $dev)  {
      
      		$dev_state =  exec("smartctl -a /dev/$dev | grep result: | awk '{print $6}'");
      		$dev_ident =  exec("diskinfo -v /dev/$dev | grep ident | awk '{print $1}'");
      		##erste Spalte: Drives ausgeben
      		echo '' . "\n";
      
      		##zweite Spalte 
      		echo '' . "\n";
      
      		##dritte Spalte: smartstatus ausgeben
      		echo '' . "\n"; #tabellenspalte
      
      	}
      }
      ?>
      
      		  **<center>' . gettext("Drive") . '</center>**  |  **<center>' . gettext("Ident") . '</center>**  |  **<center>' . gettext("SMART Status") . '</center>**  |			
      | ';
      		echo '/dev/'. $dev ;
      		echo ' | 
      
      <center>' . "\n";
      		echo $dev_ident ;
      		echo '</center>
      
       | '; #tabellenspalte
      
      		if($dev_state == "PASSED") 
      			echo "$dev_state
      "; ##gruener Hintergrund bei PASSED
      		else
      			echo "$dev_state
      "; ##roter Hintergrund sonst
      		echo ' |	
      
      <center>[SMART Status](diag_smart.php)</center>
      
      

      If you want to use the widget, create a new file with the editor of your choice /usr/local/www/widgets/widgets/smart.widget.php and paste the code above in. But again, its a quick and dirty piece of code, use at your own risk!

      Greetz, marcel :)

      1 Reply Last reply Reply Quote 0
      • jimp
        jimp Rebel Alliance Developer Netgate last edited by

        Added, thanks!

        https://github.com/bsdperimeter/pfsense/commit/2f0a49e922e282a1abc641ec9d489f2678e069be

        Remember: Upvote with the 👍 button for any user/post you find to be helpful, informative, or deserving of recognition!

        Need help fast? Netgate Global Support!

        Do not Chat/PM for help!

        1 Reply Last reply Reply Quote 0
        • M
          mkirbst last edited by

          i have tried to clean up the code, minor changes are:

          • (i hope) code is now more easy to read (but remains horrible :) ) if somebody want to modify it to his needs
          • copyright added (i hope its ok in this manner ?)
          • in the 3. column the SMART state is alligned centered now
          • the code of the widget consists now of exact 42 lines :)

          @ jimp: thank you for commiting to git. :)

          
          /* License: same as pfSense. based on code from wake_on_lan.widget.php and others. use at your own risk ! */
          
          require_once("guiconfig.inc");
          require_once("pfsense-utils.inc");
          require_once("functions.inc");
          ?>
          
          		echo '';
          		echo '';
          		echo '';
          		?>
          
          $devs = array();
          ## Get all AD* and DA* (IDE and SCSI) devices currently installed and st$
          exec("ls /dev | grep '^[ad][da][0-9]\{1,2\}$'", $devs); ## leant from orginal SMART status screen 
          
          if(count($devs) > 0)  {
          	foreach($devs as $dev)  {	## for each found drive do
          		$dev_ident = exec("diskinfo -v /dev/$dev | grep ident   | awk '{print $1}'"); ## get identifier from drive
          		$dev_state = exec("smartctl -a /dev/$dev | grep result: | awk '{print $6}'"); ## get SMART state from drive
          
          		echo '' . "\n"; 		## 1\. cell in row: device 
          		echo '' . "\n"; 	## 2\. cell in row: identifier
          
          		## 3\. cell in row: SMART state 
          		echo '' . "\n"; 
          	}
          }
          ?>
          
          		  **<center>' . gettext("Drive") . '</center>**  |  **<center>' . gettext("Ident") . '</center>**  |  **<center>' . gettext("SMART Status") . '</center>**  |			
          | '    . '/dev/'. $dev . ' | 
          
          <center>' . "\n" . $dev_ident . '</center>
          
           |		 
          
          <center>';
          		if($dev_state == "PASSED") 	## if SMART state is "PASSED", draw background green
          			echo "$dev_state
          ";
          		else 						## at any other SMART state, draw background red
          			echo "$dev_state
          ";
          		echo '</center>
          
           |
          
          <center>[SMART Status](diag_smart.php)</center>
          
          

          greets, Marcel

          1 Reply Last reply Reply Quote 0
          • ptt
            ptt Rebel Alliance last edited by

            Thanks Marcel
            I just made a couple of changes, to match the  pfSense dashboard colors scheme:

            
            "PASSED", draw background lightgreen --> 90EE90
            
            any other SMART state, draw background lightcoral --> F08080
            
            

            If anyone is interested, can download the smart.widget.php (ready to use) from: http://ptt.4mg.com/pfSense/

            EDIT: File Reuploaded to include the Changes made by Jimp

            1 Reply Last reply Reply Quote 0
            • jimp
              jimp Rebel Alliance Developer Netgate last edited by

              Made some further optimizations and fixed the license up:

              https://github.com/bsdperimeter/pfsense/commit/c91e242e607c6ff2376350108255dbadcdb039e0

              Remember: Upvote with the 👍 button for any user/post you find to be helpful, informative, or deserving of recognition!

              Need help fast? Netgate Global Support!

              Do not Chat/PM for help!

              1 Reply Last reply Reply Quote 0
              • First post
                Last post