From: Adrian Weber Date: Tue, 18 Dec 2018 13:59:19 +0000 (+0100) Subject: new DMON files X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=07729f26289485db75f2c718df83824005ba0378;p=daqtools.git new DMON files --- diff --git a/dmon/code/getjson.cgi b/dmon/code/getjson.cgi new file mode 100755 index 0000000..eb0cdde --- /dev/null +++ b/dmon/code/getjson.cgi @@ -0,0 +1,28 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Data::Dumper; +use File::Copy; +use Dmon; + +my @args = split('-',$ENV{'QUERY_STRING'}); + + + + +if($args[0] eq 'custom') { + + my @query = split('-',$ENV{'QUERY_STRING'},2); + + system("QUERY_STRING=$query[1] /home/hadaq/trbsoft/daqtools/web/htdocs/tools/daq2json.pl"); + + + } +else { + print "Cache-Control: no-cache, must-revalidate, max-age=1\r\n"; + print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\r\n"; + print "Content-type: application/json\r\n\r\n"; + unless($args[0] && $args[0] =~ m/\w+/) {exit;} + system ("cat ".Dmon::DMONDIR.$args[0].".json") if -e Dmon::DMONDIR.$args[0].".json"; + } + diff --git a/dmon/scripts/dmon_HMP4040.pl b/dmon/scripts/dmon_HMP4040.pl new file mode 100755 index 0000000..7042241 --- /dev/null +++ b/dmon/scripts/dmon_HMP4040.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl -w +use FileHandle; +use Data::Dumper; +use POSIX qw(strftime); +use Dmon; +use JSON::XS; +use HPlot; + +my $fqa = Dmon::OpenQAFile(); + +while(1) { +# my $fh; + my $data; + open(FH, ") { + $data = decode_json $_; + } + + my $Out3On=""; + my $Out4On=""; + my @HMP; + + if (defined ($data)){ + foreach my $b (keys $data) { + #print $b." ".$data->{$b}."\n"; + my $chnl; + if ($b =~ /INST1/) {$chnl = 1;} + if ($b =~ /INST2/) {$chnl = 2;} + if ($b =~ /INST3/) {$chnl = 3;} + if ($b =~ /INST4/) {$chnl = 4;} + if (defined $chnl) { + if ($b =~ /OUTP:STAT?/) { + $HMP->{$chnl}->{Stat} = $data->{$b}; + if ($data->{$b} == 1) { + $HMP->{$chnl}->{StatStr} = "ON"; + } else { + $HMP->{$chnl}->{StatStr} = "OFF"; + } + } elsif ($b =~ /MEAS:CURR?/) { + $HMP->{$chnl}->{curr} = $data->{$b}; + } elsif ($b =~ /MEAS:VOLT?/) { + $HMP->{$chnl}->{volt} = $data->{$b}; + } + #if ($b eq "INST3_OUTP:STAT?") {if ($data->{$b}==1) {$Out3On = "ON";} else {$Out3On = "OFF";} } + #if ($b eq "INST4_OUTP:STAT?") { if ($data->{$b}==1) {$Out4On = "ON";} else {$Out4On = "OFF";} } + } + } + } + my $qastate = Dmon::ERROR; + $qastate = Dmon::WARN if (( ($HMP->{3}->{StatStr} eq "ON") && ($HMP->{4}->{StatStr} eq "OFF"))|| ( ($HMP->{3}->{StatStr} eq "OFF") && ($HMP->{4}->{StatStr} eq "ON"))); + $qastate = Dmon::OK if (($HMP->{3}->{StatStr} eq "ON") && ($HMP->{4}->{StatStr} eq "ON")); + + my $qalong =""; + $qalong .= ""; + } + $qalong .= ""; + for (my $i=1;$i<5;$i++){ + $qalong .= sprintf("",($HMP->{$i}->{volt})); + } + $qalong .= ""; + for (my $i=1;$i<5;$i++){ + $qalong .= sprintf("",($HMP->{$i}->{curr})); + } + $qalong .="
"; + for (my $i=1;$i<5;$i++){ + $qalong .= "|Ch ".$i." : ". ($HMP->{$i}->{StatStr}) ."
Voltage [V]| %2.4f
Current [A]| %2.4f
"; + #my $str = sprintf("%i - %i", $min, $max); + Dmon::WriteQALog($fqa,"HMP4040", 40, $qastate, "HMP4040", $HMP->{3}->{StatStr}." | ".$HMP->{4}->{StatStr},$qalong); + + sleep(5); +} diff --git a/dmon/scripts/dmon_temperature_mrich.pl b/dmon/scripts/dmon_temperature_mrich.pl new file mode 100755 index 0000000..24bfbb8 --- /dev/null +++ b/dmon/scripts/dmon_temperature_mrich.pl @@ -0,0 +1,88 @@ +#!/usr/bin/perl -w + +use warnings; +use strict; +use Time::HiRes qw( gettimeofday usleep time ); +use FileHandle; +use Data::Dumper; +use POSIX qw/floor ceil/; +use List::Util qw'max min'; +# use Perl2Epics; +use Encode qw(encode from_to); +use JSON::XS; + +use Dmon; + +my $fqa = Dmon::OpenQAFile(); + +use HADES::TrbNet; + +my %config = Dmon::StartUp(); + +my @str; + +my $store = {}; +my $laststore = {}; +my $values = {}; +my $color = {}; +my $raw = {}; +my $val; +my $mailerrstatecnt = 0; +my ($max,$min,$avg,$sum,$count); + +trb_init_ports() or die trb_strerror(); + + +while (1) { + my $data; + my $rich_temp1 = trb_register_read(0xfe51, 0x0) or sleep 5 and next; + my $rich_temp2 = trb_register_read(0xfe52, 0x0) or sleep 5 and next; + my $rich_temp3 = trb_register_read($config{CtsAddress}, 0x0) or sleep 5 and next; + my %rich_temp = (%{$rich_temp1},%{$rich_temp2},%{$rich_temp3}); + #print Dumper $rich_temp; + $min = 1000; + $max = 0; + $sum = 0; + $count = 0; + my $cts_temp = 0; + foreach my $b (keys %rich_temp) { + if ($b == $config{CtsAddress}){ + $cts_temp = ($rich_temp{$b}>>20)/16; + next; + } + $count ++; + my $t = ($rich_temp{$b}>>20)/16; + $min = $t if $t < $min; + $max = $t if $t > $max; + $sum += $t; + my $s = sprintf("0x%04x",$b); + $data->{$s}=$t; + } + $avg = $sum / $count; + $data->{max} = $max; + $data->{min} = $min; + $data->{symbol} = " °C"; + $data->{title} = "RICH Temperature"; + + $data->{updatetime} = Dmon::getTimeString(); + + + + my $qastate = Dmon::GetQAState('below', $max, (32.0,33.0,35.0)); + my $str = sprintf("%i - %i", $min, $max); + Dmon::WriteQALog($fqa,"temperature_mrich", 40, $qastate, "Temperature", $str."°C", + "Min/Max temperature on DiRich " . $str."°C"); + + my $qastate2 = Dmon::GetQAState('below', $cts_temp, (55.0,60.0,65.0)); + my $str2 = sprintf("%i", $cts_temp, $max); + Dmon::WriteQALog($fqa,"cts_temp", 40, $qastate2, "CTS Temp", $str2."°C", + "Temperature on CTS Board: " . $str2. "°C"); + + + my $fh; + open($fh, ">", Dmon::DMONDIR."/richTemperature.json"); + print $fh encode_json($data); + close $fh; + + sleep 10; +} diff --git a/dmon/scripts/dmon_timeouts.pl b/dmon/scripts/dmon_timeouts.pl new file mode 100755 index 0000000..3352cfc --- /dev/null +++ b/dmon/scripts/dmon_timeouts.pl @@ -0,0 +1,69 @@ +#!/usr/bin/perl -w +use warnings; +use strict; +use Data::Dumper; +use Dmon; +use HADES::TrbNet; + +trb_init_ports() or die trb_strerror(); +#Dmon::TraceDBLoad(); + + + +my $fqa = Dmon::OpenQAFile(); +my $logcnt = 0; + +while (1) { + my $msg = ""; + my $msg2 = ""; + my $cnt = 0; + my $cnt2 = 0; + my $boardlist1 = ""; + my $boardlist2 = ""; + + my $rh_hubs = trb_register_read(0xfffe, 0x8b) + or sleep 5 and next; + + foreach my $board (sort {$a <=> $b} keys %$rh_hubs) { + if (($rh_hubs->{$board} & 0xffff) != 0x0000) { + #$msg .= ", " if $msg ne ""; + #$msg .= sprintf("%04x-%04x (",$board,$rh_hubs->{$board} & 0xffff); + #foreach my $i (1..8) { + # if ($rh_hubs->{$board} & (1<<$i)) { + # $msg .= sprintf("0x%04x ",Hmon::TraceDBGet($board,$i)); + # $boardlist1 .= sprintf("%04X, ",Hmon::TraceDBGet($board,$i)); + # } + # } + #$msg .= ")"; + $cnt++; + } + if ((($rh_hubs->{$board}>>16) & 0xffff) != 0x0000 && (($board > 0x1000 && $board < 0x1200 && $board%16) || ($board&0xff00 == 0x8a00) || ($board&0xff00 == 0x8200))) { + #$msg2 .= ", " if $msg2 ne ""; + #$msg2 .= sprintf("%04x-%04x (",$board,$rh_hubs->{$board}>>16 & 0xffff); + #foreach my $i (1..8) { + # if ($rh_hubs->{$board} & (1<<($i+16))) { + # $msg2 .= sprintf(" %04x",Hmon::TraceDBGet($board,$i)); + # $boardlist2 .= sprintf("%04X, ",Hmon::TraceDBGet($board,$i)); + # } + # } + #$msg2 .= " )"; + $cnt2++; + } + } + + #$boardlist1 =~ s/(\w)(\w)/$1 $2 /gi; + #$boardlist2 =~ s/(\w)(\w)/$1 $2 /gi; + + + #$msg =~ s/\s+\)/\)/g; $msg =~ s/\(\s+/\(/g; + #$msg2 =~ s/\s+\)/\)/g; $msg2 =~ s/\(\s+/\(/g; + my $status = "on ".($cnt+$cnt2)." boards"; + my $qastate = Dmon::GetQAState('below', $cnt+$cnt2, (0, 0, 1)); + + Dmon::WriteQALog($fqa, "timeouts", 20, $qastate, "Timeouts", + $status, "Timeouts " . $status ." - Timeouts: $cnt.");# $msg - Ports off due to earlier timeouts: $cnt2. $msg2"); + #system("logger -p local1.info -t DAQ 'Hmon Timeouts found: $msg'") + # if $msg ne "" && $logcnt++ < 50; + + sleep 3; +} diff --git a/dmon/scripts/dmon_trbnet.pl b/dmon/scripts/dmon_trbnet.pl new file mode 100755 index 0000000..6e24c6b --- /dev/null +++ b/dmon/scripts/dmon_trbnet.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl -w +use Time::HiRes qw( gettimeofday usleep time ); +use FileHandle; +use Data::Dumper; +use POSIX qw/floor ceil/; +use Dmon; + +my $fqa = Dmon::OpenQAFile(); + +my $qastate = Dmon::OK; +my $lastqastate = Dmon::OK; +my $cmd = "trbcmd r 0xc000 0 2>&1"; +my $msg; +my $status = "OK"; +my @out; + + + +while(1) { + $msg = ""; + $qastate = Dmon::NA; + $status = "N/A"; + @out = ("Starting"); + + @out = Dmon::qxtimeout($cmd,12); + + foreach my $s (@out) { + chomp $s; +# print $s."\n"; + if ($s =~ /0x(\w{4})\s+0x(\w{8})/ && $status eq "N/A") { + $status = "OK"; + $qastate = Dmon::OK; + } + if ($s =~ /RPC:\s+(.+)/) { + $qastate = Dmon::ERROR+1; + $status = "Error"; + $msg .= " - " unless $msg eq ""; + $msg .= $1; + } + if ($s =~ /ERROR:\s+(.+)/) { + $qastate = Dmon::ERROR+2; + $status = "Error"; + $msg .= " - " unless $msg eq ""; + $msg .= $1; + } + if ($s =~ /WARNING:\s+(.+)/) { + $qastate = Dmon::WARN_2; + $status = "Warning"; + $msg .= " - " unless $msg eq ""; + $msg .= $1; + } + if ($s =~ /qxtimeout/) { + $qastate = Dmon::FATAL; + $status = "Timeout"; + $msg = "trbnetd didn't answer within 12 seconds"; + } + } + + Dmon::WriteQALog($fqa,,"trbnet",3,$qastate,"TrbNet",$status,$msg); +# print $status; +# if($lastqastate != $qastate) { +# $msg =~ s/'//g; +# system("logger -p local1.info -t DAQ 'Trbnet \ $msg '") if $qastate == QA::FATAL; +# system("logger -p local1.info -t DAQ 'Trbnet \ $msg '") if $qastate == QA::WARN; +# } + $lastqastate = $qastate; + sleep 1; + } diff --git a/dmon/scripts/dmon_trigNr.pl b/dmon/scripts/dmon_trigNr.pl new file mode 100755 index 0000000..df8f180 --- /dev/null +++ b/dmon/scripts/dmon_trigNr.pl @@ -0,0 +1,49 @@ +#!/usr/bin/perl -w + +use warnings; +use strict; +use Data::Dumper; +use Dmon; +use HADES::TrbNet; + +my %config = Dmon::StartUp(); + + +my $fqa = Dmon::OpenQAFile() or die "No connection to QA Logfile"; + +trb_init_ports() or die trb_strerror(); + +while (1) { + my $trbneterr0 = 0; + my $trbneterr1 = 0; + my $rh_trignr = trb_register_read($config{CtsAddress}, 0xa13c) or $trbneterr0 = 1; #sleep 5 and next; + my $rh_selCh = trb_register_read($config{CtsAddress}, 0xa101) or $trbneterr1 = 1; #sleep 5 and next; + my $str=""; + + if(($trbneterr0 == 0) and ($trbneterr1 == 0)) { + + #my $trignr->{0} = $rh_trignr->{$config{CtsAddress}} & 0xf; + #if (($rh_trig->{$config{CtsAddress}} & 0x1) == 1) { + $str.= sprintf("0x%x", ($rh_trignr->{$config{CtsAddress}} & 0xf)); + #} + + my $qastate; + my $qashort; + my $qalong; + #my $test=$rh_trignr->{$config{CtsAddress}} & 0xf; + + $qashort = $str; + $qastate = Dmon::OK; + $qastate = Dmon::WARN_2 if (!($rh_selCh->{$config{CtsAddress}} & 0x1)); + $qalong = $str; + + Dmon::WriteQALog($fqa, "trigNr", 5, $qastate, "Ext. Triggers", + $qashort, $qalong); + #print $test." ".$qashort."\n"; + sleep(2); + } + else { + Dmon::WriteQALog($fqa, "trigNr", 30, Dmon::ERROR, "Ext. Triggers", "N/A", "N/A"); + sleep(10); + } +} diff --git a/dmon/webpage/mrich_drawing.html b/dmon/webpage/mrich_drawing.html new file mode 100644 index 0000000..ad39bf8 --- /dev/null +++ b/dmon/webpage/mrich_drawing.html @@ -0,0 +1,644 @@ + + + + + + + + + + + + + + + +
+

Min:

+

Max:

+ + + + +
+ + +

RICH Temperatures

updateTime:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0x82100x73000x73010x73100x73110x73200x7321 0x82110x73300x73310x73400x73410x73500x7351 0x82120x73600x73610x73700x73710x73800x7381
0x72000x72010x72100x72110x72200x72210x72300x72310x72400x72410x72500x72510x72600x72610x72700x72710x72800x7281
0x82000x71000x71010x71100x71110x71200x7121 0x82010x71300x71310x71400x71410x71500x7151 0x82020x71600x71610x71700x71710x71800x7181
0x70000x70010x70100x70110x70200x70210x70300x70310x70400x70410x70500x70510x70600x70610x70700x70710x70800x7081
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

max

+

min

+ +

+ + + + + + +