From fe164456fb90b8ec9235339f58060a72b3ea6670 Mon Sep 17 00:00:00 2001 From: arnaucode Date: Mon, 7 Aug 2017 22:00:07 +0200 Subject: [PATCH] sankey in frontend works, added logs system, added getLastTx in backend and frontend --- .gitignore | 1 + README.md | 12 ++++++ errors.go | 4 +- goBlockchainDataAnalysis05.png | Bin 0 -> 129811 bytes log.go | 19 +++++++++ main.go | 68 ++++++++++++++++----------------- serverRoutes.go | 27 +++++++++---- web/views/main/main.html | 8 +++- web/views/main/main.js | 11 +++++- web/views/sankey/sankey.html | 2 +- web/views/sankey/sankey.js | 6 ++- 11 files changed, 107 insertions(+), 51 deletions(-) create mode 100644 goBlockchainDataAnalysis05.png create mode 100644 log.go diff --git a/.gitignore b/.gitignore index eb614c3..c085c5e 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ /*.conf /*.json *.mp4 +logs diff --git a/README.md b/README.md index 87fd807..a772b2e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,18 @@ # goBlockchainDataAnalysis blockchain data analysis, written in Go + +![goBlockchainDataAnalysis](https://raw.githubusercontent.com/arnaucode/goBlockchainDataAnalysis/master/goBlockchainDataAnalysis01.png "goBlockchainDataAnalysis") + + +![goBlockchainDataAnalysis](https://raw.githubusercontent.com/arnaucode/goBlockchainDataAnalysis/master/goBlockchainDataAnalysis02.png "goBlockchainDataAnalysis") + + +![goBlockchainDataAnalysis](https://raw.githubusercontent.com/arnaucode/goBlockchainDataAnalysis/master/goBlockchainDataAnalysis05.png "goBlockchainDataAnalysis") + + +![goBlockchainDataAnalysis](https://raw.githubusercontent.com/arnaucode/goBlockchainDataAnalysis/master/goBlockchainDataAnalysis04.png "goBlockchainDataAnalysis") + ### Install 1. Nodejs & NPM https://nodejs.org/ 2. MongoDB https://www.mongodb.com/ diff --git a/errors.go b/errors.go index 9e83a92..e997ec1 100644 --- a/errors.go +++ b/errors.go @@ -1,9 +1,9 @@ package main -import "fmt" +import "log" func check(err error) { if err != nil { - fmt.Println(err) + log.Println(err) } } diff --git a/goBlockchainDataAnalysis05.png b/goBlockchainDataAnalysis05.png new file mode 100644 index 0000000000000000000000000000000000000000..833983cab92ed181fb09cdae5f9d54616b0eaf81 GIT binary patch literal 129811 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