<?php defined('SYSPATH') or die('No direct access allowed.');

/**
 * This class provides information on TSM Nodes.
 *
 * @package    PTA
 * @subpackage Nodes
 * @category   Controllers
 * @author     Deon George
 * @copyright  (c) 2010 phpTSMadmin Development Team
 * @license    http://phptsmadmin.sf.net/license.html
 */
class Controller_Node extends Controller_TemplateDefault_View {
	protected $index_title = 'TSM Nodes';
	protected $detail_title = 'Information on Node';
	protected $orm = 'NODE';

	/**
	 * Gather the BA Client Session data for graphing
	 */
	public function action_ajaxjson_basessions() {
		$id = $this->request->param('id');
		$c = (isset($_REQUEST['c'])) ? $_REQUEST['c'] : null;
		$s = (isset($_REQUEST['s'])) ? $_REQUEST['s'] : null;
		$t = (isset($_REQUEST['t'])) ? $_REQUEST['t'] : null;

		$no = ORM::factory('NODE',$id);

		if (! $id OR ! $no->loaded() OR ! $t OR ! $c)
			return '';

		$google = GoogleChart::factory($c)
			->logy(TRUE)
			->title(sprintf('%s Activity',$t).($s ? sprintf(' for Schedule %s',$s) : ' outside of TSM schedules'));

		foreach ($no->act_bybtype($t) as $aso) {
			if ($aso->SCHEDULE_NAME != $s)
				continue;

			$result = array();

			foreach ($aso->actlog() as $alo)
				$result = array_merge($result,$alo->msgtrim());

			if (! $result)
				continue;

			$yr = $yl = array();

			// Process our YR columns
			foreach (array(
				'OBJECT_TOTAL',
				'OBJECT_BACKUP',
				'OBJECT_DELETED',
				'OBJECT_UDPATE',
				'OBJECT_FAILED',
				'OBJECT_REBOUND',
				'OBJECT_EXPIRED',
				'OJBECT_DEDUPED',
				) as $c)
				if (isset($result[$c]) AND $result[$c])
					$yr[$c] = $result[$c];

			// Process our YL columns
			foreach (array(
				'BYTES_INSPECT',
				'BYTES_PROCESS',
				'BYTES_TRANSFER',
				'BYTES_DEDUPE_BEFORE',
				'BYTES_DEDUPE_AFTER',
				) as $c)
				if (isset($result[$c]) AND $result[$c])
					$yl[$c] = $result[$c];

			// Process our YR columns
			$google->pdata($aso->display('START_TIME'),array('yr'=>$yr,'yl'=>$yl));
		}

		$this->auto_render = FALSE;
		$this->response->headers('Content-Type','application/json');
		$this->response->body($google->json());
	}

	/**
	 * Gather the TSM Server Schedule Activity for Graphing
	 */
	public function action_ajaxjson_schedules() {
		$id = $this->request->param('id');
		$c = (isset($_REQUEST['c'])) ? $_REQUEST['c'] : null;
		$s = (isset($_REQUEST['s'])) ? $_REQUEST['s'] : null;
		$t = (isset($_REQUEST['t'])) ? $_REQUEST['t'] : null;

		$no = ORM::factory('NODE',$id);

		if (! $id OR ! $no->loaded() OR ! $t OR ! $c)
			return '';

		$google = GoogleChart::factory($c)
			->logy(TRUE)
			->title(sprintf('%s Activity',$t).($s ? sprintf(' for Schedule %s',$s) : ' outside of TSM schedules'));

		foreach ($no->act_bybtype($t) as $aso) {
			if ($aso->SCHEDULE_NAME != $s)
				continue;

			$google->pdata($aso->display('START_TIME'),array(
				'yr'=>array(
					'BYTES'=>$aso->BYTES,
				),
				'yl'=>array(
					'AFFECTED'=>$aso->AFFECTED,
					'EXAMINED'=>$aso->EXAMINED,
					'FAILED'=>$aso->FAILED,
				),
			));
		}

		$this->auto_render = FALSE;
		$this->response->headers('Content-Type','application/json');
		$this->response->body($google->json());
	}

	/**
	 * Return details of a specific node SESSION in the ACTIVITY LOG
	 * @param $id NODE,SESSION_ID,SESSION_START_DATE
	 */
	public function action_session() {
		$id = $this->request->param('id');

		if (substr_count($id,',') != 2) {
			SystemMessage::add(array(
				'title'=>_('Invalid ID'),
				'body'=>sprintf(_('The session ID %s is invalid'),$id),
				'type'=>'error',
			));

			return;
		}

		list($nid,$sid,$start) = explode(',',$id,3);

		$no = ORM::factory('NODE',$nid);
		if (! $no->loaded()) {
			SystemMessage::add(array(
				'title'=>_('Invalid Node'),
				'body'=>sprintf(_('The Node ID %s is invalid'),$nid),
				'type'=>'error',
			));

			return;
		}

		Block::add(array(
			'title'=>sprintf(_('Session %s Detail for Node %s'),$sid,$no->display('NODE_NAME')),
			'body'=>View::factory(sprintf('%s/clientsession',strtolower($this->request->controller())))->set('o',$no->actlog_session($sid,$start)),
		));
	}
}
?>
