array(T_ZBX_INT, O_OPT, P_SYS, DB_ID, null), ); check_fields($fields); validate_sort_and_sortorder(); $r_form = new CForm(); $r_form->SetMethod('get'); $druleid = get_request('druleid', 0); $cmbDRules = new CComboBox('druleid',$druleid,'submit()'); $cmbDRules->AddItem(0,S_ALL_SMALL); $db_drules = DBselect('select distinct druleid,name from drules where '.DBin_node('druleid').' order by name'); while($drule = DBfetch($db_drules)) $cmbDRules->AddItem( $drule['druleid'], get_node_name_by_elid($drule['druleid']).$drule['name'] ); $r_form->AddItem(array(S_DISCOVERY_RULE.SPACE,$cmbDRules)); show_table_header(S_STATUS_OF_DISCOVERY_BIG, $r_form); $services = array(); $db_dservices = DBselect('SELECT s.type,s.port,s.key_ FROM dservices s,dhosts h'. ' WHERE '.DBin_node('s.dserviceid'). ' AND s.dhostid=h.dhostid'. ($druleid > 0 ? ' AND h.druleid='.$druleid : '')); while ($dservice = DBfetch($db_dservices)) { $service_name = discovery_check_type2str($dservice['type']). discovery_port2str($dservice['type'], $dservice['port']). (empty($dservice['key_']) ? '' : ':'.$dservice['key_']); $services[$service_name] = 1; } ksort($services); $header = array( is_show_subnodes() ? new CCol(S_NODE, 'center') : null, new CCol(make_sorting_link(S_HOST,'dhostid'), 'center'), new CCol(array(S_UPTIME.'/',BR(),S_DOWNTIME),'center') ); foreach ($services as $name => $foo) { $header[] = new CImg('vtext.php?text='.$name); } $table = new CTableInfo(); $table->SetHeader($header,'vertical_header'); $db_drules = DBselect('select distinct druleid,name from drules where '.DBin_node('druleid'). ($druleid > 0 ? ' and druleid='.$druleid : ''). ' order by name'); while($drule = DBfetch($db_drules)) { $discovery_info = array(); $db_dhosts = DBselect('SELECT dhostid,druleid,ip,status,lastup,lastdown '. ' FROM dhosts WHERE '.DBin_node('dhostid'). ' AND druleid='.$drule['druleid']. order_by('dhostid','status,ip')); while($dhost = DBfetch($db_dhosts)){ $class = 'enabled'; $time = 'lastup'; if(DHOST_STATUS_DISABLED == $dhost['status']){ $class = 'disabled'; $time = 'lastdown'; } $discovery_info[$dhost['ip']] = array('class' => $class, 'time' => $dhost[$time], 'druleid' => $dhost['druleid']); $db_dservices = DBselect('SELECT type,port,key_,status,lastup,lastdown FROM dservices '. ' WHERE dhostid='.$dhost['dhostid']. ' order by status,type,port'); while($dservice = DBfetch($db_dservices)){ $class = 'active'; $time = 'lastup'; if(DSVC_STATUS_DISABLED == $dservice['status']){ $class = 'inactive'; $time = 'lastdown'; } $service_name = discovery_check_type2str($dservice['type']). discovery_port2str($dservice['type'], $dservice['port']). (empty($dservice['key_']) ? '' : ':'.$dservice['key_']); $discovery_info [$dhost['ip']] ['services'] [$service_name] = array('class' => $class, 'time' => $dservice[$time]); } } if ($druleid == 0 && !empty($discovery_info)) { $col = new CCol(array(bold($drule['name']), SPACE."(".count($discovery_info).SPACE.S_ITEMS.")")); $col->SetColSpan(count($services) + 2); $table->AddRow(array(get_node_name_by_elid($drule['druleid']),$col)); } foreach($discovery_info as $ip => $h_data) { $table_row = array( get_node_name_by_elid($h_data['druleid']), new CSpan($ip, $h_data['class']), new CSpan(($h_data['time'] == 0 ? '' : convert_units(time() - $h_data['time'], 'uptime')), $h_data['class']) ); foreach($services as $name => $foo) { $class = null; $time = SPACE; if(isset($h_data['services'][$name])) { $class = $h_data['services'][$name]['class']; $time = $h_data['services'][$name]['time']; } $table_row[] = new CCol(SPACE, $class); } $table->AddRow($table_row); } } $table->Show(); ?>