File: benchmark_server_descriptor_zoossh.go

package info (click to toggle)
python-stem 1.8.1-2.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 8,152 kB
  • sloc: python: 33,747; java: 312; makefile: 124; sh: 14
file content (68 lines) | stat: -rw-r--r-- 1,289 bytes parent folder | download | duplicates (5)
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
package main

import (
  "fmt"
  "os"
  "path/filepath"
  "time"

  "git.torproject.org/user/phw/zoossh.git"
)

var processedDescs int64 = 0
var totalBw uint64 = 0

func Min(a uint64, b uint64, c uint64) uint64 {
  min := a

  if b < min {
    min = b
  }

  if c < min {
    min = c
  }

  return min
}

func ProcessDescriptors(path string, info os.FileInfo, err error) error {
  if _, err := os.Stat(path); err != nil {
    return err
  }

  if info.IsDir() {
    return nil
  }

  consensus, err := zoossh.ParseDescriptorFile(path)
  if err != nil {
    return err
  }

  if (processedDescs % 100) == 0 {
    fmt.Printf(".")
  }

  for _, getDesc := range consensus.RouterDescriptors {
    desc := getDesc()
    totalBw += Min(desc.BandwidthAvg, desc.BandwidthBurst, desc.BandwidthObs)
    processedDescs++
  }

  return nil
}

func main() {
  before = time.Now()
  filepath.Walk("server-descriptors-2015-11", ProcessDescriptors)
  fmt.Println()
  after = time.Now()

  duration = after.Sub(before)
  fmt.Println("Total time for descriptors:", duration)
  fmt.Printf("Time per descriptor: %dns\n",
    duration.Nanoseconds()/processedDescs)
  fmt.Printf("Processed %d descriptors.\n", processedDescs)
  fmt.Printf("Average advertised bandwidth: %d\n", totalBw/uint64(processedDescs))
}