51学通信技术论坛

 找回密码
 立即注册
搜索
查看: 4685|回复: 2
打印 上一主题 下一主题

GGSN(Er) pdc_kpi功能实现统计APN si/rg流量的算法   [复制链接]

Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

版主

跳转到指定楼层
楼主
发表于 2013-3-18 16:25:00 |只看该作者 |倒序浏览
一键分享 一键分享
本帖最后由 gprssanling 于 2013-3-29 09:57 编辑

GGSN(Er) pdc_kpi功能实现统计APN si/rg流量的算法                                                                        --E家的GGSN pdc_kpi工具你用过嘛?


http://user.qzone.qq.com/345010109#!app=2&via=QZ.HashRefresh&pos=1347457574日志《原创:SGSN/GGSN维护、统计工具》
文中提到GGSN pdc_kpi功能,这里重点讲一下实现统计APN si/rg流量的算法。
1.pdc_kpi程序中添加1个标量保存DL.log的值,原有的标量$pm_tab保存UL.log的值;增添2个标量分别保存DL.log/UL.log中的counters。
2.get_pm_values程序中添加return /@counters,保存counters的数组。
sub get_pm_values {
  my($pm_log)=@_;
  my(@counter_values,@head,%pm_val);
  my($counter,@counters);
  open(PM_LOG,"<$pm_log") or logg('fatal_error',"Failed to open file $pm_log");
  while (<PM_LOG>) {
    chomp;
    unless ( m/^Time/ or m/^[\s]*[0-9]{4,4}\-[0-9]{2,2}\-[0-9]{2,2}/ ) {
      next;
    }
    if (m/^Time/) {
      @counters= split(/\|/,$_);
    } else {
      @counter_values=split('\|');
      if ($#counter_values != $#counters) {
    #sub_print("Counters != counter values...\n");next;
      }
      my $n=0;
      foreach $counter (@counters) {
    push @{$pm_val{$counter}}, $counter_values[$n];
    $n++;
      }
    }
  }
  close(PM_LOG);
  return \%pm_val,\@counters;
}
3.calc_sau_sds程序中传递进来的参数需要增加\@counters。计算各counter的值算法修改为:
$iend=$#$pc;        #pc为接收\@counters的标量名称
for($i=0;$i<$iend;$i++){
     $sau_sds[$i]  = sprintf("%.2f",get_value(@$pc[$i+1],$num,$tab,"diff")*8/1000000);     #get_value第一个参数为counter的名称,得出值后转化单位为Mb,保留2位小数位有效数字。
    }
4.最后是修改打印输出print_sau_sds程序,这个比较麻烦,修改变动要大的多,不过核心算法是以上三步。以下是修改添加:
  $id=$#$pcdl;$iu=$#$pcul;
  ($info_2) =uc($gnode) . " " . $apn . " " . $tlog . "(" . sprintf("%s",$id) . "," . sprintf("%s",$iu) . ")";
  my $width1=length($date)+length($hour)+4;
  $width1+=($id+$iu)*12;
  $width = $width1 if($width1 > $width);
  my $head_format = "\n" . $sign2 x($width) .  "\n";
  my $info_space= int(($width - length($info_1) - length($info_2))/2);
  $head_format .= "$info_1" . ' ' x $info_space . "$info_2" . ' ' x $info_space . "\n\n";
  $head_format .= sprintf "%-5s  %-5s  ",$date,$hour ;
  for($i=1;$i<=$id or $i<=$iu;$i++){                   #打印输出counters名称
  $head_format .= sprintf("%-10d  %-10d  ",@$pcdl[$i],@$pcdl[$i]);}  
  $head_format .= "\n";
  $head_format .= $sign2 x($width) .  "\n";
  print $head_format;

  for ($i=0;$i<=$#{$saudl}; $i++) {
    $line=$$saudl[$i];         #打点DL.log的counters和值,准备输出
    (@values)=();
    for ($j=0;$j<=($id+1); $j++) {
      if (defined($line->[$j])) {
    $ent=$line->[$j];
      } else {
    $ent="-";
      }
      $values[$j]=$ent;         
    }
    $line=$$sauul[$i];         #打点UL.log的counters和值,准备输出
    for ($j+=3;$j<=($id+$iu+4);$j++) {
      if (defined($line->[$j-$id-3])) {
    $ent=$line->[$j-$id-3];
      } else {
    $ent="-";
      }
      $values[$j]=$ent;        
    }
    printf("%-5s  %-5s  ",$values[0],$values[1]);
for($n=1;$n<=($id);$n++){                      #打印输出值
    printf "%-10.2f  %-10.2f  ",$values[$n+1],$values[$n+4+$id] ; }
    print "\n";
    print $sign x $width . "\n";
  }


Rank: 8

义 超级之星 勤 论坛核心会员

沙发
发表于 2013-3-18 20:01:09 |只看该作者
这....GGSN有pdc_kpi ? 晕了... 我都没见过啊

使用道具 举报

Rank: 8

VIP 论坛核心会员 特殊贡献奖

板凳
发表于 2013-3-18 21:47:54 |只看该作者
俺就特佩服那些会写脚本的

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

站长邮箱|Archiver|51学通信 ( 粤ICP备11025688 )

GMT+8, 2024-5-27 23:32 , Processed in 0.037962 second(s), 13 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部