<?php

/**
 * Observium
 *
 *   This file is part of Observium.
 *
 * @package    observium
 * @subpackage discovery
 * @copyright  (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited
 *
 */

// This could do with a rewrite.

# Get major version number of running firmware
$fw_major_version = Null;
preg_match("/^[0-9]{0,3}\.[0-9]/", $device['version'], $fw_major_version); //adjusted to cover version 10 and upper
$fw_major_version = $fw_major_version[0];

# Get Hardware model
$hw_model = Null;
$hw_var = explode (" ", $device['hardware']);
$hw_model = $hw_var[3];

# Temperature info only known to be present in firmware 5.0 or higher //adjusted as version 5.0 can read temperatures too
if ($fw_major_version >= 5.0)
{
  $temps = snmp_walk($device, "1.3.6.1.4.1.45.1.6.3.7.1.1.5.5", "-Osqn");
  $scale = 0.5;
  foreach (explode("\n", $temps) as $i => $t)
  {
    $t = explode(" ",$t);
    $oid = $t[0];
    $value = trim($t[1]);
    discover_sensor($valid['sensor'], 'temperature', $device, $oid, zeropad($i+1), 'avaya-ers', "Unit " . ($i+1) . " temperature", $scale, $value);
  }
}

# Power Supply and FAN Units (Avaya models VSP7024, ERS5000, ERS4800, ERS4900, ERS3500)

  $oids = snmpwalk_cache_multi_oid($device, 's5ChasComEntry', array(), 'S5-CHASSIS-MIB');
  foreach ($oids as $index => $entry)
  {
  	switch ($entry['s5ChasComGrpIndx'])
  	{
        	case 4: // 4 = PowerSupply
			$v = explode(".",$index);       //index exp. 4.10.0
			$unitbase = str_split($v[1]);   //isolate the 2nd number "10"
                        $unit = $unitbase[0];           //isolate the 1st number as unit number "1". The 2nd number represents 0 for primary and 1 for redundant
			if(preg_match('/^35/', $hw_model) ? true : false){   // psu description adjustment for models ERS3500 (this comes as "Unavailable" from the device description)
			switch($unitbase[1])
                                {
                                        case 0:
                                                $descr_name = "Primary Power Supply";
                                                break;
                                        case 1:
                                                $descr_name = "Redundant Power Supply";
                                                break;
                                        default:
                                                $descr_name = rewrite_entity_name($entry['s5ChasComDescr']);
                                }
			}elseif(preg_match('/AC-DC/', $entry['s5ChasComDescr']) ? true : false){   // psu description adjustment for models VSP7000 and ERS4900
				switch($unitbase[1])
				{
					case 0:
						$descr_name = "Primary Power Supply";
						break;
					case 1:
						$descr_name = "Redundant Power Supply";
						break;
					default:
						$descr_name = rewrite_entity_name($entry['s5ChasComDescr']);
				}
			}else{
	                	$descr_name = rewrite_entity_name($entry['s5ChasComDescr']);
			}
        	        $descr = "Unit $unit - $descr_name";
                	$oid = ".1.3.6.1.4.1.45.1.6.3.3.1.1.10.$index";
                	$value = $entry['s5ChasComOperState'];
                	discover_sensor($valid['sensor'], 'state', $device, $oid, 's5ChasComDescr.'.$index, 'S5OperState', $descr, NULL, $value, array('entPhysicalClass' => 'powersupply'));
			break;

		case 5: // 5 = Temperature sensor
			$v = explode(".",$index);
			$unitbase = str_split($v[1]);
			$unit = $unitbase[0];
                       	$descr_name = rewrite_entity_name($entry['s5ChasComDescr']);
       	                $descr = "Unit $unit - $descr_name";
               	        $oid = ".1.3.6.1.4.1.45.1.6.3.3.1.1.10.$index";
               		$value = $entry['s5ChasComOperState'];
                        discover_sensor($valid['sensor'], 'state', $device, $oid, 's5ChasComDescr.'.$index, 'S5OperState', $descr, NULL, $value, array('entPhysicalClass' => 'temperature'));
                        break;

		case 6: // 6 = FAN sensor
			$v = explode(".",$index);
                        $unitbase = str_split($v[1]);
                        $unit = $unitbase[0];
                        $descr_name = rewrite_entity_name($entry['s5ChasComDescr']);
                        $descr = "Unit $unit - $descr_name";
                        $oid = ".1.3.6.1.4.1.45.1.6.3.3.1.1.10.$index";
                        $value = $entry['s5ChasComOperState'];
                        discover_sensor($valid['sensor'], 'state', $device, $oid, 's5ChasComDescr.'.$index, 'S5OperState', $descr, NULL, $value, array('entPhysicalClass' => 'fan'));
                        break;
        }
  }

// EOF
