File Coverage

blib/lib/XAS/Lib/Modules/Environment.pm
Criterion Covered Total %
statement 12 132 9.0
branch 0 100 0.0
condition n/a
subroutine 4 18 22.2
pod 7 10 70.0
total 23 260 8.8


line stmt bran cond sub pod time code
1             package XAS::Lib::Modules::Environment;
2              
3             our $VERSION = '0.02';
4              
5 1     1   729 use File::Basename;
  1         2  
  1         46  
6 1     1   4 use Config::IniFiles;
  1         1  
  1         19  
7 1     1   431 use Net::Domain qw(hostdomain);
  1         3118  
  1         66  
8              
9             use XAS::Class
10 1         5 debug => 0,
11             version => $VERSION,
12             base => 'XAS::Singleton',
13             utils => ':validation dir_walk',
14             constants => ':logging :alerts STOMP_LEVELS',
15             filesystem => 'File Dir Path Cwd',
16             accessors => 'path host domain username commandline',
17             mutators => 'mqserver mqport mxserver mxport mxtimeout msgs alerts xdebug',
18 1     1   5 ;
  1         1  
19              
20             # ------------------------------------------------------------------------
21             # Public Methods
22             # ------------------------------------------------------------------------
23              
24             sub mxmailer {
25 0     0 1   my $self = shift;
26 0           my ($mailer) = validate_params(\@_, [
27             { optional => 1, default => undef, regex => qr/sendmail|smtp/ }
28             ]);
29              
30 0 0         $self->{'mxmailer'} = $mailer if (defined($mailer));
31              
32 0           return $self->{'mxmailer'};
33              
34             }
35              
36             sub mqlevel {
37 0     0 1   my $self = shift;
38 0           my ($level) = validate_params(\@_, [
39             { optional => 1, default => undef, regex => STOMP_LEVELS },
40             ]);
41              
42 0 0         $self->{'mqlevel'} = $level if (defined($level));
43              
44 0           return $self->{'mqlevel'};
45              
46             }
47              
48             sub log_type {
49 0     0 1   my $self = shift;
50 0           my ($type) = validate_params(\@_, [
51             { optional => 1, default => undef, regex => LOG_TYPES }
52             ]);
53              
54 0 0         $self->{'log_type'} = $type if (defined($type));
55              
56 0           return $self->{'log_type'};
57              
58             }
59              
60             sub log_facility {
61 0     0 1   my $self = shift;
62 0           my ($type) = validate_params(\@_, [
63             { optional => 1, default => undef, regex => LOG_FACILITY }
64             ]);
65              
66 0 0         $self->{'log_facility'} = $type if (defined($type));
67              
68 0           return $self->{'log_facility'};
69              
70             }
71              
72             sub throws {
73 0     0 1   my $self = shift;
74 0           my ($throws) = validate_params(\@_, [
75             { optional => 1, default => undef }
76             ]);
77              
78 0 0         $self->{'throws'} = $throws if (defined($throws));
79              
80 0           return $self->{'throws'};
81              
82             }
83              
84             sub priority {
85 0     0 0   my $self = shift;
86 0           my ($level) = validate_params(\@_, [
87             { optional => 1, default => undef, regex => ALERT_PRIORITY }
88             ]);
89              
90 0 0         $self->{'priority'} = $level if (defined($level));
91              
92 0           return $self->{'priority'};
93              
94             }
95              
96             sub facility {
97 0     0 0   my $self = shift;
98 0           my ($level) = validate_params(\@_, [
99             { optional => 1, default => undef, regex => ALERT_FACILITY }
100             ]);
101              
102 0 0         $self->{'facility'} = $level if (defined($level));
103              
104 0           return $self->{'facility'};
105              
106             }
107              
108             sub script {
109 0     0 1   my $self = shift;
110 0           my ($script) = validate_params(\@_, [
111             { optional => 1, default => undef }
112             ]);
113            
114 0 0         $self->{'script'} = $script if (defined($script));
115              
116 0           return $self->{'script'};
117              
118             }
119              
120             sub get_msgs {
121 0     0 0   my $self = shift;
122              
123 0           return $self->class->var('MESSAGES');
124              
125             }
126              
127             # ------------------------------------------------------------------------
128             # Private Methods
129             # ------------------------------------------------------------------------
130              
131             sub _load_msgs {
132 0     0     my $self = shift;
133              
134 0           my $messages = $self->class->any_var('MESSAGES');
135              
136 0           foreach my $path (@INC) {
137              
138 0           my $dir = Dir($path, 'XAS');
139              
140 0 0         if ($dir->exists) {
141              
142             dir_walk(
143             -directory => $dir,
144             -filter => $self->msgs,
145             -callback => sub {
146 0     0     my $file = shift;
147              
148 0           my $cfg = Config::IniFiles->new(-file => $file->path);
149 0 0         if (my @names = $cfg->Parameters('messages')) {
150              
151 0           foreach my $name (@names) {
152              
153 0           $messages->{$name} = $cfg->val('messages', $name);
154              
155             }
156              
157             }
158              
159             }
160 0           );
161              
162             }
163              
164             }
165              
166 0           $self->class->var('MESSAGES', $messages);
167              
168             }
169              
170             sub init {
171 0     0 1   my $self = shift;
172              
173 0           my $temp;
174             my $name;
175 0           my $path;
176 0           my $suffix;
177 0           my $commandline = $0;
178 0           my ($script) = ( $commandline =~ m#([^\\/]+)$# );
179              
180 0           foreach (@ARGV) {
181 0 0         $commandline .= /\s/
182             ? " \'" . $_ . "\'"
183             : " " . $_;
184             }
185              
186             # set some defaults
187              
188 0           $self->{'alerts'} = 1;
189 0           $self->{'xdebug'} = 0;
190 0           $self->{'mxtimeout'} = 60;
191 0           $self->{'script'} = $script;
192 0           $self->{'path'} = $ENV{'PATH'};
193 0           $self->{'commandline'} = $commandline;
194            
195             # Initialize variables - these are defaults
196              
197             $self->{'mqserver'} = defined($ENV{'XAS_MQSERVER'})
198 0 0         ? $ENV{'XAS_MQSERVER'}
199             : 'localhost';
200              
201             $self->{'mqport'} = defined($ENV{'XAS_MQPORT'})
202 0 0         ? $ENV{'XAS_MQPORT'}
203             : '61613';
204              
205             $self->{'mqlevel'} = defined ($ENV{'XAS_MQLEVEL'})
206 0 0         ? $ENV{'XAS_MQLEVEL'}
207             : '1.0';
208              
209             $self->{'mxserver'} = defined($ENV{'XAS_MXSERVER'})
210 0 0         ? $ENV{'XAS_MXSERVER'}
211             : 'localhost';
212              
213             $self->{'mxport'} = defined($ENV{'XAS_MXPORT'})
214 0 0         ? $ENV{'XAS_MXPORT'}
215             : '25';
216              
217             $self->{'domain'} = defined($ENV{'XAS_DOMAIN'})
218 0 0         ? $ENV{'XAS_DOMAIN'}
219             : hostdomain();
220              
221 0 0         $self->{'msgs'} = defined($ENV{'XAS_MSGS'})
222             ? qr/$ENV{'XAS_MSGS'}/i
223             : qr/.*\.msg$/i;
224              
225             $self->{'throws'} = defined($ENV{'XAS_ERR_THROWS'})
226 0 0         ? $ENV{'XAS_ERR_THROWS'}
227             : 'xas';
228              
229             $self->{'priority'} = defined($ENV{'XAS_ERR_PRIORITY'})
230 0 0         ? $ENV{'XAS_ERR_PRIORITY'}
231             : 'low';
232              
233             $self->{'facility'} = defined($ENV{'XAS_ERR_FACILITY'})
234 0 0         ? $ENV{'XAS_ERR_FACILITY'}
235             : 'systems';
236              
237             # platform specific
238              
239 0           my $OS = $^O;
240              
241 0 0         if ($OS eq "MSWin32") {
242              
243 0           require Win32;
244              
245             $self->{'host'} = defined($ENV{'XAS_HOSTNAME'})
246 0 0         ? $ENV{'XAS_HOSTNAME'}
247             : Win32::NodeName();
248              
249             $self->{'root'} = Dir(defined($ENV{'XAS_ROOT'})
250 0 0         ? $ENV{'XAS_ROOT'}
251             : ['C:', 'XAS']);
252              
253             $self->{'etc'} = Dir(defined($ENV{'XAS_ETC'})
254             ? $ENV{'XAS_ETC'}
255 0 0         : [$self->{root}, 'etc']);
256              
257             $self->{'tmp'} = Dir(defined($ENV{'XAS_TMP'})
258             ? $ENV{'XAS_TMP'}
259 0 0         : [$self->{root}, 'tmp']);
260              
261             $self->{'var'} = Dir(defined($ENV{'XAS_VAR'})
262             ? $ENV{'XAS_VAR'}
263 0 0         : [$self->{root}, 'var']);
264              
265             $self->{'lib'} = Dir(defined($ENV{'XAS_LIB'})
266             ? $ENV{'XAS_LIB'}
267 0 0         : [$self->{root}, 'var', 'lib']);
268              
269             $self->{'log'} = Dir(defined($ENV{'XAS_LOG'})
270             ? $ENV{'XAS_LOG'}
271 0 0         : [$self->{root}, 'var', 'log']);
272              
273             $self->{'locks'} = Dir(defined($ENV{'XAS_LOCKS'})
274             ? $ENV{'XAS_LOCKS'}
275 0 0         : [$self->{root}, 'var', 'lock']);
276              
277             $self->{'run'} = Dir(defined($ENV{'XAS_RUN'})
278             ? $ENV{'XAS_RUN'}
279 0 0         : [$self->{root}, 'var', 'run']);
280              
281             $self->{'spool'} = Dir(defined($ENV{'XAS_SPOOL'})
282             ? $ENV{'XAS_SPOOL'}
283 0 0         : [$self->{root}, 'var', 'spool']);
284              
285             $self->{'mxmailer'} = defined($ENV{'XAS_MXMAILER'})
286 0 0         ? $ENV{'XAS_MXMAILER'}
287             : 'smtp';
288              
289 0           $self->{'username'} = Win32::LoginName();
290              
291             } else {
292              
293             # this assumes a unix like working environment
294              
295             $self->{'host'} = defined($ENV{'XAS_HOSTNAME'})
296 0 0         ? $ENV{'XAS_HOSTNAME'}
297             : `hostname -s`;
298              
299 0           chomp($self->{'host'});
300              
301             $self->{'root'} = Dir(defined($ENV{'XAS_ROOT'})
302 0 0         ? $ENV{'XAS_ROOT'}
303             : ['/']);
304              
305             $self->{'etc'} = Dir(defined($ENV{'XAS_ETC'})
306             ? $ENV{'XAS_ETC'}
307 0 0         : [$self->{root}, 'etc', 'xas']);
308              
309             $self->{'tmp'} = Dir(defined($ENV{'XAS_TMP'})
310 0 0         ? $ENV{'XAS_TMP'}
311             : ['/', 'tmp']);
312              
313             $self->{'var'} = Dir(defined($ENV{'XAS_VAR'})
314             ? $ENV{'XAS_VAR'}
315 0 0         : [$self->{root}, 'var']);
316              
317             $self->{'lib'} = Dir(defined($ENV{'XAS_LIB'})
318             ? $ENV{'XAS_LIB'}
319 0 0         : [$self->{root}, 'var', 'lib', 'xas']);
320              
321             $self->{'log'} = Dir(defined($ENV{'XAS_LOG'})
322             ? $ENV{'XAS_LOG'}
323 0 0         : [$self->{root}, 'var', 'log', 'xas']);
324              
325             $self->{'locks'} = Dir(defined($ENV{'XAS_LOCKS'})
326             ? $ENV{'XAS_LOCKS'}
327 0 0         : [$self->{root}, 'var', 'lock', 'xas']);
328              
329             $self->{'run'} = Dir(defined($ENV{'XAS_RUN'})
330             ? $ENV{'XAS_RUN'}
331 0 0         : [$self->{root}, 'var', 'run', 'xas']);
332              
333             $self->{'spool'} = Dir(defined($ENV{'XAS_SPOOL'})
334             ? $ENV{'XAS_SPOOL'}
335 0 0         : [$self->{root}, 'var', 'spool', 'xas']);
336              
337             $self->{'mxmailer'} = defined($ENV{'XAS_MXMAILER'})
338 0 0         ? $ENV{'XAS_MXMAILER'}
339             : 'sendmail';
340              
341 0           $self->{'username'} = getpwuid($<);
342              
343             }
344              
345             # build some common paths
346              
347             $self->{'sbin'} = Dir(defined($ENV{'XAS_SBIN'})
348             ? $ENV{'XAS_SBIN'}
349 0 0         : [$self->{'root'}, 'sbin']);
350              
351             $self->{'bin'} = Dir(defined($ENV{'XAS_BIN'})
352             ? $ENV{'XAS_BIN'}
353 0 0         : [$self->{'root'}, 'bin']);
354              
355             # define some logging options
356              
357             $self->{'log_type'} = defined($ENV{'XAS_LOG_TYPE'})
358 0 0         ? $ENV{'XAS_LOG_TYPE'}
359             : 'console';
360              
361             $self->{'log_facility'} = defined($ENV{'XAS_LOG_FACILITY'})
362 0 0         ? $ENV{'XAS_LOG_FACILITY'}
363             : 'local6';
364              
365             # create some common file names
366              
367 0           ($name, $path, $suffix) = fileparse($0, qr{\..*});
368              
369 0           $self->{'log_file'} = File($self->{'log'}, $name . '.log');
370 0           $self->{'pid_file'} = File($self->{'run'}, $name . '.pid');
371 0           $self->{'cfg_file'} = File($self->{'etc'}, $name . '.ini');
372              
373             # build some methods, saves typing
374              
375 0           for my $datum (qw( log_file pid_file cfg_file )) {
376              
377             $self->class->methods($datum => sub {
378 0     0     my $self = shift;
379 0           my ($p) = validate_params(\@_, [
380             {optional => 1, default => undef, isa => 'Badger::Filesystem::File' }
381             ],
382             "xas.lib.modules.environment.$datum"
383             );
384              
385 0 0         $self->{$datum} = $p if (defined($p));
386              
387 0           return $self->{$datum};
388              
389 0           });
390              
391             }
392              
393 0           for my $datum (qw( root etc sbin tmp var bin lib log locks run spool )) {
394              
395             $self->class->methods($datum => sub {
396 0     0     my $self = shift;
397 0           my ($p) = validate_params(\@_, [
398             {optional => 1, default => undef, isa => 'Badger::Filesystem::Directory'}
399             ],
400             "xas.lib.modules.environment.$datum"
401             );
402              
403 0 0         $self->{$datum} = $p if (defined($p));
404              
405 0           return $self->{$datum};
406              
407 0           });
408              
409             }
410              
411 0           $self->_load_msgs();
412              
413 0           return $self;
414              
415             }
416              
417             1;
418              
419             __END__