]> git.evergreen-ils.org Git - OpenSRF.git/blob - src/perlmods/OpenSRF/Utils/SettingsClient.pm
571a22db47507459d2e18632d378c2555fba71c3
[OpenSRF.git] / src / perlmods / OpenSRF / Utils / SettingsClient.pm
1 use strict; use warnings;
2 package OpenSRF::Utils::SettingsClient;
3 use OpenSRF::Utils::SettingsParser;
4 use OpenSRF::System;
5 use OpenSRF::AppSession;
6 use OpenSRF::Utils::Config;
7 use OpenSRF::EX qw(:try);
8
9 use vars qw/$host_config/;
10
11
12 sub new {return bless({},shift());}
13 my $session;
14 $host_config = undef;
15
16 my $we_cache = 1;
17 sub set_cache {
18         my($self, $val) = @_;
19         if(defined($val)) { $we_cache = $val; }
20 }
21
22
23
24 # ------------------------------------
25 # utility method for grabbing config info
26 sub config_value {
27         my($self,@keys) = @_;
28
29
30         my $bsconfig = OpenSRF::Utils::Config->current;
31         my $host = $bsconfig->env->hostname;
32
33         if($we_cache) {
34                 if(!$host_config) { grab_host_config($host); }
35         } else {
36                 grab_host_config($host);
37         }
38
39         if(!$host_config) {
40                 throw OpenSRF::EX::Config ("Unable to retrieve host config for $host" );
41         }
42
43         my $hash = $host_config;
44
45         # XXX TO DO, check local config 'version', 
46         # call out to settings server when necessary....
47         try {
48                 for my $key (@keys) {
49                         $hash = $hash->{$key};
50                 }
51
52         } catch Error with {
53                 my $e = shift;
54                 throw OpenSRF::EX::Config ("No Config information for @keys : $e : $@");
55         };
56
57         return $hash;
58
59 }
60
61
62 # XXX make smarter and more robust...
63 sub grab_host_config {
64
65         my $host = shift;
66
67         warn "Grabbing Host config for $host\n";
68         OpenSRF::System::bootstrap_client(client_name => "system_client");
69         $session = OpenSRF::AppSession->create( "settings" ) unless $session;
70         my $bsconfig = OpenSRF::Utils::Config->current;
71
72         my $resp;
73         my $req;
74         try {
75
76                 if( ! ($session->connect()) ) {die "Settings Connect timed out\n";}
77                 $req = $session->request( "opensrf.settings.host_config.get", $host );
78                 $resp = $req->recv( timeout => 10 );
79
80         } catch OpenSRF::EX with {
81
82                 my $e = shift;
83                 warn "Connection to Settings Failed  $e : $@ ***\n";
84                 die $e;
85         };
86
87         if(!$resp) {
88                 warn "No Response from settings server...going to sleep\n";
89                 sleep;
90         }
91
92         if( $resp && UNIVERSAL::isa( $resp, "OpenSRF::EX" ) ) {
93                 throw $resp;
94         }
95
96         $host_config = $resp->content();
97         $req->finish();
98         $session->finish;
99         $session->disconnect();
100 }
101
102
103
104 1;