-m [--] [args...]\n"; echo " ".$prg." -i -m add_rc --rc_name=\n"; echo " ".$prg." -i -m add_vrc --rc_name= --vrc_name= ". "--svc_ext_type=\n"; echo " ".$prg." -i -m add_fhs --rc_name= --vrc_name= ". "--svc_ext_type= --fhs_name= --host_name= --private_ip= ". "--publics_ips=<1st_public_ip:2nd_public_ip> \n"; echo " ".$prg." -i -m add_fhs --rc_name= --vrc_name= ". "--svc_ext_type= --fhs_list= \n"; echo " ".$prg." -i -m del_rc --rc_name= \n"; echo " ".$prg." -i -m del_vrc --rc_name= --vrc_name=\n"; echo " ".$prg." -i -m del_fhs --rc_name= --fhs_name=\n"; echo " -v Version number\n"; echo " -i Specifies the user.\n"; echo " -m Run job_type.\n"; echo " add_rc add rc\n"; echo " add_vrc add vrc\n"; echo " add_fhs add fhs\n"; echo " del_rc delete rc\n"; echo " del_vrc delete vrc\n"; echo " del_fhs delete fhs\n"; echo " args... \n"; echo " --rc_name rc name\n"; echo " --vrc_name vrc name\n"; echo " --fhs_name fhs name\n"; echo " --host_name host name\n"; echo " --svc_ext_type service extend type of fhs or vrc \n"; echo " --private_ip private ip of fhs\n"; echo " --publics_ips public ip of fhs\n"; echo " --fhs_list read list of fhs from file \n"; echo " file fromat : \n"; echo " ::::\n"; } // parsing argument list function parseArgs($argv) { $options = $argv; $shortopts = "i:m:D::f:v::"; $longopts = array( "rc_name:", "vrc_name:", "fhs_name:", "host_name:", "svc_ext_type:", "private_ip:", "publics_ips:", "fhs_list:", ); //$options = getopt($shortopts); $options = _getopt($shortopts, $longopts); if(empty($options)) { usqgePrint($argv[0]); return NULL; } // version print if(!empty($options['v'])) { versionPrint(); return NULL; } // check deboug flag if(!empty($options['D'])) { global $g_debug; $g_debug = 1; } // public ip if(!empty($options['publics_ips'])) { $pubips = explode(":", $options['publics_ips']); $options['publics_1st'] = $pubips[0]; $options['publics_2nd'] = ""; if(!empty($pubips[1])) $options['publics_2nd'] = $pubips[1]; } // set file read path if(!empty($options['fhs_list'])) { $options["read_path"] = $options['fhs_list']; } return $options; } // check options function checkopts($options) { // check id if( chkvalempty($options, 'i') ) return 1; switch($options['i']) // strtolower() { case 'svc1': break; case 'ktics': break; case 'op': break; default: echo "ERROR : invalid id : '".$options['i']."'\n"; return 1; } // check -f ,-m if( !empty($options['f']) && !empty($options['m']) ) { echo "ERROR : Options '-f' can't be used simultaneously with Options '-m'.\n"; return 1; } else if(empty($options['f'])) // -m { //check mode : ADD_RC, ADD_VRC, ADD_FHS, DEL_RC, DEL_VCR, DEL_FHS // check mode if( chkvalempty($options, 'm') ) return 1; switch($options['m']) // strtolower() { case 'add_rc': // check rc_name; if(chkvalempty($options,'rc_name')) return 1; break; case 'add_vrc': // check rc_name; if(chkvalempty($options,'rc_name')) return 1; // check vrc_name; if(chkvalempty($options,'vrc_name')) return 1; // check __svc_ext_type if(chkvalempty($options,'svc_ext_type')) return 1; break; case 'add_fhs': // check rc_name; if(chkvalempty($options,'rc_name')) return 1; // check vrc_name; if(chkvalempty($options,'vrc_name')) return 1; if( empty($options["fhs_list"]) ) { // check fhs_name; if(chkvalempty($options,'fhs_name')) return 1; // check host_name; if(chkvalempty($options,'host_name')) return 1; // check __svc_ext_type if(chkvalempty($options,'svc_ext_type')) return 1; // {Private IP} if(chkvalempty($options,'private_ip')) return 1; // {1st Public IP} // {2nd Public IP} if(chkvalempty($options,'publics_ips')) return 1; } else { // check __svc_ext_type if(chkvalempty($options,'svc_ext_type')) return 1; // check value fhs_list if(chkvalempty($options,'fhs_list')) return 1; } break; case 'del_rc': // check rc_name; if(chkvalempty($options,'rc_name')) return 1; break; case 'del_vrc': // check rc_name; if(chkvalempty($options,'rc_name')) return 1; // check vrc_name; if(chkvalempty($options,'vrc_name')) return 1; break; case 'del_fhs': // check rc_name; if(chkvalempty($options,'rc_name')) return 1; if( empty($options["fhs_list"]) ) { // check fhs_name; if(chkvalempty($options,'fhs_name')) return 1; } else { // check value fhs_list if(chkvalempty($options,'fhs_list')) return 1; } break; default: echo "ERROR : Unkown mode : '".$options['m']."'\n"; return 1; } } else if(empty($options['m'])) // -f { // check value if( chkvalempty($options, 'f') ) return 1; } return 0; } // check vlaue empty function chkvalempty(&$o, $name) { if( empty($o[$name])|| $o[$name] == " " ) { if(strlen($name) > 1) echo "ERROR : empty value '--".$name."'\n"; else echo "ERROR : empty value '-".$name."'\n"; return 1; } return 0; } // convert to ISM command function convert2ISMcommand($options) { $r = array(); $command = array(); $code = array(); switch($options['m']) // strtolower() { case 'add_rc': $code['type'] = 301; $code['type_name'] = "_ADD_RC"; $command['file_path'] = "/hostservices/physical/". $options['rc_name']."/". $options['rc_name'].".cfg"; $command['h_host_name'] = $options['rc_name']; $command['h_alias'] = ""; $command['use'] = "virtual-ics-host"; $command['check_command'] = "check-rc!\$HOSTNAME$!\$HOSTSTATEID:". "hg_".$options['rc_name'].":,$"; $command['hostgroups'] = "hg_physical"; $command['address'] = ""; $command['notes'] = "physical"; $command['__related_to'] = ""; $command['__type'] = "RC"; $command['__svc_type'] = "C000"; $command['__svc_ext_type'] = ""; $command['__svc_cont_seq'] = ""; $command['__private_address1'] = ""; $command['__public_address1'] = ""; $command['__public_address2'] = ""; $command['hostgroup_name1'] = "hg_".$options['rc_name']; $command['alias1'] = $options['rc_name']." hostgroup"; $command['hostgroup_name2'] = "rhg_".$options['rc_name']; $command['alias2'] = $options['rc_name']." real hostgroup"; $command['s_host_name'] = $options['rc_name']; $command['service_description'] = $options['rc_name']; $command['s_use'] = "rc-service"; $command['servicegroups'] = ""; $command['s_notes'] = "physical"; $command['servicegroup_name'] = ""; $command['s_alias'] = ""; break; case 'add_vrc': $code['type'] = 304; $code['type_name'] = "_ADD_VRC"; $vrc_name = $options['vrc_name'].".".$options['rc_name']; $command['file_path'] = "/hostservices/physical/". $options['rc_name']."/". $vrc_name."/". $vrc_name.".cfg"; $command['h_host_name'] = $vrc_name; $command['h_alias'] = ""; $command['use'] = "cs-vrc-host"; $command['check_command'] = "check-vrc!\$HOSTNAME$!\$SERVICESTATEID:". "sg_".$vrc_name.":,$"; $command['hostgroups'] = "hg_".$options['rc_name']; $command['address'] = ""; $command['notes'] = $options['rc_name']; $command['__related_to'] = "vhg_".$vrc_name; $command['__type'] = "VRC"; $command['__svc_type'] = "C001"; $command['__svc_ext_type'] = $options['svc_ext_type']; $command['__svc_cont_seq'] = ""; $command['__private_address1'] = ""; $command['__public_address1'] = ""; $command['__public_address2'] = ""; $command['hostgroup_name1'] = "hg_".$vrc_name; $command['alias1'] = $vrc_name." hostgroup"; $command['hostgroup_name2'] = "vhg_".$vrc_name; $command['alias2'] = $vrc_name. " virtual hostgroup"; $command['s_host_name'] = $vrc_name; $command['service_description'] = $vrc_name; $command['s_use'] = "cs-vrc-service"; $command['servicegroups'] = ""; $command['s_notes'] = $options['rc_name']; $command['servicegroup_name'] = "sg_".$vrc_name; $command['s_alias'] = $vrc_name." service group"; break; case 'add_fhs': $code['type'] = 307; $code['type_name'] = "_ADD_FHS"; $vrc_name = $options['vrc_name'].".".$options['rc_name']; $fhs_name = $options['fhs_name'].".".$options['rc_name']; $command['file_path'] = "/hostservices/physical/". $options['rc_name']."/". $vrc_name."/". $fhs_name.".cfg"; $command['h_host_name'] = $fhs_name; $command['h_alias'] = $options['host_name']; $command['use'] = "cs-fhs-host"; $command['check_command'] = ""; $command['hostgroups'] = "hg_".$vrc_name. ",rhg_".$options['rc_name']; $command['address'] = $options['publics_1st']; $command['notes'] = $vrc_name; $command['__related_to'] = "vhg_".$fhs_name; $command['__type'] = "FHS"; $command['__svc_type'] = "C001"; $command['__svc_ext_type'] = $options['svc_ext_type']; $command['__svc_cont_seq'] = ""; $command['__private_address1'] = $options['private_ip']; $command['__public_address1'] = $options['publics_1st']; $command['__public_address2'] = $options['publics_2nd']; $command['hostgroup_name1'] = "vhg_".$fhs_name; $command['alias1'] = $fhs_name. " virtual hostgroup"; $command['hostgroup_name2'] = ""; $command['alias2'] = ""; $command['s_host_name'] = $fhs_name; $command['service_description'] = $fhs_name; $command['s_use'] = "cs-".$options['svc_ext_type']."-fhs-service"; $command['servicegroups'] = "sg_".$vrc_name; $command['s_notes'] = $vrc_name; $command['servicegroup_name'] = ""; $command['s_alias'] = ""; break; case 'del_rc': $code['type'] = 302; $code['type_name'] = "_DEL_RC"; $command['file_path'] = $options['rc_name'].".cfg"; $command['h_host_name'] = $options['rc_name']; break; case 'del_vrc': $code['type'] = 305; $code['type_name'] = "_DEL_VRC"; $vrc_name = $options['vrc_name'].".".$options['rc_name']; $command['file_path'] = $vrc_name.".cfg"; $command['h_host_name'] = $vrc_name; break; case 'del_fhs': $code['type'] = 308; $code['type_name'] = "_DEL_FHS"; $fhs_name = $options['fhs_name'].".".$options['rc_name']; $command['file_path'] = $fhs_name.".cfg"; $command['h_host_name'] = $fhs_name; break; } $code['user'] = $options['i']; $r['code'] = $code; $r['command'] = $command; return $r; } // read file function filereaddata($path) { $data = array(); // read $lines = @file($path); if(empty($lines)) { echo "ERROR : file read error. - ".$path."\n"; return NULL; } // remove comment(//,#) foreach ($lines as $line_num => $line) { $line = rtrim($line); $debug_str = $line_num." - ".$line; debugPrint("Read Data :", $debug_str); $p = preg_split("/[#]|[\/\/]/", $line); if(!empty($p[0])) $data[] = $p[0]; } if(empty($data)) { echo "ERROR : empty data. - ".$path."\n"; } return $data; } // parsing file read data function parsefiledata($parstype, $dataes) { $r = array(); $c = 0; foreach ($dataes as $line_num => $line) { debugPrint("parsing....", $line); $line = $line; $parse = explode(":", $line); if(empty($parse)) continue; switch($parstype) { case 'add_fhs': $r[$c]['fhs_name'] = $parse[0]; $r[$c]['host_name'] = $parse[1]; // check if(empty($parse[2]) || empty($parse[3])) { unset($r[$c]); echo "ERROR : parseing data. - ".$line."\n"; continue; } $r[$c]['private_ip'] = $parse[2]; $r[$c]['publics_1st'] = $parse[3]; if(!empty($parse[4])) { $r[$c]['publics_2nd'] = $parse[4]; } else $r[$c]['publics_2nd'] =""; break; case 'del_fhs': $r[$c]['fhs_name'] = $parse[0]; break; } ++$c; } if(empty($r)) { echo "ERROR : empty parseing data.\n"; } return $r; } // set Option function setOption(&$option, $data) { switch($option['m']) { case 'add_fhs': $option['fhs_name'] = $data['fhs_name']; $option['host_name'] = $data['host_name']; $option['private_ip'] = $data['private_ip']; $option['publics_1st'] = $data['publics_1st']; $option['publics_2nd'] = $data['publics_2nd']; break; case 'del_fhs': $option['fhs_name'] = $data['fhs_name']; break; } } // insert ISM function insertData($data) { $r = 0; $dbConnMySql = new dbconnect('222.122.152.140', 'nagios', 'nagiosakstp', 'nagios', __FILE__, __LINE__); // chage array to string $command = implode(";", $data['command'] ); $sql = "INSERT INTO ism_commands ". "( USERID, REGTIME, COMMAND_TYPE,". "COMMAND_NAME, COMMAND_ARGS, STATUS, ERRNO ) ". "VALUES ( '".$data['code']['user']."', NOW(), ". $data['code']['type'].", '".$data['code']['type_name']."', '". $command."', 0, 0)"; debugPrint("SQL : ", $sql); $res = $dbConnMySql->query($sql,__FILE__, __LINE__ ); if( !$res->result ) { echo "ERROR : Fail to insert data.\n"; $r = 1; } $dbConnMySql->close(); return $r; } /* Gets options from the command line argument list */ function _getopt ( ) { /* _getopt(): Ver. 1.3 2009/05/30 My page: http://www.ntu.beautifulworldco.com/weblog/?p=526 Usage: _getopt ( [$flag,] $short_option [, $long_option] ); Note that another function split_para() is required, which can be found in the same page. _getopt() fully simulates getopt() which is described at http://us.php.net/manual/en/function.getopt.php , including long options for PHP version under 5.3.0. (Prior to 5.3.0, long options was only available on few systems) Besides legacy usage of getopt(), I also added a new option to manipulate your own argument lists instead of those from command lines. This new option can be a string or an array such as $flag = "-f value_f -ab --required 9 --optional=PK --option -v test -k"; or $flag = array ( "-f", "value_f", "-ab", "--required", "9", "--optional=PK", "--option" ); So there are four ways to work with _getopt(), 1. _getopt ( $short_option ); it's a legacy usage, same as getopt ( $short_option ). 2. _getopt ( $short_option, $long_option ); it's a legacy usage, same as getopt ( $short_option, $long_option ). 3. _getopt ( $flag, $short_option ); use your own argument lists instead of command line arguments. 4. _getopt ( $flag, $short_option, $long_option ); use your own argument lists instead of command line arguments. */ if ( func_num_args() == 1 ) { $flag = $flag_array = $GLOBALS['argv']; $short_option = func_get_arg ( 0 ); $long_option = array (); } else if ( func_num_args() == 2 ) { if ( is_array ( func_get_arg ( 1 ) ) ) { $flag = $GLOBALS['argv']; $short_option = func_get_arg ( 0 ); $long_option = func_get_arg ( 1 ); } else { $flag = func_get_arg ( 0 ); $short_option = func_get_arg ( 1 ); $long_option = array (); } } else if ( func_num_args() == 3 ) { $flag = func_get_arg ( 0 ); $short_option = func_get_arg ( 1 ); $long_option = func_get_arg ( 2 ); } else { exit ( "wrong options\n" ); } $short_option = trim ( $short_option ); $short_no_value = array(); $short_required_value = array(); $short_optional_value = array(); $long_no_value = array(); $long_required_value = array(); $long_optional_value = array(); $options = array(); for ( $i = 0; $i < strlen ( $short_option ); ) { if ( $short_option[$i] != ":" ) { if ( $i == strlen ( $short_option ) - 1 ) { $short_no_value[] = $short_option[$i]; break; } else if ( $short_option[$i+1] != ":" ) { $short_no_value[] = $short_option[$i]; $i++; continue; } else if ( $short_option[$i+1] == ":" &&( empty($short_option[$i+2]) || $short_option[$i+2] != ":" )) { $short_required_value[] = $short_option[$i]; $i += 2; continue; } else if ( $short_option[$i+1] == ":" && $short_option[$i+2] == ":" ) { $short_optional_value[] = $short_option[$i]; $i += 3; continue; } } else { continue; } } foreach ( $long_option as $a ) { if ( substr( $a, -2 ) == "::" ) { $long_optional_value[] = substr( $a, 0, -2); continue; } else if ( substr( $a, -1 ) == ":" ) { $long_required_value[] = substr( $a, 0, -1 ); continue; } else { $long_no_value[] = $a; continue; } } if ( is_array ( $flag ) ) $flag_array = $flag; else { $flag = "- $flag"; $flag_array = split_para( $flag ); } for ( $i = 0; $i < count( $flag_array ); ) { if ( $i >= count ( $flag_array ) ) break; if ( ! $flag_array[$i] || $flag_array[$i] == "-" ) { $i++; continue; } if ( $flag_array[$i]{0} != "-" ) { $i++; continue; } if ( substr( $flag_array[$i], 0, 2 ) == "--" ) { if (strpos($flag_array[$i], '=') != false) { list($key, $value) = explode('=', substr($flag_array[$i], 2), 2); if ( in_array ( $key, $long_required_value ) || in_array ( $key, $long_optional_value ) ) $options[$key][] = $value; $i++; continue; } if (strpos($flag_array[$i], '=') == false) { $key = substr( $flag_array[$i], 2 ); if ( in_array( substr( $flag_array[$i], 2 ), $long_required_value ) ) { if(empty($flag_array[$i+1])) $options[$key][] = " "; else $options[$key][] = $flag_array[$i+1]; $i += 2; continue; } else if ( in_array( substr( $flag_array[$i], 2 ), $long_optional_value ) ) { if ( $flag_array[$i+1] != "" && $flag_array[$i+1]{0} != "-" ) { $options[$key][] = $flag_array[$i+1]; $i += 2; } else { $options[$key][] = FALSE; $i ++; } continue; } else if ( in_array( substr( $flag_array[$i], 2 ), $long_no_value ) ) { $options[$key][] = FALSE; $i++; continue; } else { $i++; continue; } } } else if ( $flag_array[$i]{0} == "-" && $flag_array[$i]{1} != "-" ) { for ( $j=1; $j < strlen($flag_array[$i]); $j++ ) { if ( in_array( $flag_array[$i]{$j}, $short_required_value ) || in_array( $flag_array[$i]{$j}, $short_optional_value )) { if ( $j == strlen($flag_array[$i]) - 1 ) { if ( in_array( $flag_array[$i]{$j}, $short_required_value ) ) { if(empty($flag_array[$i+1])) $options[$flag_array[$i]{$j}][] = " "; else $options[$flag_array[$i]{$j}][] = $flag_array[$i+1]; $i += 2; } else if ( in_array( $flag_array[$i]{$j}, $short_optional_value ) /*&& ( empty($flag_array[$i+1]) || ($flag_array[$i+1] != "" && $flag_array[$i+1]{0} != "-"))*/ ) { //if(empty($flag_array[$i+1])) // $options[$flag_array[$i]{$j}][] = $flag_array[$i]; //else //$options[$flag_array[$i]{$j}][] = $flag_array[$i+1]; $options[$flag_array[$i]{$j}][] = TRUE; $i += 1; } else { $options[$flag_array[$i]{$j}][] = FALSE; $i ++; } $plus_i = 0; break; } else { $options[$flag_array[$i]{$j}][] = substr ( $flag_array[$i], $j + 1 ); $i ++; $plus_i = 0; break; } } else if ( in_array ( $flag_array[$i]{$j}, $short_no_value ) ) { $options[$flag_array[$i]{$j}][] = FALSE; $plus_i = 1; continue; } else { $plus_i = 1; break; } } $i += $plus_i; continue; } $i++; continue; } foreach ( $options as $key => $value ) { if ( count ( $value ) == 1 ) { $options[ $key ] = $value[0]; } } return $options; } function split_para ( $pattern ) { /* split_para() version 1.0 2008/08/19 My page: http://www.ntu.beautifulworldco.com/weblog/?p=526 This function is to parse parameters and split them into smaller pieces. preg_split() does similar thing but in our function, besides "space", we also take the three symbols " (double quote), '(single quote), and \ (backslash) into consideration because things in a pair of " or ' should be grouped together. As an example, this parameter list -f "test 2" -ab --required "t\"est 1" --optional="te'st 3" --option -v 'test 4' will be splited into -f t"est 2 -ab --required test 1 --optional=te'st 3 --option -v test 4 see the code below, $pattern = "-f \"test 2\" -ab --required \"t\\\"est 1\" --optional=\"te'st 3\" --option -v 'test 4'"; $result = split_para( $pattern ); echo "ORIGINAL PATTERN: $pattern\n\n"; var_dump( $result ); */ $begin=0; $backslash = 0; $quote = ""; $quote_mark = array(); $result = array(); $pattern = trim ( $pattern ); for ( $end = 0; $end < strlen ( $pattern ) ; ) { if ( ! in_array ( $pattern{$end}, array ( " ", "\"", "'", "\\" ) ) ) { $backslash = 0; $end ++; continue; } if ( $pattern{$end} == "\\" ) { $backslash++; $end ++; continue; } else if ( $pattern{$end} == "\"" ) { if ( $backslash % 2 == 1 || $quote == "'" ) { $backslash = 0; $end ++; continue; } if ( $quote == "" ) { $quote_mark[] = $end - $begin; $quote = "\""; } else if ( $quote == "\"" ) { $quote_mark[] = $end - $begin; $quote = ""; } $backslash = 0; $end ++; continue; } else if ( $pattern{$end} == "'" ) { if ( $backslash % 2 == 1 || $quote == "\"" ) { $backslash = 0; $end ++; continue; } if ( $quote == "" ) { $quote_mark[] = $end - $begin; $quote = "'"; } else if ( $quote == "'" ) { $quote_mark[] = $end - $begin; $quote = ""; } $backslash = 0; $end ++; continue; } else if ( $pattern{$end} == " " ) { if ( $quote != "" ) { $backslash = 0; $end ++; continue; } else { $backslash = 0; $cand = substr( $pattern, $begin, $end-$begin ); for ( $j = 0; $j < strlen ( $cand ); $j ++ ) { if ( in_array ( $j, $quote_mark ) ) continue; $cand1 .= $cand{$j}; } if ( $cand1 ) { eval( "\$cand1 = \"$cand1\";" ); $result[] = $cand1; } $quote_mark = array(); $cand1 = ""; $end ++; $begin = $end; continue; } } } $cand = substr( $pattern, $begin, $end-$begin ); for ( $j = 0; $j < strlen ( $cand ); $j ++ ) { if ( in_array ( $j, $quote_mark ) ) continue; $cand1 .= $cand{$j}; } eval( "\$cand1 = \"$cand1\";" ); if ( $cand1 ) $result[] = $cand1; return $result; } /* Gets options from the command line argument list */ ?>