arnaucube
arnaucube/goBlockchainDataAnalysisPublic Self-hosted repository
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}
122func saveTx(tx TxModel) {
123
124	result := TxModel{}
125	err := txCollection.Find(bson.M{"txid": tx.Txid}).One(&result)
126	if err != nil {
127		//tx not found, so let's add a new entry
128		err = txCollection.Insert(tx)
129		check(err)
130	}
131}
132
133func saveBlock(block BlockModel) {
134
135	result := BlockModel{}
136	err := blockCollection.Find(bson.M{"hash": block.Hash}).One(&result)
137	if err != nil {
138		//block not found, so let's add a new entry
139		err = blockCollection.Insert(block)
140		check(err)
141	}
142}