]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
DMon:Added billboard, mbs and cbmnet modules. Avail. now via start page
authorManuel Penschuck <manuel.penschuck@stud.uni-frankfurt.de>
Sun, 2 Nov 2014 11:50:31 +0000 (12:50 +0100)
committerManuel Penschuck <manuel.penschuck@stud.uni-frankfurt.de>
Sun, 2 Nov 2014 11:50:31 +0000 (12:50 +0100)
dmon/scripts/dmon_billboard.pl [new file with mode: 0755]
dmon/scripts/dmon_cbmnetdata.pl [new file with mode: 0755]
dmon/scripts/dmon_cbmnetlink.pl [new file with mode: 0755]
dmon/scripts/dmon_cbmnetsync.pl [new file with mode: 0755]
dmon/scripts/dmon_mbs.pl [new file with mode: 0755]
web/htdocs/index.pl

diff --git a/dmon/scripts/dmon_billboard.pl b/dmon/scripts/dmon_billboard.pl
new file mode 100755 (executable)
index 0000000..b9d9e1f
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use POSIX qw(strftime);
+use FileHandle;
+use lib "./code";
+use lib "../tools";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep gettimeofday tv_interval);
+use Dmon;
+use HPlot;
+use Data::Dumper;
+
+my %config = Dmon::StartUp();
+my $t0;
+
+while(1) {
+  my $title = "Billboard";
+  my $longtext='';
+  my $value='';
+  my $status = Dmon::OK;
+
+  my $regs = trb_registertime_read_mem($config{BillboardAddress},0xb000, 0, 5);
+  
+  if(defined $regs->{$config{BillboardAddress}}) {
+    my $rates = Dmon::MakeRate(0,32,0,$regs);
+    if (defined($rates->{$config{BillboardAddress}}{rate}) && $t0) {
+      $elapsed = tv_interval ( $t0, [gettimeofday] );
+      my $commitSize = $rates->{$config{BillboardAddress}}{value}[0];
+      my $frameRate = $rates->{$config{BillboardAddress}}{rate}[2] / $elapsed;
+      my $commitRate = $rates->{$config{BillboardAddress}}{rate}[4] / $elapsed;
+      $value = sprintf("%.1f cmt/s", $commitRate);
+      $longtext = sprintf "Commits: %d/s (size: %d b), Frames: %d/s", $commitRate, $commitSize*4, $frameRate;
+      if ($commitRate == 0) {
+        $status = Dmon::ERROR;
+      } elsif ($frameRate < $commitRate || !$commitSize) {
+        $status = Dmon::WARN;
+      }
+    }
+  } else {
+    $status = Dmon::FATAL;
+    $value = "no endpoint";
+    $longtext = "Endpoint not reached";
+  }
+  
+  $t0 = [gettimeofday];
+  Dmon::WriteQALog($config{flog},"billboard",6,$status,$title,$value,$longtext) if ($longtext);
+  usleep(5e6);
+}
+
diff --git a/dmon/scripts/dmon_cbmnetdata.pl b/dmon/scripts/dmon_cbmnetdata.pl
new file mode 100755 (executable)
index 0000000..5ba5cee
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use POSIX qw(strftime);
+use FileHandle;
+use lib "./code";
+use lib "../tools";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use HPlot;
+use Dmon;
+
+HPlot::PlotInit({
+  name    => "CBMNetLossRate",
+  file    => Dmon::DMONDIR."CBMNetLossRate",
+  entries => 600,
+  type    => HPlot::TYPE_HISTORY,
+  output  => HPlot::OUT_PNG,
+  titles  => ["CBMNet Loss Rate"],
+  xlabel  => "Time [s]",
+  ylabel  => "RDO events lost / processed [%]",
+  sizex   => 750,
+  sizey   => 270,
+  ymin    => -1,
+  ymax    => 101,
+  xscale  => 5,
+  nokey   => 1,
+  buffer  => 1
+  });
+
+my $str = Dmon::MakeTitle(10,6,"CBMNetLossRate",0);
+   $str .= qq@<img src="%ADDPNG CBMNetLossRate.png%" type="image/png">@;
+   $str .= Dmon::MakeFooter();
+Dmon::WriteFile("CBMNetLossRate",$str);
+
+my %config = Dmon::StartUp();
+
+my $title    = "CNet Readout";
+
+while(1) {
+  my $regs = trb_registertime_read_mem($config{CtsAddress},0xa806, 0, 4);
+  my $longtext = 0;
+  my $status = Dmon::OK;
+  my $value = "";
+  my $dlmCnt = -1;
+  
+  if( defined $regs->{$config{CtsAddress}}) {
+    my $rates = Dmon::MakeRate(0,31,1,$regs);
+    if (defined $rates->{$config{CtsAddress}}) {
+      my $rateEventsSend = $rates->{$config{CtsAddress}}{rate}[0];
+      my $rateEventsAbrt = $rates->{$config{CtsAddress}}{rate}[2];
+      my $percentAbrt = $rateEventsAbrt ? 100.* $rateEventsAbrt / ($rateEventsSend+$rateEventsAbrt) : 0;
+      my $rateDataKb = $rates->{$config{CtsAddress}}{rate}[3] * 0.002;
+      
+      $value = sprintf "%d kb/s", ($rateDataKb+0.5);
+      $longtext = sprintf "Data rate: %d kb/s, Events send: %d, lost: %d/s (% 3.1f %%)", $rateDataKb, $rateEventsSend, $rateEventsAbrt, $percentAbrt;
+      HPlot::PlotAdd('CBMNetLossRate',$percentAbrt,0);
+
+      if ($percentAbrt > 2 ) {
+        $status = Dmon::ERROR;
+      } elsif ($percentAbrt > 0.5 || $rateDataKb < 1e-6) {
+        $status = Dmon::WARN;
+      }
+    }
+  } else {
+    $status = Dmon::FATAL;
+    $value = "no endpoint";
+    $longtext = "Endpoint not reached";
+  }
+  
+  if ($longtext) {
+    # we've something to output .. so do it ;)
+    Dmon::WriteQALog($config{flog},"cbmnetdata",2,$status,$title,$value,$longtext,'2-CBMNetLossRate');
+    HPlot::PlotDraw('CBMNetLossRate');
+  }
+  usleep(8e5);
+}
+
diff --git a/dmon/scripts/dmon_cbmnetlink.pl b/dmon/scripts/dmon_cbmnetlink.pl
new file mode 100755 (executable)
index 0000000..1782fb6
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use POSIX qw(strftime);
+use FileHandle;
+use lib "./code";
+use lib "../tools";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use Dmon;
+
+my %config = Dmon::StartUp();
+
+my $title    = "CNet Link";
+
+while(1) {
+  my $regs = trb_registertime_read_mem($config{CtsAddress},0xa900, 0, 13);
+  my $longtext;
+  my $status = Dmon::OK;
+  my $value = "";
+  my $dlmCnt = -1;
+  
+  if( defined $regs->{$config{CtsAddress}}) {
+    my $rates = Dmon::MakeRate(0,16,1,$regs);
+    if (defined $rates->{$config{CtsAddress}}{rate}) {
+      my $linkActive    = $regs->{$config{CtsAddress}}{value}[0] & 0x20;
+      my $resetRate     = $rates->{$config{CtsAddress}}{rate}[0xc];
+      
+      $value = sprintf("%d rst/s", $resetRate + 0.5);
+      $longtext = sprintf "Link active: %s, Reset: %.1%/s", ($linkActive ? "y":"n"), $resetRate;
+      
+      if (!$linkActive || $resetRate >= 2) {
+        $status = Dmon::ERROR;
+      } elsif ($resetRate > 0) {
+        $status = Dmon::WARN;
+      }
+    }
+  } else {
+    $status = Dmon::FATAL;
+    $value = "no endpoint";
+    $longtext = "Endpoint not reached";
+  }
+  
+  Dmon::WriteQALog($config{flog},"cbmnetlink",2,$status,$title,$value,$longtext) if ($longtext);
+  usleep(8e5);
+}
+
diff --git a/dmon/scripts/dmon_cbmnetsync.pl b/dmon/scripts/dmon_cbmnetsync.pl
new file mode 100755 (executable)
index 0000000..ce85610
--- /dev/null
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use POSIX qw(strftime);
+use FileHandle;
+use lib "./code";
+use lib "../tools";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use Dmon;
+
+my %config = Dmon::StartUp();
+
+my $title    = "CNet Sync.";
+
+while(1) {
+  my $regs = trb_register_read_mem($config{CtsAddress},0xa900, 0, 13);
+  my $longtext;
+  my $status = Dmon::OK;
+  my $value = "";
+  my $dlmCnt = -1;
+  
+  if( defined $regs->{$config{CtsAddress}}) {
+    my $linkActive    = $regs->{$config{CtsAddress}}[0] & 0x20;
+    my $pulserFreqKHz = 125e3 / $regs->{$config{CtsAddress}}[1];
+    $dlmCnt = $linkActive ? $regs->{$config{CtsAddress}}[0xa] : -1;
+    
+    $value = "$dlmCnt DLMs";
+    $longtext = sprintf "DLMs: %s, Pulser: %d KHz", $dlmCnt, $pulserFreqKHz;
+    
+    if (!$linkActive) {
+      $longtext = "CBMNet link inactive";
+      $value = "no link";
+      $status = Dmon::FATAL;
+    } elsif (!$dlmCnt) {
+      $status = Dmon::ERROR;
+    }
+      
+  } else {
+    $status = Dmon::FATAL;
+    $value = "no endpoint";
+    $longtext = "Endpoint not reached";
+  }
+  
+  Dmon::WriteQALog($config{flog},"cbmnetsync",2,$status,$title,$value,$longtext);
+  usleep(1e6);
+}
+
diff --git a/dmon/scripts/dmon_mbs.pl b/dmon/scripts/dmon_mbs.pl
new file mode 100755 (executable)
index 0000000..73ff2c8
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/perl -w
+
+use warnings;
+use POSIX qw(strftime);
+use FileHandle;
+use lib "./code";
+use lib "../tools";
+use HADES::TrbNet;
+use Time::HiRes qw(usleep);
+use Dmon;
+
+my %config = Dmon::StartUp();
+
+while(1) {
+  my $regs = trb_registertime_read_mem($config{MBSAddress},0xb800, 0, 2);
+  my $rates = Dmon::MakeRate(0,32,1,$regs);
+  
+  if( defined $rates) {
+    my $ctrlReg = $rates->{$config{MBSAddress}}{value}[0];
+    my $mbsRate = sprintf("%d",$rates->{$config{MBSAddress}}{rate}[1]);
+    my $rdoEnable = $ctrlReg & 1;
+    my $errReg = $ctrlReg & 0x80;
+    
+    my $title    = "MBS Recv. Rate";
+    my $longtext = sprintf "%d words/s. Last word: 0x06x", $mbsRate, $ctrlReg & 0xffffff;
+    my $status = Dmon::OK;
+    if ($errReg) {
+      $status = Dmon::ERROR;
+    } elsif (!$rdoEnable) {
+      $longtext = "NO READOUT. $longtext";
+      $status = Dmon::WARN;
+    } elsif ($mbsRate < 1000) {
+      $status = Dmon::WARN;
+    }
+      
+    Dmon::WriteQALog($config{flog},"mbs",5,$status,$title,$mbsRate,$longtext);
+  }
+  
+  usleep(8e5);
+}
+
index bc803b336c810989a3691cdfb655d25430eb3601..af9811c931b79fcb798286dd0b4c0ed348da4237 100755 (executable)
@@ -105,6 +105,7 @@ The main documentation of the network can be found in these documents and locati
 <ul>
 <li><a href="tools/pwr/index.html" title="Currently supported: GW-Instek PSP-405 family, HMP2020 - HMP4040 family">Control for power supplies</a>
 <li><a href="tools/vxi/index.html" title="Tested with Tektronix AFG3000 function generator">Control for devices running the VXI-11 protocol</a>
+<li><a href="dmon/index.pl" title="DMON">DMON DAQ Monitoring</a></li>
 </ul>
 </div>
 </div>