'<', '>' => '>', '=' => '=', '#' => 'NOT'); $limited_operators = array( '=' => '=', '#' => 'NOT'); $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, 'T' => T_ZBX_INT ), 'delta' => array( 'description' => 'Difference between MAX and MIN value of T times {OP} N', 'operators' => $operators, 'T' => T_ZBX_INT ), 'change' => array( 'description' => 'Difference between last and previous value of T times {OP} N.', 'operators' => $operators ), 'count' => array( 'description' => 'Number of successfully retrieved values for period of time T {OP} N.', 'operators' => $operators, 'T' => T_ZBX_INT ), '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, 'T' => T_ZBX_INT ), 'min' => array( 'description' => 'Minimal value for period of time T {OP} N.', 'operators' => $operators, 'T' => T_ZBX_INT ), '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, 'T' => T_ZBX_STR ), 'sum' => array( 'description' => 'Sum of values for period of time T {OP} N', 'operators' => $operators, 'T' => T_ZBX_INT ) ); // 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'])) { $pats = array( array( 'pat' => '\{([[:print:]]{1,}):([[:print:]]{1,})\.([[:print:]]{1,})\(([[:print:]]{1,})\)\}'. '(['.implode('',array_keys($operators)).'])([[:print:]]{1,})', 'idx' => array('host' => 1, 'key' => 2, 'function' => 3, 'param' => 4, 'operator' => 5, 'value'=>6) ) ); foreach($pats as $pat) { if($res = eregi($pat['pat'],$_REQUEST['expression'],$expr_res)) { if(isset($pat['idx']['host']) && isset($pat['idx']['key'])) { $itemid = DBfetch(DBselect('select i.itemid from items i, hosts h '. ' where i.hostid=h.hostid and h.host='.zbx_dbstr($expr_res[$pat['idx']['host']]). ' and i.key_='.zbx_dbstr($expr_res[$pat['idx']['key']]))); $_REQUEST['itemid'] = $itemid['itemid']; } if(isset($pat['idx']['param'])) { $_REQUEST['paramtype'] = PARAM_TYPE_SECONDS; $_REQUEST['param'] = $expr_res[$pat['idx']['param']]; if($pat['idx']['param'][0] == '#') { $_REQUEST['paramtype'] = PARAM_TYPE_COUNTS; $_REQUEST['param'] = ltrim('#', $expr_res[$pat['idx']['param']]); } } $operator = '='; if(isset($pat['idx']['operator'])) $operator = $expr_res[$pat['idx']['operator']]; if(isset($pat['idx']['function'])) $_REQUEST['expr_type'] = $expr_res[$pat['idx']['function']].'['.$operator.']'; if(isset($pat['idx']['value'])) $_REQUEST['value'] = $expr_res[$pat['idx']['value']]; break; } } } unset($expr_res); $dstfrm = get_request("dstfrm", 0); // destination form $dstfld1 = get_request("dstfld1", ''); // destination field $itemid = get_request("itemid", 0); $denyed_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY,PERM_MODE_LT); if($item_data = DBfetch(DBselect("select distinct h.host,i.* from hosts h,items i ". " where h.hostid=i.hostid and h.hostid not in (".$denyed_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(!in_array($function, array_keys($functions))) unset($function); } unset($expr_res); if(!isset($function)) $function = 'last'; if(!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); ?> 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]['T'])) { if($functions[$function]['T'] == T_ZBX_INT) { $cmbParamType = new CComboBox('paramtype', $paramtype); $cmbParamType->AddItem(PARAM_TYPE_SECONDS, S_SECONDS); $cmbParamType->AddItem(PARAM_TYPE_COUNTS, S_COUNTS); $form->AddRow(S_LAST_OF.' T', array( new CNumericBox('param', $param, 10), $cmbParamType )); } else { $form->AddRow('T', new CTextBox('param', $param, 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(); ?>