Example #1
0
function get_host_list_select($pdo, $mem, $service_id = false)
{
    $hosts = get_host_list($pdo);
    if (!$hosts) {
        return false;
    }
    foreach ($hosts as $k => $v) {
        $sql = "SELECT sum(use_memory) as use_memory FROM instance WHERE host_id='{$v['host_id']}' AND instance_status=2";
        $use_mem = pdo_fetch_all($pdo, $sql);
        $hosts[$k]['use_mem'] = $use_mem ? $use_mem[0]['use_memory'] : 0;
        $hosts[$k]['use_mem'] = round($hosts[$k]['use_mem'], 2);
        $hosts[$k]['free_mem'] = round($hosts[$k]['host_memory'] - $hosts[$k]['use_mem'], 2);
        $hosts[$k]['host_mem'] = round($hosts[$k]['host_memory'], 2);
        $hosts[$k]['sort'] = 0;
        if ($mem > $hosts[$k]['free_mem']) {
            $hosts[$k]['msg'] = '错误:此host空间不足!';
            $hosts[$k]['sort'] = 9;
            continue;
        }
        if ($service_id) {
            $mapping = pdo_get_mapping_info_by_service($pdo, $service_id);
            $host_ids = array();
            foreach ($mapping as $m) {
                $host_ids[] = $m['host_id'];
            }
            if (in_array($v['host_id'], $host_ids)) {
                $hosts[$k]['msg'] = '提醒:同一个service的instance建议分配到不同的host!';
                $hosts[$k]['sort'] = 5;
            }
        }
    }
    /*根据free_mem和sort排序*/
    foreach ($hosts as $k => $v) {
        $a[] = $v['free_mem'];
        $b[] = $v['sort'];
    }
    array_multisort($a, SORT_DESC, $b, SORT_ASC, $hosts);
    return $hosts;
}
Example #2
0
 public function start($charts)
 {
     /*循环每次一张图*/
     foreach ($charts as $chart) {
         $this->chart = $chart;
         $this->i = 0;
         $this->graph = array();
         $this->chartData = array();
         /*参数检查*/
         if (!isset($this->cfg_alert[$chart['report_id']])) {
             continue;
         }
         $this->alert = $this->cfg_alert[$chart['report_id']];
         /*当类型为global时,target_id置1,
          * 当类型为instance时,target_id替换成instance_id,*/
         switch ($this->alert['target_type']) {
             case 'global':
                 $chart['target_id'] = 1;
                 break;
             case 'instance':
                 /*某个service下的所有readable/wirtable的instance情况*/
                 if (empty($chart['target_id'])) {
                     continue;
                 }
                 $service_id = $chart['target_id'];
                 $chart['target_id'] = array();
                 foreach ($service_id as $target) {
                     $instances = pdo_get_mapping_info_by_service($this->pdo, $target);
                     if (!empty($instances)) {
                         foreach ($instances as $i) {
                             array_push($chart['target_id'], $i['instance_id']);
                         }
                     }
                 }
                 break;
             case 'host-instance':
                 /*某个host上的所有instance的情况*/
                 if (empty($chart['target_id'])) {
                     continue;
                 }
                 $host_id = $chart['target_id'];
                 $chart['target_id'] = array();
                 foreach ($host_id as $target) {
                     $instances = get_instance_list_complex($this->pdo, array('host_id' => $target));
                     /*某host上所有的instance*/
                     if (!empty($instances)) {
                         foreach ($instances as $i) {
                             array_push($chart['target_id'], $i['instance_id']);
                         }
                     }
                 }
         }
         /**/
         if (empty($chart['target_id'])) {
             continue;
         }
         if (is_array($chart['target_id'])) {
             /*当target_id为数组时*/
             foreach ($chart['target_id'] as $target_id) {
                 $this->draw($target_id);
             }
         } else {
             /*当target_id不为数组时*/
             $this->draw($chart['target_id']);
         }
         $this->ret[] = array('num' => count($this->graph), 'data' => array('div' => $this->chart['div_id'], 'name' => $this->alert['name'], 'graph' => $this->graph, 'chartData' => $this->merge_key_val($this->chartData)));
     }
     //print_r($this->ret);
     return $this->ret;
 }
Example #3
0
 public function delete()
 {
     $service_list = get_service_list_running($this->link);
     $service_ids = $this->get_field('service_id', $service_list);
     $instance_ids = array();
     foreach ($service_list as $service) {
         $instances = pdo_get_mapping_info_by_service($this->link, $service['service_id']);
         $instance_ids = array_merge($instance_ids, $this->get_field('instance_id', $instances));
     }
     $sql = "select * from knowing_charts where target_type='service'";
     $charts = pdo_fetch_all($this->link, $sql);
     foreach ($charts as $chart) {
         if (!in_array($chart['target_id'], $service_ids)) {
             echo 'delete service ' . $chart['target_id'] . '--' . $chart['chart_id'] . "\n";
             $this->delete_knowing_chart($chart['chart_id']);
         }
     }
     $sql = "select * from knowing_charts where target_type='instance'";
     $charts = pdo_fetch_all($this->link, $sql);
     foreach ($charts as $chart) {
         if (!in_array($chart['target_id'], $instance_ids)) {
             echo 'delete instance ' . $chart['target_id'] . '--' . $chart['chart_id'] . "\n";
             $this->delete_knowing_chart($chart['chart_id']);
         }
     }
 }