[Perl] DAQ system for the FAPG.
1
#!/usr/bin/env perl
2
3
use v5.32.1;
4
use strict;
5
use warnings;
6
7
use FindBin qw($Bin);
8
use lib "$Bin/../../../lib";
9
10
use FAPG::DAQ::MQTT qw(publish_status_mqtt);
11
use Sys::Hostname qw(hostname);
12
13
my $publish_interval = positive_number_from_env( HUB_STATUS_INTERVAL => 5 );
14
my $node = $ENV{FAPG_DAQ_HUB_NODE} // $ENV{FAPG_DAQ_NODE} // $ENV{DAQ_NODE}
15
// hostname();
16
17
while (1) {
18
eval {
19
publish_status_mqtt(
20
{ probe => 'hub',
21
node => $node,
22
status => 'ok',
23
message => 'DAQ hub MQTT broker reachable',
24
},
25
source => 'fapg-daq-hub',
26
);
27
1;
28
} or do {
29
my $error = $@ || 'unknown error';
30
warn "MQTT hub status publish error: $error";
31
};
32
33
sleep $publish_interval;
34
}
35
36
sub positive_number_from_env {
37
my ( $name, $default ) = @_;
38
my $value = $ENV{$name};
39
40
return $default
41
if !defined $value
42
|| $value !~ /\A(?:\d+(?:\.\d*)?|\.\d+)\z/
43
|| $value <= 0;
44
45
return 0 + $value;
46
}
47