Schrift
[thread]10922[/thread]

Laufzeiten anhand von Logfileeinträge ermitteln



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
wiederlader
 2007-11-29 14:50
#103270 #103270
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,
nachdem ich schon längere Zeit nichts mehr mit Perl gemacht habe steht eine neue Herausforderung an. Leider tue ich mich damit ziemlich schwer.
Ich habe ein Logfile "logfile.txt" (wird täglich neu geschrieben) dass wie folgt aufgebaut ist (in der ersten Zeile steht immer nur das Datum):

17.11.2007
17.11.2007 06:02:42 START Clients = 2
17.11.2007 06:02:42 Login=T718052 ActionId=1-VIDCK8 GF=Bereitstellung
17.11.2007 06:02:42 lese TSAM Felder
17.11.2007 06:02:43 Datei erzeugt: 1VIDCK8.xml
17.11.2007 06:02:43 SID anfragen
17.11.2007 06:02:44 SID fertig = 00000011952757638269
17.11.2007 06:02:44 lese TSAM Felder fertig
17.11.2007 06:02:44 STOPP
17.11.2007 06:04:19 START Clients = 2
17.11.2007 06:04:19 Login=T718756 ActionId=1-VIDCL4 GF=Bereitstellung
17.11.2007 06:04:19 lese TSAM Felder
17.11.2007 06:04:21 Datei erzeugt: 1VIDCL4.xml
17.11.2007 06:04:21 SID anfragen
17.11.2007 06:04:25 SID fertig = 00000119527586128810
17.11.2007 06:04:25 lese TSAM Felder fertig
17.11.2007 06:04:25 STOPP

Im Logfile werden pro Bearbeitung 8 Zeilen (von START bis STOPP) geschrieben. Ich möchte jetzt für jede Bearbeitung die Laufzeit zwischen dem Step "SID anfragen" und "SID fertig" ermitteln und wie folgt ausgeben:

Login=T718052 ActionId=1-VIDCK8 GF=Bereitstellung > 1 Sekunde(n)
Login=T718756 ActionId=1-VIDCL4 GF=Bereitstellung > 4 Sekunde(n)

Mir fehlt einfach die Idee wie ich die Auswertung umsetzten kann.
Ich bin schon mal wie folgt angefangen, habe mich aber festgefahren.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!perl -w
use strict;
use warnings;

my $KWS_Logfile = "D:/logfile.txt";
open KWS_LOGFILE, "<$KWS_Logfile";
my @kws_logfile =  <KWS_LOGFILE>;
close KWS_LOGFILE;

my $logfile_date = shift(@kws_logfile);  # erste Zeile entfernen und in Scalar übergeben
chomp @kws_logfile;                      # Alle Newline-Zeichen entfernen

my $Spalten_Logfile = "D:/logfile_spalten.txt";
open SPALTEN_LOGFILE, ">$Spalten_Logfile";

foreach (@kws_logfile) {
         my $spalten = join ";", @kws_logfile[0..7];
         print SPALTEN_LOGFILE "$spalten\n";
         foreach (0..7) {
                  shift(@kws_logfile)
         }
}

Kann mir vielleicht jemand einen Tipp geben wie ich weiter vorgehen könnte bzw. wie man die Sache anpacken muss.
DANKE
Gruß Markus
renee
 2007-11-29 14:59
#103272 #103272
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Steht immer die .xml-Datei *vor* dem "SID anfragen"?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
wiederlader
 2007-11-29 15:10
#103273 #103273
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
renee+2007-11-29 13:59:44--
Steht immer die .xml-Datei *vor* dem "SID anfragen"?

Ja, die .xml-Datei steht immer vor dem SID anfragen
renee
 2007-11-29 15:16
#103275 #103275
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das hier dürfte schonmal ein Anfang sein:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %hash;

