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; }
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; }
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']); } } }