X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=perl%2FAmanda%2FLogfile.swg;h=69b0846ab720a3b3acf41822412b4cac2ab01f22;hb=b116e9366c7b2ea2c2eb53b0a13df4090e176235;hp=ba04a02c99c59d6aabb61aeaa5d5203d42efd8b6;hpb=fd48f3e498442f0cbff5f3606c7c403d0566150e;p=debian%2Famanda diff --git a/perl/Amanda/Logfile.swg b/perl/Amanda/Logfile.swg index ba04a02..69b0846 100644 --- a/perl/Amanda/Logfile.swg +++ b/perl/Amanda/Logfile.swg @@ -35,7 +35,7 @@ amglue_export_ok( open_logfile get_logline close_logfile - log_add + log_add log_add_full ); @@ -76,6 +76,7 @@ amglue_add_constant(P_AMDUMP, program_t); amglue_add_constant(P_AMIDXTAPED, program_t); amglue_add_constant(P_AMFETCHDUMP, program_t); amglue_add_constant(P_AMCHECKDUMP, program_t); +amglue_add_constant(P_AMVAULT, program_t); amglue_copy_to_tag(program_t, constants); /* TODO: support for writing logfiles is omitted for the moment. */ @@ -115,13 +116,20 @@ typedef int LOGLINE_RETURN; LOGLINE_RETURN get_logline(FILE *logfile); %rename(log_add) log_add_; +%rename(log_add_full) log_add_full_; %inline %{ static void log_add_(logtype_t typ, char *message) { log_add(typ, "%s", message); } +static void log_add_full_(logtype_t typ, char *pname, char *message) +{ + log_add_full(typ, pname, "%s", message); +} %} +void log_rename(char *datestamp); + typedef struct { %extend { /* destructor */ @@ -133,6 +141,7 @@ typedef struct { %immutable; char *timestamp; + char *write_timestamp; char *hostname; char *diskname; int level; @@ -240,7 +249,7 @@ typedef struct { } amglue_export_ok( - find_log search_logfile dumps_match + find_log search_logfile dumps_match log_rename match_host match_disk match_datestamp match_level ); @@ -296,6 +305,8 @@ amglue_export_ok( amglue_export_ok( find_all_logs find_latest_log + get_current_log_timestamp + make_stats ); %perlcode %{ @@ -317,4 +328,47 @@ sub find_latest_log return $logs[-1]; } +use Amanda::Config; +use Amanda::Debug; + +sub get_current_log_timestamp +{ + my $logfile = Amanda::Config::config_dir_relative( + Amanda::Config::getconf($Amanda::Config::CNF_LOGDIR)) . "/log"; + if (! -f $logfile) { + Amanda::Debug::warning("no current logfile '$logfile'"); + return undef; + } + + my $logh = open_logfile("$logfile"); + if (!$logh) { + Amanda::Debug::warning("could not open logfile '$logfile'"); + return undef; + } + while (my ($type, $prog, $str) = get_logline($logh)) { + if ($type == $L_START) { + my ($ts) = ($str =~ /date (\d+)/); + return $ts if $ts; + } + } + + # no timestamp, apparently + Amanda::Debug::warning("no current timestamp found in logfile"); + return undef; +} + +sub make_stats { + my ($size, $duration, $orig_kb) = @_; + + $duration = 0.1 if $duration <= 0; # prevent division by zero + my $kb = $size/1024; + my $kps = "$kb.0"/$duration; # Perlish cast from BigInt to float + + if (defined $orig_kb) { + return sprintf("[sec %f kb %d kps %f orig-kb %d]", $duration, $kb, $kps, $orig_kb); + } else { + return sprintf("[sec %f kb %d kps %f]", $duration, $kb, $kps); + } +} + %}