package main
|
|
|
|
import (
|
|
"log"
|
|
|
|
mgo "gopkg.in/mgo.v2"
|
|
"gopkg.in/mgo.v2/bson"
|
|
)
|
|
|
|
func getSession() (*mgo.Session, error) {
|
|
session, err := mgo.Dial("mongodb://" + config.Mongodb.IP)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
//defer session.Close()
|
|
|
|
// Optional. Switch the session to a monotonic behavior.
|
|
session.SetMode(mgo.Monotonic, true)
|
|
|
|
// Optional. Switch the session to a monotonic behavior.
|
|
session.SetMode(mgo.Monotonic, true)
|
|
|
|
return session, err
|
|
}
|
|
func getCollection(session *mgo.Session, collection string) *mgo.Collection {
|
|
|
|
c := session.DB(config.Mongodb.Database).C(collection)
|
|
return c
|
|
}
|
|
|
|
/*
|
|
func saveBlock(c *mgo.Collection, block BlockModel) {
|
|
//first, check if the item already exists
|
|
result := BlockModel{}
|
|
err := c.Find(bson.M{"hash": block.Hash}).One(&result)
|
|
if err != nil {
|
|
//item not found, so let's add a new entry
|
|
err = c.Insert(block)
|
|
check(err)
|
|
} else {
|
|
err = c.Update(bson.M{"hash": block.Hash}, &block)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
}
|
|
*/
|
|
|
|
func getAllNodes() ([]NodeModel, error) {
|
|
result := []NodeModel{}
|
|
iter := nodeCollection.Find(bson.M{}).Limit(10000).Iter()
|
|
err := iter.All(&result)
|
|
return result, err
|
|
}
|
|
|
|
func saveNode(c *mgo.Collection, node NodeModel) {
|
|
//first, check if the node already exists
|
|
result := NodeModel{}
|
|
err := c.Find(bson.M{"id": node.Id}).One(&result)
|
|
if err != nil {
|
|
//node not found, so let's add a new entry
|
|
err = c.Insert(node)
|
|
check(err)
|
|
} else {
|
|
/*err = c.Update(bson.M{"id": node.Id}, &node)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
|
|
func getAllEdges() ([]EdgeModel, error) {
|
|
result := []EdgeModel{}
|
|
iter := edgeCollection.Find(bson.M{}).Limit(10000).Iter()
|
|
err := iter.All(&result)
|
|
return result, err
|
|
}
|
|
func saveEdge(c *mgo.Collection, edge EdgeModel) {
|
|
//first, check if the edge already exists
|
|
result := EdgeModel{}
|
|
err := c.Find(bson.M{"txid": edge.Txid, "to": edge.To, "from": edge.From, "blockheight": edge.BlockHeight, "label": edge.Label}).One(&result)
|
|
if err != nil {
|
|
//edge not found, so let's add a new entry
|
|
err = c.Insert(edge)
|
|
check(err)
|
|
} else {
|
|
err = c.Update(bson.M{"txid": edge.Txid, "to": edge.To, "from": edge.From, "blockheight": edge.BlockHeight, "label": edge.Label}, &edge)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func nodeInNodes(nodes []NodeModel, node NodeModel) bool {
|
|
for _, n := range nodes {
|
|
if n.Id == node.Id {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
func edgeInEdges(edges []EdgeModel, edge EdgeModel) bool {
|
|
for _, e := range edges {
|
|
if e.From == edge.From && e.To == edge.To && e.Label == edge.Label && e.BlockHeight == edge.BlockHeight {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
func saveAddress(address AddressModel) {
|
|
|
|
result := AddressModel{}
|
|
err := addressCollection.Find(bson.M{"hash": address.Hash}).One(&result)
|
|
if err != nil {
|
|
//address not found, so let's add a new entry
|
|
err = addressCollection.Insert(address)
|
|
check(err)
|
|
|
|
//stats addr
|
|
stats := getStats()
|
|
stats.AddrCount++
|
|
updateStats(stats)
|
|
}
|
|
}
|
|
func saveTx(tx TxModel) {
|
|
|
|
result := TxModel{}
|
|
err := txCollection.Find(bson.M{"txid": tx.Txid}).One(&result)
|
|
if err != nil {
|
|
//tx not found, so let's add a new entry
|
|
err = txCollection.Insert(tx)
|
|
check(err)
|
|
}
|
|
}
|
|
|
|
func saveBlock(block BlockModel) {
|
|
|
|
result := BlockModel{}
|
|
err := blockCollection.Find(bson.M{"hash": block.Hash}).One(&result)
|
|
if err != nil {
|
|
//block not found, so let's add a new entry
|
|
err = blockCollection.Insert(block)
|
|
check(err)
|
|
}
|
|
}
|