1#**************************************************************
2#
3#  Licensed to the Apache Software Foundation (ASF) under one
4#  or more contributor license agreements.  See the NOTICE file
5#  distributed with this work for additional information
6#  regarding copyright ownership.  The ASF licenses this file
7#  to you under the Apache License, Version 2.0 (the
8#  "License"); you may not use this file except in compliance
9#  with the License.  You may obtain a copy of the License at
10#
11#    http://www.apache.org/licenses/LICENSE-2.0
12#
13#  Unless required by applicable law or agreed to in writing,
14#  software distributed under the License is distributed on an
15#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16#  KIND, either express or implied.  See the License for the
17#  specific language governing permissions and limitations
18#  under the License.
19#
20#**************************************************************
21
22
23
24package installer::logger;
25
26use installer::files;
27use installer::globals;
28
29####################################################
30# Including header files into the logfile
31####################################################
32
33sub include_header_into_logfile
34{
35	my ($message) = @_;
36
37	my $infoline;
38
39	$infoline = "\n" . get_time_string();
40	push( @installer::globals::logfileinfo, $infoline);
41
42	$infoline = "######################################################\n";
43	push( @installer::globals::logfileinfo, $infoline);
44
45	$infoline = "$message\n";
46	push( @installer::globals::logfileinfo, $infoline);
47
48
49	$infoline = "######################################################\n";
50	push( @installer::globals::logfileinfo, $infoline);
51}
52
53####################################################
54# Including header files into the logfile
55####################################################
56
57sub include_header_into_globallogfile
58{
59	my ($message) = @_;
60
61	my $infoline;
62
63	$infoline = "\n" . get_time_string();
64	push( @installer::globals::globallogfileinfo, $infoline);
65
66	$infoline = "######################################################\n";
67	push( @installer::globals::globallogfileinfo, $infoline);
68
69	$infoline = "$message\n";
70	push( @installer::globals::globallogfileinfo, $infoline);
71
72
73	$infoline = "######################################################\n";
74	push( @installer::globals::globallogfileinfo, $infoline);
75}
76
77####################################################
78# Write timestamp into log file
79####################################################
80
81sub include_timestamp_into_logfile
82{
83	my ($message) = @_;
84
85	my $infoline;
86	my $timestring = get_time_string();
87	$infoline = "$message\t$timestring";
88	push( @installer::globals::logfileinfo, $infoline);
89}
90
91####################################################
92# Writing all variables content into the log file
93####################################################
94
95sub log_hashref
96{
97	my ($hashref) = @_;
98
99	my $infoline = "\nLogging variable settings:\n";
100	push(@installer::globals::globallogfileinfo, $infoline);
101
102	my $itemkey;
103
104	foreach $itemkey ( keys %{$hashref} )
105	{
106		my $line = "";
107		my $itemvalue = "";
108		if ( $hashref->{$itemkey} ) { $itemvalue = $hashref->{$itemkey}; }
109		$line = $itemkey . "=" . $itemvalue . "\n";
110		push(@installer::globals::globallogfileinfo, $line);
111	}
112
113	$infoline = "\n";
114	push(@installer::globals::globallogfileinfo, $infoline);
115}
116
117#########################################################
118# Including global logging info into global log array
119#########################################################
120
121sub globallog
122{
123	my ($message) = @_;
124
125	my $infoline;
126
127	$infoline = "\n" . get_time_string();
128	push( @installer::globals::globallogfileinfo, $infoline);
129
130	$infoline = "################################################################\n";
131	push( @installer::globals::globallogfileinfo, $infoline);
132
133	$infoline = "$message\n";
134	push( @installer::globals::globallogfileinfo, $infoline);
135
136	$infoline = "################################################################\n";
137	push( @installer::globals::globallogfileinfo, $infoline);
138
139}
140
141###############################################################
142# For each product (new language) a new log file is created.
143# Therefore the global logging has to be saved in this file.
144###############################################################
145
146sub copy_globalinfo_into_logfile
147{
148	for ( my $i = 0; $i <= $#installer::globals::globallogfileinfo; $i++ )
149	{
150		push(@installer::globals::logfileinfo, $installer::globals::globallogfileinfo[$i]);
151	}
152}
153
154###############################################################
155# For each product (new language) a new log file is created.
156# Therefore the global logging has to be saved in this file.
157###############################################################
158
159sub debuginfo
160{
161	my  ( $message ) = @_;
162
163	$message = $message . "\n";
164	push(@installer::globals::functioncalls, $message);
165}
166
167###############################################################
168# Saving the debug information.
169###############################################################
170
171sub savedebug
172{
173	my ( $outputdir ) = @_;
174
175	installer::files::save_file($outputdir . $installer::globals::debugfilename, \@installer::globals::functioncalls);
176	print_message( "... writing debug file " . $outputdir . $installer::globals::debugfilename . "\n" );
177}
178
179###############################################################
180# Starting the time
181###############################################################
182
183sub starttime
184{
185	$installer::globals::starttime = time();
186}
187
188###############################################################
189# Convert time string
190###############################################################
191
192sub convert_timestring
193{
194	my ($secondstring) = @_;
195
196	my $timestring = "";
197
198	if ( $secondstring < 60 )	 # less than a minute
199	{
200		if ( $secondstring < 10 ) { $secondstring = "0" . $secondstring; }
201		$timestring = "00\:$secondstring min\.";
202	}
203	elsif ( $secondstring < 3600 )
204	{
205		my $minutes = $secondstring / 60;
206		my $seconds = $secondstring % 60;
207		if ( $minutes =~ /(\d*)\.\d*/ ) { $minutes = $1; }
208		if ( $minutes < 10 ) { $minutes = "0" . $minutes; }
209		if ( $seconds < 10 ) { $seconds = "0" . $seconds; }
210		$timestring = "$minutes\:$seconds min\.";
211	}
212	else	# more than one hour
213	{
214		my $hours = $secondstring / 3600;
215		my $secondstring = $secondstring % 3600;
216		my $minutes = $secondstring / 60;
217		my $seconds = $secondstring % 60;
218		if ( $hours =~ /(\d*)\.\d*/ ) { $hours = $1; }
219		if ( $minutes =~ /(\d*)\.\d*/ ) { $minutes = $1; }
220		if ( $hours < 10 ) { $hours = "0" . $hours; }
221		if ( $minutes < 10 ) { $minutes = "0" . $minutes; }
222		if ( $seconds < 10 ) { $seconds = "0" . $seconds; }
223		$timestring = "$hours\:$minutes\:$seconds hours";
224	}
225
226	return $timestring;
227}
228
229###############################################################
230# Returning time string for logging
231###############################################################
232
233sub get_time_string
234{
235	my $currenttime = time();
236	$currenttime = $currenttime - $installer::globals::starttime;
237	$currenttime = convert_timestring($currenttime);
238	$currenttime = localtime() . " \(" . $currenttime . "\)\n";
239	return $currenttime;
240}
241
242###############################################################
243# Returning the age of a file (in seconds)
244###############################################################
245
246sub get_file_age
247{
248	my ( $filename ) = @_;
249
250	my $filetime = (stat($filename))[9];
251	my $timediff = time() - $filetime;
252	return $timediff;
253}
254
255###############################################################
256# Stopping the time
257###############################################################
258
259sub stoptime
260{
261	my $infoline = get_time_string();
262	print_message( "$infoline" );
263}
264
265###############################################################
266# Set date string, format: yymmdd
267###############################################################
268
269sub set_installation_date
270{
271	my $datestring = "";
272
273	my @timearray = localtime(time);
274
275	my $day = $timearray[3];
276	my $month = $timearray[4] + 1;
277	my $year = $timearray[5] - 100;
278
279	if ( $year < 10 ) { $year = "0" . $year; }
280	if ( $month < 10 ) { $month = "0" . $month; }
281	if ( $day < 10 ) { $day = "0" . $day; }
282
283	$datestring = $year . $month . $day;
284
285	return $datestring;
286}
287
288###############################################################
289# Console output: messages
290###############################################################
291
292sub print_message
293{
294    my $message = shift;
295    chomp $message;
296    my $force = shift || 0;
297    print "$message\n" if ( $force || ! $installer::globals::quiet );
298    return;
299}
300
301sub print_message_without_newline
302{
303    my $message = shift;
304    chomp $message;
305    print "$message" if ( ! $installer::globals::quiet );
306    return;
307}
308
309###############################################################
310# Console output: warnings
311###############################################################
312
313sub print_warning
314{
315    my $message = shift;
316    chomp $message;
317    print STDERR "WARNING: $message";
318    return;
319}
320
321###############################################################
322# Console output: errors
323###############################################################
324
325sub print_error
326{
327    my $message = shift;
328    chomp $message;
329    print STDERR "\n**************************************************\n";
330    print STDERR "ERROR: $message";
331    print STDERR "\n**************************************************\n";
332    return;
333}
334
3351;
336