{
    local $/ = "STOPP\n";
    while( my $entry = <DATA> ){
        my ($anfrage,$end,$id,$log);
        for my $line ( split /\r?\n/, $entry ){
            if( $line =~ /Login/ ){
                $log = (split /\s+/, $line, 3)[-1];
            }
            elsif( $line =~ /SID anfragen/ ){
                ($anfrage) = (split /\s+/, $line, 3)[1];
            }
            elsif( $line =~ /SID fertig/ ){
                ($end,$id) = (split /\s+/, $line)[1,-1];
            }
        }

        $hash{$id} = {
            ID     => $id,
            ANFANG => $anfrage,
            ENDE   => $end,
            LOG    => $log,
        };
    }
}

print Dumper \%hash;

__DATA__
17.11.2007 06:02:42 START Clients = 2
17.11.2007 06:02:42 Login=T718052 ActionId=1-VIDCK8 GF=Bereitstellung
17.11.2007 06:02:42 lese TSAM Felder
17.11.2007 06:02:43 Datei erzeugt: 1VIDCK8.xml
17.11.2007 06:02:43 SID anfragen
17.11.2007 06:02:44 SID fertig = 00000011952757638269
17.11.2007 06:02:44 lese TSAM Felder fertig
17.11.2007 06:02:44 STOPP
17.11.2007 06:04:19 START Clients = 2
17.11.2007 06:04:19 Login=T718756 ActionId=1-VIDCL4 GF=Bereitstellung
17.11.2007 06:04:19 lese TSAM Felder
17.11.2007 06:04:21 Datei erzeugt: 1VIDCL4.xml
17.11.2007 06:04:21 SID anfragen
17.11.2007 06:04:25 SID fertig = 00000119527586128810
17.11.2007 06:04:25 lese TSAM Felder fertig
17.11.2007 06:04:25 STOPP
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-11-29 15:29
#103276 #103276
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use DateTime;

my @array;

{
    local $/ = "STOPP\n";
    while( my $entry = <DATA> ){
        my ($anfrage,$end,$id,$log);
        for my $line ( split /\r?\n/, $entry ){
            if( $line =~ /Login/ ){
                $log = (split /\s+/, $line, 3)[-1];
            }
            elsif( $line =~ /SID anfragen/ ){
                ($anfrage) = (split /\s+/, $line, 3)[1];
            }
            elsif( $line =~ /SID fertig/ ){
                ($end,$id) = (split /\s+/, $line)[1,-1];
            }
        }

        my @a = split /:/, $anfrage;
        my @e = split /:/, $end;
        my $anfang = DateTime->new( day => 1, month => 1, year => 107, second => $a[2], minute => $a[1], hour => $a[0] );
        my $ende   = DateTime->new( day => 1, month => 1, year => 107, second => $e[2], minute => $e[1], hour => $e[0] );
        my $diff   = $ende - $anfang;
        my $string    = sprintf "%s > Dauer: %s Sekunde(n)", $log, $diff->delta_seconds;
        push @array, $string;
    }
}

print Dumper \@array;

__DATA__
17.11.2007 06:02:42 START Clients = 2
17.11.2007 06:02:42 Login=T718052 ActionId=1-VIDCK8 GF=Bereitstellung
17.11.2007 06:02:42 lese TSAM Felder
17.11.2007 06:02:43 Datei erzeugt: 1VIDCK8.xml
17.11.2007 06:02:43 SID anfragen
17.11.2007 06:02:44 SID fertig = 00000011952757638269
17.11.2007 06:02:44 lese TSAM Felder fertig
17.11.2007 06:02:44 STOPP
17.11.2007 06:04:19 START Clients = 2
17.11.2007 06:04:19 Login=T718756 ActionId=1-VIDCL4 GF=Bereitstellung
17.11.2007 06:04:19 lese TSAM Felder
17.11.2007 06:04:21 Datei erzeugt: 1VIDCL4.xml
17.11.2007 06:04:21 SID anfragen
17.11.2007 06:04:25 SID fertig = 00000119527586128810
17.11.2007 06:04:25 lese TSAM Felder fertig
17.11.2007 06:04:25 STOPP
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
wiederlader
 2007-11-29 15:32
