"; $DEBUG = 0; global $pubConn; $commIdStr=$_REQUEST['commIdStr']; $okURL=$_REQUEST['okURL']; $failURL=$_REQUEST['failURL']; //commType 's value $nReadComm = 1; $nChangeComm = 2; $nCreateComm = 3; $nDeleteComm = 4; $nLoadIndexComm = 5; $nReplaceIndexComm=6; //commState's value $nProcFail = 0; $nWaitProc = 1; $nInProc = 2; $nOutProc = 3; $failURL = rawurldecode($failURL); $okURL = rawurldecode($okURL); $pubDb = 'OMC_PUB'; $commTable = 'subscriberComm'; $sysConfTable ='sysConf'; $commNum=$_REQUEST['commNum']; $commType=$_REQUEST['commType']; $lastTimeFinishNumStr=$_REQUEST['lastTimeFinishNumStr']; if($commNum <= 0){ $commArr = explode('-',$commIdStr); $commNum = sizeof($commArr); } $maxOverTime = $commNum * 5 + 10; //根据子系统个数和对每个子系统操作的最大延时(5秒)来决定 $maxWaitTime = $commNum * 2; $maxStopTime = $commNum * 5 + 10; $maxOfCommId = 50000; //设定命令表的最大值 $isFinish = $_REQUEST['isFinish']; $waitTime = $_REQUEST['waitTime']; $stopTime = $_REQUEST['stopTime']; $usedTime = $_REQUEST['usedTime']; if($DEBUG) echo "
if(isFinish != 0 || (waitTime >= maxWaitTime) ||(stopTime > maxStopTime))
"; if($DEBUG) echo "
if($isFinish != 0 || ($waitTime >= $maxWaitTime) ||($stopTime > $maxStopTime))
"; //显示命令执行状态 //----------------------------- $showTime = $usedTime*2; echo "Time:$showTime s
"; $okNum = 0; $failNum = 0; $commNum = 0; $commArr = explode('-',$commIdStr); $thisTImeFinishNumstr=''; $lastTimeFinishNumArr = explode('-',$lastTimeFinishNumStr); for($i=0;$iget command = $commSql"; $commResult = mysqli_query($pubConn,$commSql); if(mysqli_num_rows($commResult) <= 0){ echo "
Can not find this command's info in datebase"; exit(); } $commRows = @mysqli_fetch_array($commResult); $sysTypeNo = $commRows['sysTypeNo']; $sysNo = $commRows['sysNo']; $subSysNo = $commRows['subSysNo']; $dataTypeNo = $commRows['dataTypeNo']; $commType = $commRows['commType']; $paramType = $commRows['paramType']; $objId = $commRows['objId']; $commState = $commRows['commState']; $indexValueList = $commRows['indexValueList']; $fieldNameList = $commRows['fieldNameList']; $remark = $commRows['remark']; //获取该系统类型的snmp头和类型名称 if(!isset($sysTypeName)){ $sysConfSql = "SELECT snmpHead,sysTypeName FROM $sysConfTable WHERE sysTypeNo='$sysTypeNo'"; if($DEBUG) echo "
get conf = $sysConfSql"; $sysConfResult = mysqli_query($pubConn,$sysConfSql); echo mysqli_error($pubConn); $sysConfRows = @mysqli_fetch_array($sysConfResult); $sysTypeName = $sysConfRows['sysTypeName']; $snmpHead = $sysConfRows['snmpHead']; } $sysName = $sysTypeName.'_'.$sysNo.'_'.$subSysNo; //echo "
$sysName 's
"; $objIdStr=$snmpHead.'.'.$objId; //echo "
$objIdStr
"; if($dataTypeNo > 0){ $dataTypeName='Card'; }else{ $dataTypeName='subscriber'; } switch($commType){ case $nReadComm: $showInfo="Read $dataTypeName $indexValueList from $sysName"; break; case $nChangeComm: $showInfo="Change $indexValueList's field[$fieldNameList] in $sysName"; break; case $nCreateComm: $showInfo="Create $dataTypeName $indexValueList to $sysName"; break; case $nDeleteComm: $showInfo="Delete $sysName's $dataTypeName $indexValueList"; break; case $nLoadIndexComm: $showInfo="Load $sysName's $dataTypeName Data "; break; case $nReplaceIndexComm: $showInfo="Replace $dataTypeName Index $indexValueList -> $remark in $sysName"; break; default: echo " Unknown Command Type"; exit(); } if($DEBUG) echo "commState = $commState
"; switch($commState){ case 0: //process failed $failNum++; echo "
$commRows[remark] "; insertLog("$showInfo Failed:$remark"); sleep(1); break; case 1: //wait process $waitTime++; break; case 2: //in process $waitTime = 0; //只要有一个命令的完成数在增长,就认为该组命令在运行,否则认为命令处理超时 if($DEBUG) echo "====> {$commRows[finishNum]} > {$lastTimeFinishNumArr[$i]}"; if($commRows[finishNum] > $lastTimeFinishNumArr[$i]){ $stopTime = 0; }else{ $stopTime++; } if($DEBUG){ echo "commRows[totalNum]=$commRows[totalNum],commRows[finishNum]=$commRows[finishNum]
"; } omcProgressBar($commRows[totalNum],$commRows[finishNum]); $thisTimeFinishNumStr .=$commRows[finishNum].'-'; break; case 3: //process finished $okNum++; omcProgressBar(100,100); insertLog("$showInfo OK"); break; default: echo "Unknown Command State"; exit(); } echo "

"; }//end of for($i=0;$i$commNum =?= $finishNum"; if($commNum == $okNum){ $isFinish = 1; }elseif($failNum > 0 && $okNum > 0&&($failNum+$okNum==$commNum)){ $isFinish = -1; }elseif($commNum == $failNum){ $isFinish = -2; }else{ $isFinish = 0; } //当删除用户时,只要不是"回应超时",都删除OMC数据库的用户 if($commType == $nDeleteComm && $commState != $nWaitProc && $commState != $nInProc){ if($DEBUG) echo"
commType == DeleteComm ($commType == $nDeleteComm)"; if($DEBUG) echo"
remark={$commRows[remark]}"; if($DEBUG) sleep(5); if( $commRows[remark] != "response timeout"){ if(!strstr($commRows[remark],"Can not delete an in used subscriber, please disable first")) $isFinish = 1; } } if($DEBUG) echo"
lastTimeFinishNumStr=$lastTimeFinishNumStr"; if($DEBUG) echo"
thisTimeFinishNumStr=$thisTimeFinishNumStr"; $lastTimeFinishNumStr = $thisTimeFinishNumStr; //刷新返回 //命令处理完毕 //---------------- if(($isFinish != 0) || ($waitTime >= $maxWaitTime) || ($stopTime > $maxStopTime)){ if($commId >= $maxOfCommId){ //初始化命令表 //先删除表 $dropSql = "DROP TABLE $commTable "; mysqli_query($pubConn,$dropSql); //再建一个结构相同的新表 $createSql="CREATE TABLE subscriberComm ( commId smallint(5) unsigned NOT NULL auto_increment, commType tinyint(1) DEFAULT '0' NOT NULL, dataTypeNo tinyint(4) DEFAULT '0' NOT NULL, sysTypeNo smallint(5) unsigned DEFAULT '0' NOT NULL, sysNo smallint(5) unsigned DEFAULT '0' NOT NULL, subSysNo smallint(5) unsigned DEFAULT '0' NOT NULL, indexValueList varchar(255) NOT NULL, fieldNameList text NOT NULL, paramType tinyint(4) DEFAULT '0' NOT NULL, commState tinyint(3) unsigned DEFAULT '0' NOT NULL, totalNum smallint(5) unsigned DEFAULT '0' NOT NULL, finishNum smallint(5) unsigned DEFAULT '0' NOT NULL, sendTime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, bgnTime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, endTime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, remark varchar(200) binary NOT NULL, PRIMARY KEY (commId), KEY sysTypeNo (sysTypeNo), KEY sysNo (sysNo), KEY subSysNo (subSysNo), KEY bufferKey (indexValueList) ) "; mysqli_query($pubConn,$createSql); }else{ //删除命令表的相关命令 $commArr = explode('-',$commIdStr); for($i=0;$ideleteSql = $deleteSql"; mysqli_query($pubConn,$deleteSql); echo mysqli_error($pubConn); } } if($isBatchCreate==1){ // 重定向返回指定页 if($isFinish != 0){ if($isFinish > 0){ echo "Finished!!"; }elseif($isFinish == -1){ echo "Some of them failed!!"; }else{ echo "Failed!!"; } }elseif($usedTime >= $maxOverTime && $stopTime == 1){ echo "Stoped!!"; }else{ //$usedTime >= $maxOverTime echo "Timeout!!"; } echo "
"; echo "

$strBack"; exit(); }else{ // 重定向返回指定页 if($isFinish != 0){ if($isFinish > 0){ echo "Finished!!"; if($commType == $nLoadIndexComm){ sleep(8);//等8秒,这样数据库插入才能完全完成 } if($DEBUG) echo "
okURL=$okURL"; if($DEBUG) exit(); echo " "; }elseif($isFinish == -1){ echo "Failed in some system!!"; if($DEBUG) exit(); echo " "; }else{ echo "Failed!!"; if($DEBUG) echo "
failURL=$failURL"; if($DEBUG) exit(); echo " "; } }elseif($usedTime >= $maxOverTime && $stopTime == 1){ echo "Stoped!!"; if($DEBUG) exit(); echo " "; }else{ //$usedTime >= $maxOverTime echo "Timeout!!"; if($DEBUG) exit(); echo " "; } } exit(); }//end of if($isFinish....) //-------------- $usedTime++; //总时间 $failURL= rawurlencode($failURL); $okURL = rawurlencode($okURL); //保留变量值,传到下次刷新 $keepStr= "usedTime=$usedTime&waitTime=$waitTime&isFinish=$isFinish&stopTime=$stopTime"; $keepStr.="&failURL=$failURL&okURL=$okURL&commIdStr=$commIdStr&commNum=$commNum&isBatchCreate=$isBatchCreate"; $keepStr.="&lastTimeFinishNumStr=$lastTimeFinishNumStr&commType=$commType"; $keepStr.="&isLoadIndex=$isLoadIndex"; if($DEBUG) echo "
keepStr=$keepStr"; if ( 1==$isLoadIndex ) { require("commDown.php"); } adjust_content_tail("down"); sleep(5); ?>