bing
2 years ago
2 changed files with 139 additions and 1 deletions
@ -0,0 +1,137 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"bufio" |
|||
"flag" |
|||
"fmt" |
|||
"io" |
|||
"log" |
|||
"os" |
|||
"strconv" |
|||
"strings" |
|||
) |
|||
|
|||
const ( |
|||
Send = "二进制消息 2.6 kB" |
|||
Recieve = "二进制消息 3.9 kB" |
|||
Broadcast = "二进制消息 16 B" |
|||
) |
|||
|
|||
type message struct { |
|||
Type int |
|||
Size int |
|||
Time int64 |
|||
} |
|||
|
|||
func time2int64(t string)int64{ |
|||
strs := strings.Split(t, ":") |
|||
if len(strs) != 3 { |
|||
return 0 |
|||
} |
|||
hour := strs[0] |
|||
minute := strs[1] |
|||
seconds := strings.Split(strs[2], ".") |
|||
if len(seconds) != 2 { |
|||
return 0 |
|||
} |
|||
second := seconds[0] |
|||
mill := seconds[1] |
|||
|
|||
ms, err := strconv.ParseInt(mill, 10, 64) |
|||
if err != nil { |
|||
log.Println(err) |
|||
return 0 |
|||
} |
|||
h, err := strconv.ParseInt(hour, 10, 64) |
|||
if err != nil { |
|||
log.Println(err) |
|||
return 0 |
|||
} |
|||
ms = ms + h *3600*1000 |
|||
m, err := strconv.ParseInt(minute, 10, 64) |
|||
if err != nil { |
|||
log.Println(err) |
|||
return 0 |
|||
} |
|||
ms = ms + m * 60 *1000 |
|||
s, err := strconv.ParseInt(second, 10, 64) |
|||
if err != nil { |
|||
log.Println(err) |
|||
return 0 |
|||
} |
|||
ms = ms + s *1000 |
|||
return ms |
|||
} |
|||
|
|||
func readdelay(file string)([]message, error){ |
|||
f, err := os.Open(file) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
defer f.Close() |
|||
reader := bufio.NewReader(f) |
|||
res := []message{} |
|||
t := 0 |
|||
for { |
|||
line, err := reader.ReadString('\n') |
|||
if err != nil { |
|||
if err == io.EOF { |
|||
return res, nil |
|||
} |
|||
return res, err |
|||
} |
|||
line = strings.Trim(strings.Trim(strings.Trim(line, " "), "\t"), "\n") |
|||
switch { |
|||
case strings.Contains(line, Send): |
|||
t = 1 |
|||
case strings.Contains(line, Recieve): |
|||
t = 2 |
|||
case strings.Contains(line, Broadcast): |
|||
t = 3 |
|||
default: |
|||
msg := message{Type: t, Time: time2int64(line)} |
|||
switch t { |
|||
case 1 : |
|||
res = append(res, msg) |
|||
case 2: |
|||
res = append(res, msg) |
|||
} |
|||
t = 0 |
|||
} |
|||
} |
|||
} |
|||
|
|||
func avg(delays ...int64)int64{ |
|||
if len(delays) == 0 { |
|||
return 0 |
|||
} |
|||
var total int64 |
|||
for _, d := range delays { |
|||
total = total + d |
|||
} |
|||
return total/int64(len(delays)) |
|||
} |
|||
|
|||
func main(){ |
|||
var file string |
|||
flag.StringVar(&file, "f", "delay.log", "ssss") |
|||
flag.Parse() |
|||
messages, err := readdelay(file) |
|||
if err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
log.Println("got ", len(messages), " messages") |
|||
delays := []int64{} |
|||
var start int64 |
|||
for _, msg := range messages { |
|||
if msg.Type == 1 { |
|||
start = msg.Time |
|||
} |
|||
if start != 0 && msg.Type == 2 { |
|||
delay := msg.Time - start |
|||
start = 0 |
|||
delays = append(delays, delay) |
|||
} |
|||
} |
|||
fmt.Println(avg(delays...)) |
|||
} |
Loading…
Reference in new issue