Может пригодиться тем кто обслуживает SI3000
На станции SI3000 есть абоненты , которые подключены по классической телефонной линии.
На станционном сервере формируются файлы статистики, в них пишется вся суточная диагностика.
Полезная вещь...
Анализ статистики аварийных сообщений по абонентским портам,
может помочь поберечь абонентские порты и платы.
Эти файлы скидываю на другой сервер, там и обрабатываю.
Дело в том что в этих файлах статистики не пишется номер абонента,
есть только номер порта.
Анализируя статистику, гораздо удобнее оперировать номером телефона,
 на кроссах(может не на всех) быстрее начинают соображать.
 на кроссах(может не на всех) быстрее начинают соображать.Вот и был написан скрипт, который анализирует файлы статистики и формирует
другой файл более адаптированный к местным реалиям
 
   .
 .  Скрипт далёк от совершенства
нашу емкость - 20000 т.абн обрабатывает ..4.. минуты
в 6 утра
 
   торопиться некуда
  торопиться некуда###
Необходимо всегда подкладывать файл с актуальными данными (порт - абонент) файл AccessF.csv
И данные для этого файла беру из другого Java - приложения.
......
В станционную базу доступа нет,
 
   вот туда  не очень то  хочется лезть.
  вот туда  не очень то  хочется лезть.Да, и ТехПдд может не дать такой доступ.
