Files

84 lines
2.2 KiB
Perl

#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/../../kenaito-conf-perl-client/lib";
use JSON::PP;
use Kenaito::Conf::Config;
use Kenaito::Conf::Client;
my %config_values = (
'database.host' => $ENV{DATABASE_HOST} // '192.168.1.1',
'database.port' => $ENV{DATABASE_PORT} // '8888',
'database.name' => $ENV{DATABASE_NAME} // 'xxxx',
'database.user' => $ENV{DATABASE_USER} // 'xxxx',
'database.password' => $ENV{DATABASE_PASSWORD} // 'xxxxxxxx',
);
sub get_env {
my ($key, $default) = @_;
return defined $ENV{$key} && $ENV{$key} ne '' ? $ENV{$key} : $default;
}
my $cfg = Kenaito::Conf::Config->new(
base_url => get_env('KENAITO_BASE_URL', 'http://localhost:8080'),
app_name => get_env('KENAITO_APP_NAME', 'kenaito-springboot-demo'),
env => get_env('KENAITO_ENV', 'daily'),
version => get_env('KENAITO_VERSION', 'latest'),
token => get_env('KENAITO_TOKEN', ''),
sync_interval => int(get_env('KENAITO_SYNC_INTERVAL', '10')),
cache_dir => get_env('KENAITO_CACHE_DIR', '.'),
);
my $client = Kenaito::Conf::Client->new(config => $cfg);
$client->on_change(sub {
my ($changed) = @_;
print "Config changed:\n";
for my $k (sort keys %$changed) {
my $v = $changed->{$k};
print " $k = $v\n";
if (exists $config_values{$k}) {
$config_values{$k} = $v;
print " [updated] $k = $v\n";
}
}
});
eval {
$client->start();
1;
} or do {
warn "Failed to init config client, using local defaults: $@\n";
};
my $remote = $client->get_all();
for my $k (keys %config_values) {
if (exists $remote->{$k}) {
$config_values{$k} = $remote->{$k};
}
}
my $count = scalar keys %$remote;
print "loaded $count configs from remote\n\n";
print "Current configs:\n";
for my $k (sort keys %config_values) {
print " $k = $config_values{$k}\n";
}
print "\nListening for config changes... (press Ctrl+C to stop)\n";
$SIG{INT} = sub {
print "\nShutting down...\n";
$client->stop();
exit 0;
};
# sync loop
while (1) {
sleep $cfg->{sync_interval};
last if $client->{stop};
$client->sync_once();
}