Merge pull request #886 from grahamc/269

statsd: add a chance to set hostname and port in hydra.conf
This commit is contained in:
Graham Christensen 2021-03-08 11:23:43 -05:00 committed by GitHub
commit a2717b3d7e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 101 additions and 2 deletions

View file

@ -187,6 +187,18 @@ following:
}
}
Statsd Configuration
--------------------
By default, Hydra will send stats to statsd at `localhost:8125`. Point Hydra to a different server via:
```
<statsd>
host = alternative.host
port = 18125
</statsd>
```
Using LDAP as authentication backend (optional)
-----------------------------------------------

View file

@ -15,7 +15,7 @@ use IPC::Run;
our @ISA = qw(Exporter);
our @EXPORT = qw(
getHydraHome getHydraConfig getBaseUrl
getSCMCacheDir
getSCMCacheDir getStatsdConfig
registerRoot getGCRootsDir gcRootFor
jobsetOverview jobsetOverview_
getDrvLogPath findLog
@ -55,6 +55,23 @@ sub getHydraConfig {
}
# Return hash of statsd configuration of the following shape:
# (
# host => string,
# port => digit
# )
sub getStatsdConfig {
my ($config) = @_;
my $cfg = $config->{statsd};
my %statsd = defined $cfg ? ref $cfg eq "HASH" ? %$cfg : ($cfg) : ();
return {
"host" => %statsd{'host'} // 'localhost',
"port" => %statsd{'port'} // 8125,
}
}
sub getBaseUrl {
my ($config) = @_;
return $config->{'base_uri'} // "http://" . hostname_long . ":3000";

View file

@ -33,6 +33,10 @@ my $plugins = [Hydra::Plugin->instantiate(db => $db, config => $config)];
my $dryRun = defined $ENV{'HYDRA_DRY_RUN'};
my $statsdConfig = Hydra::Helper::Nix::getStatsdConfig($config);
$Net::Statsd::HOST = $statsdConfig->{'host'};
$Net::Statsd::PORT = $statsdConfig->{'port'};
alarm 3600; # FIXME: make configurable

View file

@ -9,6 +9,11 @@ use JSON;
STDERR->autoflush(1);
binmode STDERR, ":encoding(utf8)";
my $config = getHydraConfig();
my $statsdConfig = Hydra::Helper::Nix::getStatsdConfig($config);
$Net::Statsd::HOST = $statsdConfig->{'host'};
$Net::Statsd::PORT = $statsdConfig->{'port'};
sub gauge {
my ($name, $val) = @_;
die unless defined $val;

61
t/Config/statsd.t Normal file
View file

@ -0,0 +1,61 @@
use strict;
use Setup;
my %ctx = test_init(hydra_config => q|
<statsd>
host = foo.bar
port = 18125
</statsd>
|);
require Hydra::Helper::Nix;
use Test2::V0;
is(Hydra::Helper::Nix::getStatsdConfig(Hydra::Helper::Nix::getHydraConfig()), {
'host' => "foo.bar",
'port' => 18125
}, "Reading specific configuration from the hydra.conf works");
is(Hydra::Helper::Nix::getStatsdConfig(), {
'host' => "localhost",
'port' => 8125
}, "A totally empty configuration yields default options");
is(Hydra::Helper::Nix::getStatsdConfig({
"statsd" => {
}
}), {
'host' => "localhost",
'port' => 8125
}, "A empty statsd block yields default options");
is(Hydra::Helper::Nix::getStatsdConfig({
"statsd" => {
'host' => "statsdhost"
}
}), {
'host' => "statsdhost",
'port' => 8125
}, "An overridden statsd host propogates, but the other defaults are returned");
is(Hydra::Helper::Nix::getStatsdConfig({
"statsd" => {
'port' => 5218
}
}), {
'host' => "localhost",
'port' => 5218
}, "An overridden statsd port propogates, but the other defaults are returned");
is(Hydra::Helper::Nix::getStatsdConfig({
"statsd" => {
'host' => 'my.statsd.host',
'port' => 5218
}
}), {
'host' => "my.statsd.host",
'port' => 5218
}, "An overridden statsd port and host propogate");
done_testing;