~ubuntu-branches/ubuntu/utopic/hockeypuck/utopic-proposed

« back to all changes in this revision

Viewing changes to build/src/github.com/cmars/conflux/cmd/dump-leveldb/main.go

  • Committer: Package Import Robot
  • Author(s): Casey Marshall
  • Date: 2014-04-13 20:06:01 UTC
  • Revision ID: package-import@ubuntu.com-20140413200601-oxdlqn1gy0x8m55u
Tags: 1.0~rel20140413+7a1892a~trusty
Hockeypuck 1.0 release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package main
 
2
 
 
3
import (
 
4
        "encoding/json"
 
5
        "fmt"
 
6
        "os"
 
7
 
 
8
        . "github.com/cmars/conflux"
 
9
        . "github.com/cmars/conflux/recon"
 
10
        "github.com/cmars/conflux/recon/leveldb"
 
11
)
 
12
 
 
13
func die(err error) {
 
14
        panic(err)
 
15
}
 
16
 
 
17
func walk(tree PrefixTree) {
 
18
        fmt.Println("[")
 
19
        var nodes []PrefixNode
 
20
        root, err := tree.Root()
 
21
        if err != nil {
 
22
                die(err)
 
23
        }
 
24
        nodes = append(nodes, root)
 
25
        first := true
 
26
        for len(nodes) > 0 {
 
27
                if first {
 
28
                        first = false
 
29
                } else {
 
30
                        fmt.Println(",")
 
31
                }
 
32
                node := nodes[len(nodes)-1]
 
33
                nodes = nodes[:len(nodes)-1]
 
34
                visit(node)
 
35
                if !node.IsLeaf() {
 
36
                        nodes = append(node.Children(), nodes...)
 
37
                }
 
38
        }
 
39
        fmt.Println("]")
 
40
}
 
41
 
 
42
func visit(node PrefixNode) {
 
43
        render := struct {
 
44
                SValues      []*Zp
 
45
                NumElements  int
 
46
                Key          string
 
47
                Leaf         bool
 
48
                Fingerprints []string
 
49
                Children     []string
 
50
        }{
 
51
                node.SValues(),
 
52
                node.Size(),
 
53
                node.Key().String(),
 
54
                node.IsLeaf(),
 
55
                []string{},
 
56
                []string{},
 
57
        }
 
58
        if node.IsLeaf() {
 
59
                for _, element := range node.Elements() {
 
60
                        render.Fingerprints = append(render.Fingerprints, fmt.Sprintf("%x", element.Bytes()))
 
61
                }
 
62
        }
 
63
        for _, child := range node.Children() {
 
64
                render.Children = append(render.Children, child.Key().String())
 
65
        }
 
66
        out, err := json.MarshalIndent(render, "", "\t")
 
67
        if err != nil {
 
68
                die(err)
 
69
        }
 
70
        os.Stdout.Write(out)
 
71
        os.Stdout.Write([]byte("\n"))
 
72
}
 
73
 
 
74
func main() {
 
75
        var dbDir string
 
76
        if len(os.Args) < 2 {
 
77
                fmt.Println("Usage: <leveldb path>")
 
78
                os.Exit(1)
 
79
        }
 
80
        dbDir = os.Args[1]
 
81
        settings := leveldb.DefaultSettings()
 
82
        settings.Set("conflux.recon.leveldb.path", dbDir)
 
83
        ptree, err := leveldb.New(settings)
 
84
        if err != nil {
 
85
                die(err)
 
86
        }
 
87
        err = ptree.Create()
 
88
        if err != nil {
 
89
                die(err)
 
90
        }
 
91
        walk(ptree)
 
92
}