diff options
Diffstat (limited to 'perl-install/standalone/logdrake')
| -rwxr-xr-x | perl-install/standalone/logdrake | 192 | 
1 files changed, 104 insertions, 88 deletions
diff --git a/perl-install/standalone/logdrake b/perl-install/standalone/logdrake index d36a751d2..562d91144 100755 --- a/perl-install/standalone/logdrake +++ b/perl-install/standalone/logdrake @@ -1,8 +1,7 @@  #! /usr/bin/perl -# $Id$ -# Copyright (C) 2001-2004 Mandrakesoft -# Yves Duret <yduret at mandrakesoft.com> +# Copyright (C) 2001-2008 Mandriva +# Yves Duret <yduret at mandriva.com>  # some code is Copyright: (C) 1999, Michael T. Babcock <mikebabcock@pobox.com>  #  # This program is free software; you can redistribute it and/or modify @@ -24,12 +23,14 @@  use strict;  use lib qw(/usr/lib/libDrakX);  use standalone;     #- warning, standalone must be loaded very first, for 'explanations' +use c;  use common;  use interactive; -use ugtk2 qw(:create :dialogs :helpers :wrappers); -use vars qw(*F); +use do_pkgs; +use mygtk3 qw(gtknew); #- do not import gtkadd which conflicts with ugtk3 version +use ugtk3 qw(:create :dialogs :helpers :wrappers); -$ugtk2::wm_icon = "/usr/share/mcc/themes/default/logdrake-mdk.png"; +$ugtk3::wm_icon = "/usr/share/mcc/themes/default/logdrake-mdk.png";  my $in = 'interactive'->vnew('su');  my ($isExplain, $Explain, $isFile, $File, $isWord, $Word); @@ -42,13 +43,17 @@ foreach (@ARGV) {      /^--alert$/ and do { alert_config(); quit() };  } +if (!$::testing) { +   do_pkgs_standalone->new($in)->ensure_is_installed("syslog-daemon", "/etc/systemd/system/syslog.service") or exit(0); +} +  my $isTail = $isFile;  $| = 1 if $isTail;  my $h = chomp_(`hostname -s`); -$ugtk2::wm_icon = "logdrake"; -my $explain_title = N("Mandrakelinux Tools Logs"); -my $my_win = ugtk2->new($isExplain ? $explain_title : N("Logdrake")); +$ugtk3::wm_icon = "logdrake"; +my $explain_title = N("%s Tools Logs", N("Mageia")); +my $my_win = ugtk3->new($isExplain ? $explain_title : N("Logs"));  unless ($::isEmbedded) {      $my_win->{window}->set_border_width(5); @@ -56,30 +61,33 @@ unless ($::isEmbedded) {  }  $my_win->{window}->signal_connect(delete_event => \&quit); -my $cal = gtkset_sensitive(Gtk2::Calendar->new, 0); +my $cal = gtkset_sensitive(Gtk3::Calendar->new, 0);  my $mday = (localtime(time()))[3];  $cal->select_day($mday);  my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);  my $cal_mode = 0; -my $cal_butt = gtksignal_connect(Gtk2::CheckButton->new(N("Show only for the selected day")), clicked => sub { $cal_mode = !$cal_mode; gtkset_sensitive($cal,$cal_mode) }); +my $cal_butt = gtksignal_connect(Gtk3::CheckButton->new(N("Show only for the selected day")), clicked => sub { $cal_mode = !$cal_mode; gtkset_sensitive($cal,$cal_mode) });  ### menus definition  # the menus are not shown -# but they provides shiny shortcut like C-q -my @menu_items = ( -		  { path => N("/_File"), item_type => '<Branch>' }, -		  { path => N("/File/_New"), accelerator => N("<control>N") }, -		  { path => N("/File/_Open"), accelerator => N("<control>O") }, -		  { path => N("/File/_Save"), accelerator => N("<control>S"), callback => \&save }, -		  { path => N("/File/Save _As") }, -		  { path => N("/File/-"), item_type => '<Separator>' }, -		  { path => N("/File/_Quit"), accelerator => N("<control>Q"), callback => \&quit }, -		  { path => N("/_Options"), item_type => '<Branch>' }, -		  { path => N("/Options/Test") }, -		  { path => N("/_Help"), item_type => '<LastBranch>' }, -		  { path => N("/Help/_About...") }  -		 ); -my $_menubar = $::isEmbedded ? create_factory_menu($my_win->{rwindow}, @menu_items) : undef; +# but they provides shiny shortcut like C-q (Broken: FIXME) +if ($::isEmbedded) { +	my $ui = gtknew('UIManager', actions => [ +                   # [name, stock_id, value, label, accelerator, tooltip, callback] +                   [ 'FileMenu',        undef, N("_File") ], +                   [ 'Save', undef, N("_Quit"), N("<control>S"), undef, \&save ], +                   [ 'Quit', undef, N("_Quit"), N("<control>Q"), undef, \&quit ], +               ], +               string => qq(<ui> +  <menubar name='MenuBar'> +    <menu action='FileMenu'> +      <menuitem action='Save'/> +      <menuitem action='Quit'/> +    </menu> +  </menubar> +</ui>)); +	$my_win->{rwindow}->add_accel_group($ui->get_accel_group); +}  ######### menus end @@ -113,9 +121,9 @@ my %files = (  	     "explanations" => { file => "/var/log/explanations", desc => $explain_title }  ); -my $yy = gtkset_sensitive(gtksignal_connect(Gtk2::Button->new(N("search")) , clicked => \&search),0); +my $yy = gtkset_sensitive(gtksignal_connect(Gtk3::Button->new(N("search")) , clicked => \&search),0); -my $log_text = gtktext_insert(Gtk2::TextView->new, [ [ '' ] ]); +my $log_text = gtktext_insert(Gtk3::TextView->new, [ [ '' ] ]);  my $log_buf = $log_text->get_buffer;  my $refcount_search; @@ -124,42 +132,42 @@ my $refcount_search;  my %toggle;  gtkadd($my_win->{window}, -       gtkpack_(Gtk2::VBox->new(0,0), -		if_(!$isExplain && !$::isEmbedded, 0, N("A tool to monitor your logs")), -		if_(!$isFile, 0, gtkadd(Gtk2::Frame->new(N("Settings")), -					  gtkpack__(Gtk2::VBox->new(0,2), -						    gtkpack__(Gtk2::VBox->new(0,2), +       gtkpack_(Gtk3::VBox->new(0,0), +		if_(!$::isEmbedded, 0, gtknew('Title1', label => N("A tool to monitor your logs"))), +		if_(!$isFile, 0, gtkpack__(Gtk3::VBox->new(0,2), +                                     gtknew('Title2', label => N("Settings")),  							      # N("Show lines"), -							      gtkpack__(Gtk2::HBox->new(0,0), -									" " . N("Matching") . " ", my $e_yes = Gtk2::Entry->new, -									" " . N("but not matching") . " ", my $e_no = Gtk2::Entry->new -									) -							      ), -						    gtkpack_(Gtk2::HBox->new(0,0), -							     1, gtkadd(gtkset_border_width(Gtk2::Frame->new(N("Choose file")),2), -								       gtkpack(gtkset_border_width(Gtk2::VBox->new(0,0),0), -										map { $toggle{$_} = gtksignal_connect(Gtk2::CheckButton->new($files{$_}{desc}),  +							      gtkpack__(Gtk3::HBox->new(0,0), +									" " . N("Matching") . " ", my $e_yes = Gtk3::Entry->new, +									" " . N("but not matching") . " ", my $e_no = Gtk3::Entry->new +									), +						    gtkpack_(Gtk3::HBox->new(0,0), +							     1, gtkadd(gtkset_border_width(Gtk3::Frame->new(N("Choose file")),2), +								       gtkpack(gtkset_border_width(Gtk3::VBox->new(0,0),0), +										map { $toggle{$_} = gtksignal_connect(Gtk3::CheckButton->new($files{$_}{desc}),   														      clicked => sub {  															  $refcount_search++;   															  gtkset_sensitive($yy, $refcount_search); -														      }) } sort keys %files, +                                                                         }); +                                                        $toggle{$_}->set_sensitive(0) if !-f $files{$_}{file}; +                                                        $toggle{$_}; +                                                    } sort keys %files,  										)  								       ), -							     0, gtkadd(gtkset_border_width(Gtk2::Frame->new(N("Calendar")),2), -								       gtkpack__(gtkset_border_width(Gtk2::VBox->new(0,0),5), +							     0, gtkadd(gtkset_border_width(Gtk3::Frame->new(N("Calendar")),2), +								       gtkpack__(gtkset_border_width(Gtk3::VBox->new(0,0),5),  										 $cal_butt, $cal  										 )  								       )  							     ),  						    $yy,  						    ) -					  )  		    ), -		!$isExplain ? (1, gtkadd(Gtk2::Frame->new(N("Content of the file")), -					   create_scrolled_window($log_text) -					   )) : (1, create_scrolled_window($log_text)), -		if_(!$isExplain, 0, gtkadd(gtkset_border_width(gtkset_layout(Gtk2::HButtonBox->new, 'end'), 5), -					      if_(!$isFile, gtksignal_connect(Gtk2::Button->new(N("Mail alert")),  +		!$isExplain ? (0, gtknew('Title2', label => N("Content of the file")), +					   1, create_scrolled_window($log_text) +					   ) : (1, create_scrolled_window($log_text)), +		0, gtkadd(gtkset_border_width(gtkset_layout(Gtk3::HButtonBox->new, 'end'), 5), +					      if_(!$isFile, gtksignal_connect(Gtk3::Button->new(N("Mail alert")),   										clicked => sub {                                                         eval { alert_config() };                                                        my $err = $@; @@ -170,10 +178,9 @@ gtkadd($my_win->{window},                                                                       . "\n\n" . $err);                                                        }                                                    })), -					      gtksignal_connect(Gtk2::Button->new(N("Save")), clicked => \&save), -					      gtksignal_connect(Gtk2::Button->new($::isEmbedded ? N("Cancel") : N("Quit")), clicked => \&quit) +					      gtksignal_connect(Gtk3::Button->new(N("Save")), clicked => \&save), +					      gtksignal_connect(Gtk3::Button->new($::isEmbedded ? N("Cancel") : N("Quit")), clicked => \&quit)  					      ) -		    )  		)         ); @@ -183,14 +190,15 @@ $my_win->{window}->show_all;  search() if $isFile;  $my_win->main; -sub quit() { ugtk2->exit(0) } +sub quit() { ugtk3->exit(0) }  #-------------------------------------------------------------  # search functions  #-------------------------------------------------------------  sub search() { -    return if !$log_text->window; -    $log_text->window->freeze_updates; +    my $window = $log_text->get_window('widget'); +    return if !$window; +    $window->freeze_updates;      $log_buf->set_text('');      if ($isFile) {  	parse_file($File, $File); @@ -199,7 +207,7 @@ sub search() {  	    parse_file($files{$_}{file}, $files{$_}{desc}) if $toggle{$_}->get_active;  	}      } -    $log_text->window->thaw_updates; +    $window->thaw_updates;      $log_text->show;      gtkflush();  } @@ -216,13 +224,14 @@ sub parse_file {    $file =~ s/\.gz$//;    my ($pbar, $win_pb);    unless ($::isEmbedded && $isExplain) { -      gtkadd($win_pb = gtkset_modal(Gtk2::Window->new('toplevel'), 1), -             gtkpack(Gtk2::VBox->new(2,0), -                     Gtk2::Label->new(" " . N("please wait, parsing file: %s", $descr) . " "), -                     $pbar = Gtk2::ProgressBar->new +      local $::main_window = $my_win->{real_window}; +      gtkadd($win_pb = gtkset_modal(Gtk3::Window->new('toplevel'), 1), +             gtkpack(Gtk3::VBox->new(2,0), +                     Gtk3::Label->new(" " . N("please wait, parsing file: %s", $descr) . " "), +                     $pbar = Gtk3::ProgressBar->new                       )               ); -      $win_pb->set_transient_for($my_win->{real_window}) unless $::isEmbedded; +      $win_pb->set_transient_for($my_win->{real_window});        $win_pb->set_position('center');        $win_pb->realize;        $win_pb->show_all; @@ -240,7 +249,7 @@ sub parse_file {        $ey = $months[$month] . "\\s{1,2}$day\\s.*$ey.*\n";    } -  my @all = catMaybeCompressed($file); +  my @all = -e $file ? catMaybeCompressed($file) : N("Sorry, log file isn't available!");    if ($isExplain) {        my (@t, $t); @@ -268,7 +277,7 @@ sub parse_file {        $i++;        if ($pbar && $i % 10) {   	  $pbar->set_fraction($i/$taille); -       $win_pb->window->process_updates(1); # no gtkflush() because we do not want to refresh the TextView +       $win_pb->get_window->process_updates(1); # no gtkflush() because we do not want to refresh the TextView        }        logcolorize($_) if $test->($_); @@ -276,15 +285,23 @@ sub parse_file {    $win_pb->destroy if !$::isEmbedded || !$isExplain;    if ($isTail) { -      close $F; -      open $F, $file or die "E: $!"; -      local $_; -      while (<$F>) {} #to prevent to output the file twice.. -#      $log_text->set_point($log_text->get_length()); -      $timer ||= Glib::Timeout->add(1000, sub { -                                       logcolorize($_) while <$F>; -                                       seek $F, 0, 1; -                                   }); +      close $F if $F; +      if (open $F, $file) { +          local $_; +          while (<$F>) {}       #to prevent to output the file twice.. +          #      $log_text->set_point($log_text->get_length()); +          $timer ||= Glib::Timeout->add(1000, sub { +                                            logcolorize($_) while <$F>; +                                            seek $F, 0, 1; +                                        }); +      } else { +          my $error = $!; +          my $string = chomp_(`LC_ALL=C date '+%b %d %T'`) . " " . +            N("Error while opening \"%s\" log file: %s\n", $file, $error); +          # `` return non utf8 and concat of non utf8 & utf8 is non utf8: +          c::set_tagged_utf8($string); +          logcolorize($string); +      }    }         insert_text_n_scroll();  } @@ -293,12 +310,12 @@ sub parse_file {  ##########################################################################################  sub logcolorize { -    local $_ = shift; #my ($data) = @_; - +    my ($string) = @_;      # we get date & time if it is date & time (dmesg) -    s/(\D{3} .. (\d\d:\d\d:\d\d ))//; +    $string =~ s/(\D{3} .. (\d\d:\d\d:\d\d ))//;      my $timestamp = $isExplain ? $2 : $1; -    my @rec = split; +    my @rec = split(/\s/, $string); +    @rec = map { c::set_tagged_utf8($_); $_ } @rec if utf8::is_utf8($string);      log_output($timestamp,  'Bold', 'darkcyan'); # date & time if any...      # BUG: $col hasn't yet be reseted @@ -343,7 +360,7 @@ sub logcolorize {  } -#    log_output (Gtk2::TextView, [ [ ... ] ]) +#    log_output (Gtk3::TextView, [ [ ... ] ])  sub log_output {      my ($text, $font, $col) = @_;      my $tag = join('', $font, $col); @@ -352,7 +369,7 @@ sub log_output {  }  sub insert_text_n_scroll() { -    ugtk2::gtktext_insert($log_text, \@logs, append => !($isExplain || $isTail)); +    ugtk3::gtktext_insert($log_text, \@logs, append => 1);      $log_text->scroll_to_iter($log_buf->get_end_iter, 0, 1, 0.5, 0.5);      undef @logs;  } @@ -386,15 +403,14 @@ sub alert_config() {      my %services_to_check = map { $_ => 1 } split(':', $options{SERVICES});      $::isWizard = 1; -    use wizards; -    my $w = wizards->new;      my $mode;      my $cron_file = "/etc/cron.hourly/logdrake_service";      my %modes = (                     configure => N("Configure the mail alert system"),                     disable =>  N("Stop the mail alert system"),                    ); -    my $wiz = { +    require wizards; +    my $wiz = wizards->new({                 defaultimage => "logdrake.png",                 name => N("Mail alert"),                 pages => { @@ -429,8 +445,8 @@ sub alert_config() {                                     N("Please enter your email address below ") . "\n" .                                     N("and enter the name (or the IP) of the SMTP server you wish to use"),                                     data => [ -                                            { label => "Email address", val => \$options{MAIL} }, -                                            { label => "Email server", val => \$options{SMTP} }, +                                            { label => N("Email address"), val => \$options{MAIL} }, +                                            { label => N("Email server"), val => \$options{SMTP} },                                             ],                                     complete => sub {                                         if ($options{MAIL} !~ /[\w.-]*\@[\w.-]/ && !member($options{MAIL}, map { $_->[0] } list_passwd())) { @@ -457,8 +473,8 @@ sub alert_config() {                                    no_back => 1,                                  },                          }, -              }; -    $w->process($wiz, $in); +              }); +    $wiz->process($in);      return if $mode eq 'disable';      $options{SERVICES} = join ':', grep { $services_to_check{$_} } sort keys %services_to_check; @@ -489,7 +505,7 @@ if ($r) {                      To      => $options{MAIL},                      Subject => "DrakLog Mail Alert",                    }) -      or die "Can not open: $!\n"; +      or die "Cannot open: $!\n";      print $mailer $r;      $mailer->close;  }  | 
