SI3000 Статистика Абонентские порты мой Опыт

Скрипты PHP, PERL и т.п. помогающие управлять сетью

SI3000 Статистика Абонентские порты мой Опыт

Сообщение dimondack » 10 авг 2018, 11:35

Всем привет
Может пригодиться тем кто обслуживает SI3000

На станции SI3000 есть абоненты , которые подключены по классической телефонной линии.

На станционном сервере формируются файлы статистики, в них пишется вся суточная диагностика.
Полезная вещь...

Анализ статистики аварийных сообщений по абонентским портам,
может помочь поберечь абонентские порты и платы.

Эти файлы скидываю на другой сервер, там и обрабатываю.
Дело в том что в этих файлах статистики не пишется номер абонента,
есть только номер порта.

Анализируя статистику, гораздо удобнее оперировать номером телефона,
:D на кроссах(может не на всех) быстрее начинают соображать.

Вот и был написан скрипт, который анализирует файлы статистики и формирует
другой файл более адаптированный к местным реалиям :D :D .



Скрипт далёк от совершенства
нашу емкость - 20000 т.абн обрабатывает ..4.. минуты

в 6 утра :D :D торопиться некуда

###
Необходимо всегда подкладывать файл с актуальными данными (порт - абонент) файл AccessF.csv
И данные для этого файла беру из другого Java - приложения.
......


В станционную базу доступа нет, :D :D вот туда не очень то хочется лезть.
Да, и ТехПдд может не дать такой доступ.


В документации по 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);
?>
Вложения
test.zip
файлы
(447.22 Кб) Скачиваний: 3
Нас определяет то, что мы делаем.
Аватара пользователя
dimondack
новичок
 
Сообщения: 83
Зарегистрирован: 21 янв 2015, 13:00

Вернуться в Программинг и сети

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2