⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitor.php

📁 SugarCRM5.1 开源PHP客户关系管理系统
💻 PHP
字号:
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
/*********************************************************************************
 * SugarCRM is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004 - 2007 SugarCRM Inc. *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more * details. *  * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. *  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. *  * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. *  * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * SugarCRM" logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * "Powered by SugarCRM". ********************************************************************************/

require_once('modules/Trackers/Metric.php');
require_once('modules/Trackers/Trackable.php');

class Monitor implements Trackable {

    var $metricsFile;
    var $name;
    protected static $metrics;
    protected static $cachedStores;
    var $stores;
    var $monitor_id;
    var $table_name;
    
    /**
     * Monitor constructor
     */
    function Monitor($name='', $monitorId='', $metadata='', $store='') {

    	if(empty($metadata) || !file_exists($metadata)) {
    	   $GLOBALS['log']->error($GLOBALS['app_strings']['ERR_MONITOR_FILE_MISSING'] . "($metadata)");
    	   throw new Exception($GLOBALS['app_strings']['ERR_MONITOR_FILE_MISSING'] . "($metadata)");
    	}

    	$this->name = $name;
    	$this->metricsFile = $metadata;
    	    	
    	require($this->metricsFile);
    	$fields = $dictionary[$this->name]['fields'];
    	$this->table_name = !empty($dictionary[$this->name]['table']) ? $dictionary[$this->name]['table'] : $this->name;
    	$this->metrics = array();
    	foreach($fields as $field) {
    	   
    	   //We need to skip auto_increment fields; they are not real metrics
    	   //since they are generated by the database.
    	   if(isset($field['auto_increment'])) {
    	   	  continue;
    	   }	
    		
    	   $type = isset($field['dbType']) ? $field['dbType'] : $field['type'];
    	   $name = $field['name'];
    	   $this->metrics[$name] = new Metric($type, $name);
    	}

    	$this->monitor_id = $monitorId;    	
    	$this->stores = $store;
    }
    
    /**
     * setValue
     * Sets the value defined in the monitor's metrics for the given name
     * @param $name String value of metric name
     * @param $value Mixed value 
     * @throws Exception Thrown if metric name is not configured for monitor instance
     */
    function setValue($name, $value) {
        if(!isset($this->metrics[$name])) {
          $GLOBALS['log']->error($GLOBALS['app_strings']['ERR_UNDEFINED_METRIC'] . "($name)");
          throw new Exception($GLOBALS['app_strings']['ERR_UNDEFINED_METRIC'] . "($name)");
        } else if($this->metrics[$name]->isMutable()) {
          $this->$name = is_object($value) ? get_class($value) : $value;
        }
    }
    
    /**
     * getStores
     * Returns Array of store names defined for monitor instance
     * @return Array of store names defined for monitor instance
     */
    function getStores() {
        return $this->stores;	
    }
    
    /**
     * getMetrics
     * Returns Array of metric instances defined for monitor instance
     * @return Array of metric instances defined for monitor instance
     */
    function getMetrics() {
    	return $this->metrics;
    }
    
    /**
     * save
     * This method retrieves the Store instances associated with monitor and calls
     * the flush method passing with the montior ($this) instance.
     * 
     */
    public function save() {
    	foreach($this->stores as $s) {
    		$store = $this->getStore($s);
    		$store->flush($this);
    	}
    	$this->clear();    	
    }


	/**
	 * getStore
	 * This method checks if the Store implementation has already been instantiated and
	 * will return the one stored; otherwise it will create the Store implementation and
	 * save it to the Array of Stores.
	 * @param $store The name of the store as defined in the 'modules/Trackers/config.php' settings
	 * @return An instance of a Store implementation
	 * @throws Exception Thrown if $store class cannot be loaded
	 */
	protected function getStore($store) {
		
		if(isset($this->cachedStores[$store])) {
		   return $this->cachedStores[$store];	
		}

        if(!file_exists("modules/Trackers/store/$store.php")) {
           $GLOBALS['log']->error($GLOBALS['app_strings']['ERR_STORE_FILE_MISSING'] . "($store)");
           throw new Exception($GLOBALS['app_strings']['ERR_STORE_FILE_MISSING'] . "($store)");
        }
        
		require_once("modules/Trackers/store/$store.php");
		$s = new $store();
		$this->cachedStores[$store] = $s;
		return $s;
	}

    
	/**
	 * clear
	 * This function clears the metrics data in the monitor instance
	 */
	protected function clear() {
	    $metrics = $this->getMetrics();
	    foreach($metrics as $name=>$metric) {
	    	    if($metric->isMutable()) {
                   $this->$name = '';
	    	    }
	    }
	}
}

?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -