my %builtin_config = ();
my $builtin_config_path;
my $builtin_config_default;
+my $config_cache = 0;
+my %config_cache = ();
our $error;
#
'nodebug' => sub {
_cmd_nodebug(@_);
},
+
+ 'cache' => sub {
+ _cmd_cache(@_);
+ },
};
#
#
sub _config_get {
my $path = shift;
+ my $dotpath = join('.', @{$path});
my $value;
- $value = $remote_api->{config_get}->($path);
- _debug("config: getting %s=%s", join('.', @{$path}), $value);
+ if ($config_cache && exists($config_cache{$dotpath}) && exists($config_cache{$dotpath}->{value})) {
+ $value = $config_cache{$dotpath}->{value};
+ } else {
+ $value = $remote_api->{config_get}->($path);
+ $config_cache{$dotpath} = {value => $value, has => 1};
+
+ }
+ _debug("config: getting %s=%s", $dotpath, $value);
return $value;
}
sub _config_set {
my $path = shift;
+ my $dotpath = join('.', @{$path});
my $value = shift;
- _debug("config: setting %s=%s", join('.', @{$path}), $value);
+ _debug("config: setting %s=%s", $dotpath, $value);
+ $config_cache{$dotpath} = {value => $value, has => 1};
return $remote_api->{config_set}->($path, $value);
}
sub _config_has {
my $path = shift;
+ my $dotpath = join('.', @{$path});
my $b;
- $b = $remote_api->{config_has}->($path);
- _debug("config: testing %s (%s)", join('.', @{$path}), $b?'true':'false');
+ if ($config_cache && exists($config_cache{$dotpath}) && exists($config_cache{$dotpath}->{has})) {
+ $b = $config_cache{$dotpath}->{has};
+ } else {
+ $b = $remote_api->{config_has}->($path);
+ $config_cache{$dotpath}->{has} = $b;
+ }
+ _debug("config: testing %s (%s)", $dotpath, $b?'true':'false');
return $b;
}
sub _config_del {
my $path = shift;
+ my $dotpath = join('.', @{$path});
- _debug("config: removing %s", join('.', @{$path}));
+ _debug("config: removing %s", $dotpath);
+ delete($config_cache{$dotpath});
$remote_api->{config_del}->($path);
}
}
}
+#
+# Display the content of the config cache
+#
+sub _cmd_cache {
+ my $event = shift;
+
+ _io("Content of config cache:");
+ foreach (sort(keys(%config_cache))) {
+ _io("%s => %s", $_, Dumper($config_cache{$_}));
+ }
+}
+
#
# Return the list of loaded grabbers.
$builtin_config_default = $a->{_config_default}->();
}
+ if (exists($a->{_config_cache})) {
+ $config_cache = $a->{_config_cache}->();
+ }
+
@outputstack = ({io => $remote_api->{'io'}, window => ""});
return 1;