goBlockchainDataAnalysis/mongoOperations.go
mongoOperations.goRaw
1package main
2
3import (
4 "log"
5
6 mgo "gopkg.in/mgo.v2"
7 "gopkg.in/mgo.v2/bson"
8)
9
10func getSession() (*mgo.Session, error) {
11 session, err := mgo.Dial("mongodb://" + config.Mongodb.IP)
12 if err != nil {
13 panic(err)
14 }
15 //defer session.Close()
16
17 // Optional. Switch the session to a monotonic behavior.
18 session.SetMode(mgo.Monotonic, true)
19
20 // Optional. Switch the session to a monotonic behavior.
21 session.SetMode(mgo.Monotonic, true)
22
23 return session, err
24}
25func getCollection(session *mgo.Session, collection string) *mgo.Collection {
26
27 c := session.DB(config.Mongodb.Database).C(collection)
28 return c
29}
30
31/*
32func saveBlock(c *mgo.Collection, block BlockModel) {
33 //first, check if the item already exists
34 result := BlockModel{}
35 err := c.Find(bson.M{"hash": block.Hash}).One(&result)
36 if err != nil {
37 //item not found, so let's add a new entry
38 err = c.Insert(block)
39 check(err)
40 } else {
41 err = c.Update(bson.M{"hash": block.Hash}, &block)
42 if err != nil {
43 log.Fatal(err)
44 }
45 }
46
47}
48*/
49
50func getAllNodes() ([]NodeModel, error) {
51 result := []NodeModel{}
52 iter := nodeCollection.Find(bson.M{}).Limit(10000).Iter()
53 err := iter.All(&result)
54 return result, err
55}
56
57func saveNode(c *mgo.Collection, node NodeModel) {
58 //first, check if the node already exists
59 result := NodeModel{}
60 err := c.Find(bson.M{"id": node.Id}).One(&result)
61 if err != nil {
62 //node not found, so let's add a new entry
63 err = c.Insert(node)
64 check(err)
65 } else {
66 /*err = c.Update(bson.M{"id": node.Id}, &node)
67 if err != nil {
68 log.Fatal(err)
69 }
70 */
71 }
72}
73
74func getAllEdges() ([]EdgeModel, error) {
75 result := []EdgeModel{}
76 iter := edgeCollection.Find(bson.M{}).Limit(10000).Iter()
77 err := iter.All(&result)
78 return result, err
79}
80func saveEdge(c *mgo.Collection, edge EdgeModel) {
81 //first, check if the edge already exists
82 result := EdgeModel{}
83 err := c.Find(bson.M{"txid": edge.Txid, "to": edge.To, "from": edge.From, "blockheight": edge.BlockHeight, "label": edge.Label}).One(&result)
84 if err != nil {
85 //edge not found, so let's add a new entry
86 err = c.Insert(edge)
87 check(err)
88 } else {
89 err = c.Update(bson.M{"txid": edge.Txid, "to": edge.To, "from": edge.From, "blockheight": edge.BlockHeight, "label": edge.Label}, &edge)
90 if err != nil {
91 log.Fatal(err)
92 }
93 }
94}
95
96func nodeInNodes(nodes []NodeModel, node NodeModel) bool {
97 for _, n := range nodes {
98 if n.Id == node.Id {
99 return true
100 }
101 }
102 return false
103}
104func edgeInEdges(edges []EdgeModel, edge EdgeModel) bool {
105 for _, e := range edges {
106 if e.From == edge.From && e.To == edge.To && e.Label == edge.Label && e.BlockHeight == edge.BlockHeight {
107 return true
108 }
109 }
110 return false
111}
112func saveAddress(address AddressModel) {
113
114 result := AddressModel{}
115 err := addressCollection.Find(bson.M{"hash": address.Hash}).One(&result)
116 if err != nil {
117 //address not found, so let's add a new entry
118 err = addressCollection.Insert(address)
119 check(err)
120
121 //stats addr
122 stats := getStats()
123 stats.AddrCount++
124 updateStats(stats)
125 }
126}
127func saveTx(tx TxModel) {
128
129 result := TxModel{}
130 err := txCollection.Find(bson.M{"txid": tx.Txid}).One(&result)
131 if err != nil {
132 //tx not found, so let's add a new entry
133 err = txCollection.Insert(tx)
134 check(err)
135 }
136}
137
138func saveBlock(block BlockModel) {
139
140 result := BlockModel{}
141 err := blockCollection.Find(bson.M{"hash": block.Hash}).One(&result)
142 if err != nil {
143 //block not found, so let's add a new entry
144 err = blockCollection.Insert(block)
145 check(err)
146 }
147}