#103277 #103277
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
Hallo Renee,
danke für die schnelle Antwort. Ich muss den Code jetzt erst einmal in Ruhe durchgehen um Ihn zu verstehen und nachvollziehen zu können . Ich werde mich melden wenn ich weiter bin (komme ich aber erst am Wochenende zu).
Nochmals Danke, Gruß Markus
wiederlader
 2007-12-06 14:12
#103504 #103504
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
Hallo Renee,
hallo Zusammen,

so, ich bin den Code durchgegangen. Auf den Schritt "local $/ = "STOPP\n"; wäre ich nie gekommen, einfach klasse.

Leider ist das Module "DateTime" ist auf meinem Windows Rechner nicht installierbar (Error installing package 'DATETIME': Read a PPD for 'DATETIME', but it is not intended for this build of Perl (MSWin32-x86-multi-thread)

Gibt es hier noch eine andere Möglichkeit/Modul.

mit
Code (perl): (dl )
my $jetzt = time();
bekomme ich ja den Zeitwert wie folgt ausgegeben: 1196942734
Wie kann ich denn die Uhrzeit ($anfang und $ende) 06 02 43 bzw. 06:02:43 in berechenbare Zahlen umwandeln um die differenz auszurechnen?
Danke
Gruß, Markus
GwenDragon
 2007-12-06 14:21
#103505 #103505
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
wiederlader+2007-12-06 13:12:11--

Leider ist das Module "DateTime" ist auf meinem Windows Rechner nicht installierbar (Error installing package 'DATETIME': Read a PPD for 'DATETIME', but it is not intended for this build of Perl (MSWin32-x86-multi-thread)

Gibt es hier noch eine andere Möglichkeit/Modul.

Welches perl verwendest du?
Welches Repository für PPM?
wiederlader
 2007-12-06 14:24
#103506 #103506
User since
2007-01-03
36 Artikel
BenutzerIn
[default_avatar]
GwenDragon+2007-12-06 13:21:24--
Welches perl verwendest du?
Welches Repository für PPM?


This is perl, v5.6.1 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2001, Larry Wall

Binary build 638 provided by ActiveState Corp. http://www.activestate.com/
ActiveState is a division of Sophos.
Built Apr 13 2004 19:24:21

----------------------------------------------

PPM interactive shell (2.2.0)

----
Modedit Gwendragon:
Zitat repariert
----
GwenDragon
 2007-12-06 14:35
#103507 #103507
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Bei meinem Perl 5.6 ist das unter PPM 3 so:

ppm> rep
Repositories:
[1] THX5
[ ] AS
[ ] AS2
[ ] Bribes
[ ] lokal
ppm> rep descr 1
Describing Active Repository 1:
Name: THX5
Location: http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn...
Type: PPMServer 2.0
ppm> s DateTime
Searching in Active Repositories
1. DateTime [0.2901] DateTime base objects
2. DateTime-Locale [0.22] Localization support for DateTime.pm
3. DateTime-TimeZone [0.37] Time zone object base class and factory
ppm> descr 1
====================
Package 1:
Name: DateTime
Version: 0.2901
Author: Dave Rolsky <autarch@urth.org>
Title: DateTime
Abstract: DateTime base objects
Location: THX5
Prerequisites:
1. DateTime-Locale 0.21
2. DateTime-TimeZone 0.26
3. Params-Validate 0.76
Available Platforms:
1. MSWin32-x86-multi-thread
====================

ppm>


Also es gibt schon ein Repo wie du siehst ;)
Füge mal TheoryX5 alias THX5 (Dast ist Randy Kobes Repo) hinzu und suche dort.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-11-29 14:50.