SI3000 Статистика Абонентские порты мой Опыт
Добавлено: 10 авг 2018, 11:35
Всем привет
Может пригодиться тем кто обслуживает SI3000
На станции SI3000 есть абоненты , которые подключены по классической телефонной линии.
На станционном сервере формируются файлы статистики, в них пишется вся суточная диагностика.
Полезная вещь...
Анализ статистики аварийных сообщений по абонентским портам,
может помочь поберечь абонентские порты и платы.
Эти файлы скидываю на другой сервер, там и обрабатываю.
Дело в том что в этих файлах статистики не пишется номер абонента,
есть только номер порта.
Анализируя статистику, гораздо удобнее оперировать номером телефона,
на кроссах(может не на всех) быстрее начинают соображать.
Вот и был написан скрипт, который анализирует файлы статистики и формирует
другой файл более адаптированный к местным реалиям .
Скрипт далёк от совершенства
нашу емкость - 20000 т.абн обрабатывает ..4.. минуты
в 6 утра торопиться некуда
###
Необходимо всегда подкладывать файл с актуальными данными (порт - абонент) файл AccessF.csv
И данные для этого файла беру из другого Java - приложения.
......
В станционную базу доступа нет, вот туда не очень то хочется лезть.
Да, и ТехПдд может не дать такой доступ.
В документации по openMN пока не нашёл ,
как получить из станции запросом SOAP актуальную информацию,
зная только номер порта.
А как было бы удобно и ненужно было бы огород городить.
Конечно есть разные задумки....
Может пригодиться тем кто обслуживает 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);
?>