Thread Berechnung der Laenge von Unterbrechungen im HSDPA netz (37 answers)
Opened by bowkatz at 2009-07-08 10:02

renee
 2009-07-08 13:36
#122974 #122974
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich hatte gerade mal etwas Lust zu spielen:

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/usr/bin/perl

# strict und warnings sollten
# immer Pflicht sein
use strict;
use warnings;

# hier werden die ganzen daten gespeichert.
# ich nehme ein array, damit ich die zeitliche
# reihenfolge beibehalten kann.
my @data;

my $counter   = 0;
my $in_period = 0;
my $last_time = '';

# <DATA> ist der "Filehandle" für __DATA__
# hier kann man vorher eine Dateinehmen und
# einen beliebigen Filehandle einsetzen
while( my $line = <DATA> ) {

    # ueberspringe die erste zeile, da sie nur
    # metainformationen enthaelt
    next if $. == 1;

    # entferne den zeilenumbruch
    chomp $line;

    # teile den string an den leerzeichen
    my ($time,$frams,$bytes) = split /\s+/, $line;

    # wenn daten gesendet wurden
    unless( $bytes == 0 ) {
        # und vorher keine daten gesendet wurden
        if( $in_period ) {
            # speichere die endzeit der auszeit
            $data[$counter]->{stop} = $last_time;

            # zaehle den index hoch, da jetzt eine neue
            # auszeit bei der nächsten 0 beginnt
            $counter++;
        }

        # da wieder daten gesendet wurden, bin ich
        # nicht mehr in der auszeit
        $in_period = 0;

        # gehe zum nächsten schleifendurchlauf
        next;
    }

    # da ich bei gesendeten daten vorher mit next
    # weitergegangen waere, bin ich jetzt auf jedenfall
    # in einer auszeit
    $in_period = 1;
    
    # setze die startzeit
    $data[$counter]->{start} = $time unless $data[$counter]->{start};
    
    # eine weitere sekunde wurden keine daten gesendet
    $data[$counter]->{sum}++;
    $last_time = $time;
}

# gebe die ueberschriften aus, zu den formaten
# siehe perldoc -f sprintf
print sprintf "%20s\t%20s\t%10s\n", 'Start', 'Stop', 'Sekunden';

# fuer jede auszeit
for my $entry ( @data ) {
    # gib die daten aus
    print sprintf "%20s\t%20s\t%10d\n", 
                    $entry->{start},
                    $entry->{stop},
                    $entry->{sum};
}

__DATA__
Time |frames| bytes
000.000-001.000 1 74
001.000-002.000 0 0
002.000-003.000 0 0
003.000-004.000 6 1300
004.000-005.000 16 3102
005.000-006.000 61 36106
006.000-007.000 5 3295
007.000-008.000 0 0
008.000-009.000 0 0
009.000-010.000 0 0
010.000-011.000 0 0
011.000-012.000 0 0
012.000-013.000 0 0
013.000-014.000 0 0
014.000-015.000 0 0
015.000-016.000 0 0
016.000-017.000 0 0
017.000-018.000 0 0
018.000-019.000 0 0
019.000-020.000 0 0
020.000-021.000 0 0
021.000-022.000 0 0
022.000-023.000 0 0
023.000-024.000 0 0
024.000-025.000 1 74
025.000-026.000 0 0
026.000-027.000 0 0
027.000-028.000 0 0
028.000-029.000 0 0
029.000-030.000 0 0
030.000-031.000 0 0
031.000-032.000 0 0
032.000-033.000 0 0
033.000-034.000 1 833
034.000-035.000 49 29217
035.000-036.000 1 54
036.000-037.000 0 0
037.000-038.000 0 0
038.000-039.000 3 1047
039.000-040.000 12 2106
040.000-041.000 120 58336
041.000-042.000 1 54
042.000-043.000 1 74
043.000-044.000 0 0
044.000-045.000 0 0
045.000-046.000 0 0
046.000-047.000 0 0
047.000-048.000 0 0
048.000-049.000 1 74
049.000-050.000 0 0
050.000-051.000 0 0
051.000-052.000 0 0
052.000-053.000 0 0
053.000-054.000 0 0
054.000-055.000 0 0
055.000-056.000 0 0
056.000-057.000 0 0
057.000-058.000 0 0
058.000-059.000 0 0
059.000-060.000 0 0
060.000-061.000 1 74
061.000-062.000 0 0
062.000-063.000 0 0
063.000-064.000 0 0
064.000-065.000 1 72
065.000-066.000 5 837
066.000-067.000 265 169683
067.000-068.000 66 38246
068.000-069.000 16 6733
069.000-070.000 3 951
070.000-071.000 0 0
071.000-072.000 0 0
072.000-073.000 1 74
073.000-074.000 0 0
074.000-075.000 0 0
075.000-076.000 0 0
076.000-077.000 0 0
077.000-078.000 0 0
078.000-079.000 0 0
079.000-080.000 0 0
080.000-081.000 1 75
081.000-082.000 5 954
082.000-083.000 65 39896
083.000-084.000 178 98021
084.000-085.000 29 5281
085.000-086.000 0 0
086.000-087.000 2 48
087.000-088.000 0 0
088.000-089.000 0 0
089.000-090.000 0 0
090.000-091.000 0 0
091.000-092.000 14 476
092.000-093.000 2 96
093.000-094.000 2 96
094.000-095.000 11 708
095.000-096.000 1 54
096.000-097.000 0 0
097.000-098.000 7 1307
098.000-099.000 113 68332
099.000-100.000 18 13716
100.000-101.000 10 4654
101.000-102.000 2 48


Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
               Start                    Stop      Sekunden
001.000-002.000 002.000-003.000 2
007.000-008.000 023.000-024.000 17
025.000-026.000 032.000-033.000 8
036.000-037.000 037.000-038.000 2
043.000-044.000 047.000-048.000 5
049.000-050.000 059.000-060.000 11
061.000-062.000 063.000-064.000 3
070.000-071.000 071.000-072.000 2
073.000-074.000 079.000-080.000 7
085.000-086.000 085.000-086.000 1
087.000-088.000 090.000-091.000 4
096.000-097.000 096.000-097.000 1

Last edited: 2009-07-08 21:52:12 +0200 (CEST)
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/

View full thread Berechnung der Laenge von Unterbrechungen im HSDPA netz