В документации по openMN пока не нашёл ,
как получить из станции запросом SOAP актуальную информацию,
зная только номер порта.
А как было бы удобно и ненужно было бы огород городить.
Конечно есть разные задумки....
- Код: Выделить всё
- <?php
 $dir_la = './';
 $nim = "";
 $kosmos = "";
 $files_la = scandir($dir_la);
 //print_r($files_la);
 $gd = date("YmdHms");
 $tl = date("Y-m-d H:m:s");
 $log = fopen("la.log", "a+");
 $fl = fwrite($log,$tl." "."Begin script\n");
 //mkdir("/terra/STAT_SI3000/FULL".$gd);
 $full = fopen($gd.".xls", "w+");
 //$fa62 = fopen("/terra/STAT_SI3000/ATC65.xls", "w+");
 //$fa63 = fopen("/terra/STAT_SI3000/ATC65.xls", "w+");
 $fa65 = fopen("ATC65.xls", "w+");
 $fports = fopen("AccessF.csv", "r");
 //if($fports){}
 //while(($s = fgets($fports, 1024)) !=false ){
 // Begining to collect information about ports and DN
 $pl = 0;
 $aca[0] =0;
 $ana[0] =0;
 $j=0;
 $s = fgets($fports, 1024);
 while(!feof($fports)){
 $s = fgets($fports, 1024);
 if(strlen($s)<3){break;}
 //echo $s." "."*****\n";
 $acces[$pl] = $s;
 $a = explode(";",$s);
 $j = explode(":",$a[2]);
 $temp_str =$j[1];
 $j[1] = substr($j[1],0,strlen($j[1])-6);
 $aca[$pl] = trim($j[1])."+".trim($j[3]); // собираем инф: регион*плата*место*порт
 $ana[$pl] = $a[3]; //собираем инф вида: код города-номер абонента
 $pl=$pl+1;
 //echo $pl." ".$ana[$pl-1]."\n";
 //echo $pl." ".$aca[$pl-1]."\n";
 }
 // End collect
 //$fw1=fwrite($fa62,"Object\t"."Data\t"."Time\t"."\t"."TroubleShooting\t"."\t"."\t"."\t"."\t"."\t"."\t"."\n");
 //$fw1=fwrite($fa63,"Object\t"."Data\t"."Time\t"."\t"."TroubleShooting\t"."\t"."\t"."\t"."\t"."\t"."\t"."\n");
 $fw1=fwrite($fa65,"Object\t"."Data\t"."Time\t"."\t"."TroubleShooting\t"."\t"."\t"."\t"."\t"."\t"."\t"."\n");
 $ffl=fwrite($full,"Object\t"."Data\t"."Time\t"."\t"."TroubleShooting\t"."\t"."\t"."\t"."\t"."\t"."\t"."\n");
 ///////Begin HARD
 chdir($dir_la);
 foreach($files_la as $f)
 {
 if($f == null){continue;}
 $sp = stripos($f,"MsgErr.dat");
 if(!$sp){continue;}
 //echo $s."\n";
 $fdat = fopen("$f", "r");
 //$temp_name = explode(".",$f);
 //$name = $temp_name[0];
 $name =substr($f,0,strlen($s)-10);
 //echo $name."\n";
 //Begin reading dat file
 $ssts ="";
 while(!feof($fdat)){
 $s = fgets($fdat, 2048);
 if(strlen($s)<3){break;}
 //$old_date1 = stripos($s,"2000-",0);
 //$old_date2 = stripos($s,"2016-",0);
 //if($old_date1 === true and $old_date2 === true){continue;}
 $ssts = "";
 $kss = "";
 $err = explode(" ",$s);
 $ssts = $err[0]."\t".$err[1]."\t";
 if(strlen($err[3]) == 0 ){continue;}
 $seer = trim($err[3]);
 switch ($seer)
 {
 case "1600360": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Groundkey high detected"."\t"; break;
 case "1600370": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Groundkey detected"."\t"; break;
 case "1600380": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Link parked"."\t"; break;
 case "1600510": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Subscriber line parameters degraded" . "\t"; break;
 case "1600520": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Subscriber terminal equipment not connected" . "\t"; break;
 case "1600210": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Maintenance local blocking"."\t"; break;
 case "1100110": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Overheating of module"."\t"; break;
 case "1100120": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Critical overheating of module" . "\t"; break;
 case "1100150": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t". "Overheating detected"."\t"; break;
 case "2500010": $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."System overload - analog periphery" . "\t"; break;
 default: $ssts = $ssts."\t".$err[3].$err[4]."\t".$err[5]."\t"."Go to Look F_TROUBLESHOOTING_GUIDE.PDF"."\t"; break;
 }
 //echo $ssts."\n";
 /////////////////////////////////
 ///kss
 foreach($err as $c ){
 if($c == ""){continue;}
 //echo $c."\n";
 $t_pos = stripos($c,"line=");
 if($t_pos === 0){
 //echo $c." "."****\n";
 $kss = substr($c,5,strlen($c)-5);
 //echo $kss."\n";
 //$a = readline();
 $kss = trim($kss); //наконец то вытащил из строки номер порта
 //echo $kss."\n";
 $ssts = $ssts."line=\t".$kss."\t"; // и подготовил строку,
 // к которой буду пристёгивать номер абонента
 //echo $ssts."\n";
 }
 }///kss
 /////////////////////////////////
 /////////////////////////////////// Все в верхний регистр
 ////////////////////////////////// Весь сыр-бор из за названий плат
 $t_nim = explode("-",$name);
 //echo $name."\n";
 //echo count($t_nim)."\n";
 if(count($t_nim) == 3){$nim = strtoupper($t_nim[0])."-".strtoupper($t_nim[1])."-".$t_nim[2];}
 else
 {
 if(count($t_nim) == 4){$nim = strtoupper($t_nim[0])."-".strtoupper($t_nim[1])."-".$t_nim[2]."-".$t_nim[3];}
 }
 ////////////////////////////////////////////
 //debug
 //for($u=0;$u<$pl;$u++){
 //echo $ana[$u]." ".$aca[$u]."\n";
 //echo $aca[$u]."\n";
 //}
 /////////////Select access begin Мазохизм
 $nam = $nim."+".$kss;
 //echo $nam."\n";
 for($u=0;$u<$pl;$u++)//
 {
 if($kss === "") {continue;}// ведь номера порта может и не быть, если номер не прописан на порту
 //echo $nam." ".$aca[$u]."\n";
 if($nam === $aca[$u])
 {
 $kosmos = $ana[$u];// достаём номер абонента из массива
 //echo $ana[$u];
 break;
 }
 }
 ////////////select access end
 //////////////////////////////////////////****Ещё немного мазохизма
 if ($kss != ""){$t_not = strpos($ssts,"not");
 // if (!ssts.Contains("not"))
 if($t_pos === false ){
 $ssts = $ssts."\t"."\t".$kosmos."\t";
 }
 else { $ssts = $ssts."\t".$kosmos."\t"; }
 }
 //////////// Наконец пристегнул номер абонента к строке с портом
 /////////////////////////////////////////**************
 ///////////////////
 /////////////////// Пишем строки в файлы: 1 общий
 ////////////////// и по региону
 $tfull=fwrite($full,$nim."\t".$ssts."\n");
 $t_pos = stripos($name,"rgn-city-65");
 if($t_pos === 0){$t65=fwrite($fa65,$nim."\t".$ssts."\n");}
 //////
 }//End Reading dat file
 fclose($fdat);
 }///End HARD
 //if(!){ echo "Error: fgets\n"; }
 //fclose($fports);
 //fclose($fa62);
 //fclose($fa63);
 fclose($fa65);
 fclose($fports);
 $etl = date("Y-m-d H:m:s");
 $fl = fwrite($log,$etl." "."End script\n" );
 fclose($log);
 fclose($full);
 ?>





 
 