'<', '>' => '>', '=' => '=', '#' => 'NOT'); $limited_operators = array( '=' => '=', '#' => 'NOT'); $metrics = array( PARAM_TYPE_SECONDS => S_SECONDS, PARAM_TYPE_COUNTS => S_COUNT); $param1_sec_count = array( array( 'C' => S_LAST_OF.' T', /* caption */ 'T' => T_ZBX_INT, /* type */ 'M' => $metrics /* metrcis */ )); $param1_str = array( array( 'C' => 'T', /* caption */ 'T' => T_ZBX_STR, )); $param2_sec_val = array( array( 'C' => S_LAST_OF.' T', /* caption */ 'T' => T_ZBX_INT, ), array( 'C' => 'V', /* caption */ 'T' => T_ZBX_STR, )); $functions = array( 'abschange' => array( 'description' => 'Absolute difference between last and previous value {OP} N', 'operators' => $operators ), 'avg' => array( 'description' => 'Average value for period of T times {OP} N', 'operators' => $operators, 'params' => $param1_sec_count ), 'delta' => array( 'description' => 'Difference between MAX and MIN value of T times {OP} N', 'operators' => $operators, 'params' => $param1_sec_count ), 'change' => array( 'description' => 'Difference between last and previous value of T times {OP} N.', 'operators' => $operators ), 'count' => array( 'description' => 'Number of successfully retrieved values V for period of time T {OP} N.', 'operators' => $operators, 'params' => $param2_sec_val ), 'diff' => array( 'description' => 'N {OP} X, where X is 1 - if last and previous values differs, 0 - otherwise.', 'operators' => $limited_operators ), 'last' => array( 'description' => 'Last value {OP} N', 'operators' => $operators ), 'max' => array( 'description' => 'Maximal value for period of time T {OP} N.', 'operators' => $operators, 'params' => $param1_sec_count ), 'min' => array( 'description' => 'Minimal value for period of time T {OP} N.', 'operators' => $operators, 'params' => $param1_sec_count ), 'prev' => array( 'description' => 'Previous value {OP} N.', 'operators' => $operators ), 'str' => array( 'description' => 'Find string T last value. N {OP} X, where X is 1 - if found, 0 - otherwise', 'operators' => $limited_operators, 'params' => $param1_str ), 'sum' => array( 'description' => 'Sum of values for period of time T {OP} N', 'operators' => $operators, 'params' => $param1_sec_count ) ); // VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION $fields=array( "dstfrm"=> array(T_ZBX_STR, O_MAND,P_SYS, NOT_EMPTY, null), "dstfld1"=> array(T_ZBX_STR, O_MAND,P_SYS, NOT_EMPTY, null), "expression"=> array(T_ZBX_STR, O_OPT, null, null, null), "itemid"=> array(T_ZBX_INT, O_OPT, null, null, 'isset({insert})'), "expr_type"=> array(T_ZBX_STR, O_OPT, null, NOT_EMPTY, 'isset({insert})'), "param"=> array(T_ZBX_STR, O_OPT, null, 0, 'isset({insert})'), "paramtype"=> array(T_ZBX_INT, O_OPT, null, IN(PARAM_TYPE_SECONDS.','.PARAM_TYPE_COUNTS), 'isset({insert})'), "value"=> array(T_ZBX_STR, O_OPT, null, NOT_EMPTY, 'isset({insert})'), "insert"=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null) ); check_fields($fields); if(isset($_REQUEST['expression'])) { if( ($res = ereg( '^'.ZBX_EREG_SIMPLE_EXPRESSION_FORMAT.'(['.implode('',array_keys($operators)).'])'.'([[:print:]]{1,})', $_REQUEST['expression'], $expr_res)) ) { $itemid = DBfetch(DBselect('select i.itemid from items i, hosts h '. ' where i.hostid=h.hostid and h.host='.zbx_dbstr($expr_res[ZBX_SIMPLE_EXPRESSION_HOST_ID]). ' and i.key_='.zbx_dbstr($expr_res[ZBX_SIMPLE_EXPRESSION_KEY_ID]))); $_REQUEST['itemid'] = $itemid['itemid']; $_REQUEST['paramtype'] = PARAM_TYPE_SECONDS; $_REQUEST['param'] = $expr_res[ZBX_SIMPLE_EXPRESSION_FUNCTION_PARAM_ID]; if($_REQUEST['param'][0] == '#') { $_REQUEST['paramtype'] = PARAM_TYPE_COUNTS; $_REQUEST['param'] = ltrim($_REQUEST['param'],'#'); } $operator = $expr_res[count($expr_res) - 2]; $_REQUEST['expr_type'] = $expr_res[ZBX_SIMPLE_EXPRESSION_FUNCTION_NAME_ID].'['.$operator.']'; $_REQUEST['value'] = $expr_res[count($expr_res) - 1]; } } unset($expr_res); $dstfrm = get_request("dstfrm", 0); // destination form $dstfld1 = get_request("dstfld1", ''); // destination field $itemid = get_request("itemid", 0); $available_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY); if($item_data = DBfetch(DBselect('SELECT DISTINCT h.host,i.* '. ' FROM hosts h,items i '. ' WHERE h.hostid=i.hostid '. ' AND h.hostid IN ('.$available_hosts.') '. ' AND i.itemid='.$itemid))) { $description = $item_data['host'].':'.item_description($item_data["description"],$item_data["key_"]); } else{ $itemid = 0; $description = ''; } $expr_type = get_request("expr_type", 'last[=]'); if(eregi('^([a-z]{1,})\[(['.implode('',array_keys($operators)).'])\]$',$expr_type,$expr_res)) { $function = $expr_res[1]; $operator = $expr_res[2]; if(!str_in_array($function, array_keys($functions))) unset($function); } unset($expr_res); if(!isset($function)) $function = 'last'; if(!str_in_array($operator, array_keys($functions[$function]['operators']))) unset($operator); if(!isset($operator)) $operator = '='; $expr_type = $function.'['.$operator.']'; $param = get_request('param', 0); $paramtype = get_request('paramtype', PARAM_TYPE_SECONDS); $value = get_request('value', 0); if( !is_array($param) ) { if( isset($functions[$function]['params']) ) { $param = split(',', $param, count($functions[$function]['params'])); } else { $param = array($param); } } ?> SetHelp('config_triggers.php'); $form->SetName('expression'); $form->AddVar('dstfrm', $dstfrm); $form->AddVar('dstfld1', $dstfld1); $form->AddVar('itemid',$itemid); $form->AddRow(S_ITEM, array( new CTextBox('description', $description, 50, 'yes'), new CButton('select', S_SELECT, "return PopUp('popup.php?dstfrm=".$form->GetName(). "&dstfld1=itemid&dstfld2=description&". "srctbl=items&srcfld1=itemid&srcfld2=description',0,0,'zbx_popup_item');") )); $cmbFnc = new CComboBox('expr_type', $expr_type , 'submit()'); foreach($functions as $id => $f) { foreach($f['operators'] as $op => $txt_op) { $cmbFnc->AddItem($id.'['.$op.']', str_replace('{OP}', $txt_op, $f['description'])); } } $form->AddRow(S_FUNCTION, $cmbFnc); if(isset($functions[$function]['params'])) { foreach($functions[$function]['params'] as $pid => $pf ) { $pv = (isset($param[$pid])) ? $param[$pid] : null; if($pf['T'] == T_ZBX_INT) { if( 0 == $pid) { if( isset($pf['M']) && is_array($pf['M'])) { $cmbParamType = new CComboBox('paramtype', $paramtype); foreach( $pf['M'] as $mid => $caption ) { $cmbParamType->AddItem($mid, $caption); } } else { $form->AddVar('paramtype', PARAM_TYPE_SECONDS); $cmbParamType = S_SECONDS; } } else { $cmbParamType = null; } $form->AddRow(S_LAST_OF.' ', array( new CNumericBox('param['.$pid.']', $pv, 10), $cmbParamType )); } else { $form->AddRow($pf['C'], new CTextBox('param['.$pid.']', $pv, 30)); $form->AddVar('paramtype', PARAM_TYPE_SECONDS); } } } else { $form->AddVar('paramtype', PARAM_TYPE_SECONDS); $form->AddVar('param', 0); } $form->AddRow('N', new CTextBox('value', $value, 10)); $form->AddItemToBottomRow(new CButton('insert',S_INSERT)); $form->Show(); ?>