~grubng-dev/grubng/clients-perl

« back to all changes in this revision

Viewing changes to Client/Filelogger.pm

  • Committer: yagnesh
  • Date: 2011-06-26 06:20:58 UTC
  • Revision ID: s_yagnesh@yahoo.com-20110626062058-gz2d86sl8x3j4amn
Added POD to all modules; added Makefile.PL; moved modules under /lib/ dir

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# This program is free software: you can redistribute it and/or modify
2
 
# it under the terms of the GNU General Public License as published by
3
 
# the Free Software Foundation, either version 3 of the License, or
4
 
# (at your option) any later version.
5
 
#
6
 
# This program is distributed in the hope that it will be useful,
7
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
8
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9
 
# GNU General Public License for more details.
10
 
#
11
 
# You should have received a copy of the GNU General Public License
12
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
13
 
 
14
 
##############################################
15
 
# Grub::Client::Filelogger
16
 
# LOgs messages to log file
17
 
# 5/9/2011
18
 
##############################################
19
 
package Client::Filelogger;
20
 
 
21
 
# standard modules
22
 
use Carp;
23
 
use Cwd;
24
 
use strict;     
25
 
use warnings;
26
 
 
27
 
# custom moddules
28
 
use Client::Configmanager qw(get_loggers);
29
 
 
30
 
my ($logfile, $loglevel, $logdir, $fh);
31
 
my ($error, $warning, $info, $debug) = (1,2,3,4);
32
 
 
33
 
################################################################################
34
 
# Grub::Client::Filelogger
35
 
# Initializes the logger
36
 
# Params:
37
 
# 1. Config file section that has the details about loggers
38
 
# 4/30/2011
39
 
################################################################################
40
 
sub initialize{
41
 
  my $name = "Filelogger";
42
 
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
43
 
  $mon +=  1;
44
 
  $year += 1900;
45
 
  my $datetime = $mon.$mday.$year.$hour.$min.$sec;
46
 
  
47
 
  my $loggers_r = get_loggers();
48
 
  my $self; undef $self;
49
 
  foreach my $logger_r (keys %$loggers_r){
50
 
    if($$loggers_r{$logger_r}->{name} eq $name){
51
 
      $self = $logger_r;
52
 
      last;
53
 
    }
54
 
  }
55
 
 
56
 
  croak "Error: $datetime: Unable to initialize $name." if(!defined($self));
57
 
  $logdir = get_loggers()->{$self}->{'cfg'}->{'logdir'};
58
 
  $loglevel = get_loggers()->{$self}->{'cfg'}->{'loglevel'};
59
 
  
60
 
  if($logdir eq ''){
61
 
    # use current dir as the base for log dir
62
 
    $logdir = getcwd . "/log";
63
 
  }
64
 
  
65
 
  # create logdir if it doesn't exist
66
 
  if(! -d $logdir){
67
 
    if (! mkdir($logdir)){
68
 
      croak "Unable to create log directory $logdir. Check if the user has sufficient permission on the file system.\n";
69
 
    }
70
 
  }
71
 
  
72
 
  # full path to log file
73
 
  # if $logdir ends with trailing /, don't add it again
74
 
  if($logdir =~ /.*\/$/){
75
 
    $logfile = $logdir . "grubclient_$datetime.log";
76
 
  }
77
 
  else{
78
 
     $logfile = $logdir . "/" . "grubclient_$datetime.log"; 
79
 
  }
80
 
  
81
 
  print("Creating log file at $logfile\n");
82
 
  
83
 
  # if file does not exist, open in write mode, else open in append mode
84
 
  if(! -e $logfile){
85
 
    open LOGFILE, ">", $logfile or croak $!;
86
 
  }
87
 
  else{
88
 
    open LOGFILE, ">>", $logfile or croak $!;
89
 
  }
90
 
  
91
 
  
92
 
  $fh = *LOGFILE;
93
 
}
94
 
 
95
 
BEGIN{
96
 
  Client::Filelogger::initialize();
97
 
}
98
 
 
99
 
 
100
 
 
101
 
################################################################################
102
 
# Grub::Client::Filelogger
103
 
# Writes a message to the log file (without new line)
104
 
# Params:
105
 
# 1. msg: message to write to the log file
106
 
# 2. log_type: type of the log message; must be one of the 4 log levels
107
 
# 4/30/2011
108
 
################################################################################
109
 
sub writeline($$){
110
 
  my ($caller,$msg,$logtype) = @_;
111
 
  
112
 
  my $prefix = get_prefix($logtype);
113
 
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
114
 
  $mon +=  1;
115
 
  $year += 1900;
116
 
  my $datetime = $mon.$mday.$year.$hour.$min.$sec;
117
 
  $logtype <= $loglevel && print $fh localtime().":$prefix:$msg\n";
118
 
  croak $msg if ($loglevel == $error); # croak if $loglevel == Error
119
 
}
120
 
 
121
 
################################################################################
122
 
# Grub::Client::Filelogger
123
 
# Closes the log file
124
 
# 4/30/2011
125
 
################################################################################
126
 
sub DESTROY{
127
 
  writeline("Closinig log file.",3);
128
 
  close $fh;
129
 
}
130
 
 
131
 
################################################################################
132
 
# Grub::Client::Filelogger
133
 
# Returns the correct prefix for the provider logtype
134
 
# Params:
135
 
#  1.logtype: the type of log (one of error, warning, info or debug)
136
 
# 4/30/2011
137
 
################################################################################
138
 
sub get_prefix($){
139
 
 my ($logprefix,$logtype);
140
 
 $logtype = shift;
141
 
 $logtype = 1 if (!defined($logtype));  
142
 
 
143
 
 SWITCH:{
144
 
    $logtype == $error && do { $logprefix = 'Error'; last; };
145
 
    $logtype == $warning && do { $logprefix = 'Warning'; last; };
146
 
    $logtype == $info && do { $logprefix = 'Info'; last; } ;
147
 
    $logtype == $debug && do { $logprefix = 'Debug'; last; };
148
 
  }
149
 
  return $logprefix;
150
 
}
151
 
 
152
 
1;