Skip to content

Commit

Permalink
Controlled (#15)
Browse files Browse the repository at this point in the history
* doc Control

* controlled API

* fix inf sync
  • Loading branch information
dkodnik authored Jun 10, 2019
1 parent 739211d commit 87a6674
Show file tree
Hide file tree
Showing 9 changed files with 253 additions and 104 deletions.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* [Installing DB](#installing-in-ubuntu)
* [Commands](#commands)
* [Key benefits from PostgreSQL](#key-benefits-from-postgresql)
* [Control](#control)

## About

Expand Down Expand Up @@ -58,4 +59,11 @@ prs3rd
## Key benefits from PostgreSQL:

* Size of base on disk
* Request execution speed
* Request execution speed

## Control

* `curl localhost:8018/status` - parser status
* `curl localhost:8018/start` - starting parser
* `curl localhost:8018/stop` - stoping parser
* `curl localhost:8018/exit` - exit
20 changes: 19 additions & 1 deletion app_block.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ import (
ms "github.com/ValidatorCenter/minter-go-sdk"
)

// Обвязка для модуля обработки Блоков
func appBlocks_go() {
// Загрузка блока с блок-чейна
for { // бесконечный цикл
if ParserIsActive == true {
appBlocks()
}
log("INF", "PAUSE", fmt.Sprintf("%dsec", pauseSystem))
time.Sleep(time.Second * time.Duration(pauseSystem)) // пауза ....в этот момент лучше прерывать
}
}

// получение сколько всего блоков в блокчейне
func MinterLatestBlock() (int, error) {
sts, err := sdk.GetStatus()
Expand Down Expand Up @@ -41,6 +53,11 @@ func appBlocks() {

step_amntBlocksLoad := uint(0) // считает сколько загрузили за раз
for i := actN_block; i <= amntN_block; i++ {
amntL_block = i
if ParserIsActive != true {
break
}

log("INF", "LOAD", fmt.Sprintf("=== БЛОК %d из %d", i, amntN_block))

// получаем блок по номеру i с блокчейна
Expand All @@ -51,7 +68,8 @@ func appBlocks() {
if err != nil {
//Возможно не доступна нода блокчейна, надо подождать а не паниковать
log("ERR", fmt.Sprint("[app_block.go] appBlocks(sdk.GetBlock) - ", err), "")
time.Sleep(10 * time.Second) // ждём до новой попытки
log("INF", "PAUSE", fmt.Sprintf("%dsec", pauseSystem))
time.Sleep(time.Second * time.Duration(pauseSystem)) // ждём до новой попытки
} else {
break
}
Expand Down
11 changes: 5 additions & 6 deletions app_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ import (
// Обвязка для модуля обработки Нод
func appNodes_go() {
for { // бесконечный цикл
// Шаг 4, загрузка данных о валидаторах/кандидатах
time.Sleep(time.Minute * 1)

appNodes()

time.Sleep(time.Minute * 1) // пауза 1мин
if ParserIsActive == true {
// Шаг 4, загрузка данных о валидаторах/кандидатах
appNodes()
}
time.Sleep(time.Second * time.Duration(pauseNodeUpd))
}
}

Expand Down
4 changes: 4 additions & 0 deletions config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ CLICKHOUSE_ADDRESS=tcp://127.0.0.1:9000
BLOCKS_LOAD=100
; Пауза между загрузками блоков (сек)
BLOCKS_LOAD_PAUSE=20
; Пауза между циклами и попытками при ошибках (сек)
SYSTEM_PAUSE=10
; Пауза между обновлением информации о нодах (сек)
NODES_UPD_PAUSE=60

[parser]
; Количество воркеров для отработки Блоков
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ require (
github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c // indirect
github.com/danil-lashin/iavl v0.11.2 // indirect
github.com/fatih/color v1.7.0 // indirect
github.com/gin-gonic/gin v1.4.0 // indirect
github.com/go-kit/kit v0.8.0 // indirect
github.com/go-logfmt/logfmt v0.4.0 // indirect
github.com/go-redis/redis v6.15.2+incompatible // indirect
github.com/gogo/protobuf v1.2.1 // indirect
github.com/golang/protobuf v1.3.1 // indirect
github.com/jmoiron/sqlx v1.2.0 // indirect
github.com/kshvakov/clickhouse v1.3.6 // indirect
github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983 // indirect
Expand Down
17 changes: 17 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g=
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ=
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
Expand All @@ -50,6 +54,7 @@ github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
Expand All @@ -61,9 +66,12 @@ github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983 h1:wL11wNW7dhKIcRC
github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
Expand All @@ -84,6 +92,8 @@ github.com/tendermint/tendermint v0.31.5 h1:vTet8tCq3B9/J9Yo11dNZ8pOB7NtSy++bVSf
github.com/tendermint/tendermint v0.31.5/go.mod h1:ymcPyWblXCplCPQjbOYbrF1fWnpslATMVqiGgWbZrlc=
github.com/tyler-smith/go-bip39 v1.0.0 h1:FOHg9gaQLeBBRbHE/QrTLfEiBHy5pQ/yXzf9JG5pYFM=
github.com/tyler-smith/go-bip39 v1.0.0/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs=
github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo=
Expand All @@ -93,6 +103,8 @@ golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand All @@ -112,8 +124,13 @@ google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ=
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
16 changes: 13 additions & 3 deletions initialization.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ type ConfigStart struct {
AppCoin []s.CoinMarketCapData `json:"coins"`
}

// загрузка файла genesis.json
// загрузка файла start.json
func loadStartJSON() bool {
file, _ := os.Open("start.json")
decoder := json.NewDecoder(file)
Expand All @@ -63,6 +63,7 @@ func loadStartJSON() bool {

// инициализация парсера, загрузка параметров
func initParser() {
ParserIsActive = true
sdk.Debug = true
ConfFileName := "config.ini"
cmdClearDB := false
Expand Down Expand Up @@ -154,7 +155,15 @@ func initParser() {
}
pauseBlocksLoad, err = secDB.Key("BLOCKS_LOAD_PAUSE").Uint()
if err != nil || pauseBlocksLoad == 0 {
pauseBlocksLoad = 1
pauseBlocksLoad = 10
}
pauseSystem, err = secDB.Key("SYSTEM_PAUSE").Uint()
if err != nil || pauseSystem == 0 {
pauseSystem = 10
}
pauseNodeUpd, err = secDB.Key("NODES_UPD_PAUSE").Uint()
if err != nil || pauseNodeUpd == 0 {
pauseNodeUpd = 60
}

r_db, err := secDB.Key("REDIS_DB").Int()
Expand Down Expand Up @@ -212,7 +221,8 @@ func initParser() {
mbch, err = sdk.GetStatus()
if err != nil {
log("ERR", fmt.Sprint("Подключение к Minter-", err.Error()), "")
time.Sleep(10 * time.Second) // ждём до новой попытки
log("INF", "PAUSE", fmt.Sprintf("%dsec", pauseSystem))
time.Sleep(time.Second * time.Duration(pauseSystem)) // ждём до новой попытки
} else {
break
}
Expand Down
70 changes: 57 additions & 13 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package main

import (
"fmt"
"time"

ms "github.com/ValidatorCenter/minter-go-sdk"

//Gin web-framework
"github.com/gin-gonic/gin"

// SQL
"github.com/jmoiron/sqlx"
_ "github.com/kshvakov/clickhouse"
Expand All @@ -17,9 +19,13 @@ import (
var (
CoinMinter string // Основная монета Minter
amntN_block int // всего блоков в сети
amntL_block int // синхронизировано блоков из сети
amntBlocksLoad uint // количество загружаемых блоков за раз
pauseBlocksLoad uint // паузе между загрузками блоков (сек)
pauseBlocksLoad uint // пауза между загрузками блоков (сек)
pauseSystem uint // пауза между циклами и попытками при ошибках (сек)
pauseNodeUpd uint // пауза между обновлением информации о нодах (сек)
loadCorrection uint // на сколько блоков не дозагружать из блокчейна, если еще не синхронизировалось в блокчейне валидаторам подписантам
ParserIsActive bool // активен парсер Да/нет
sdk ms.SDK
worketInputBlock chan ms.BlockResponse
worketInputTrx chan TrxExt
Expand All @@ -42,6 +48,8 @@ var (
)

func main() {
// запуск GiN
r := gin.Default()

initParser()
defer dbSQL.Close()
Expand Down Expand Up @@ -70,17 +78,53 @@ func main() {
// Обновление информации о нодах
go appNodes_go()

// Загрузка блока с блок-чейна
for { // бесконечный цикл
appBlocks()
time.Sleep(time.Minute * 1) // пауза 1мин ....в этот момент лучше прерывать
}
// Обновление информации о блоках
go appBlocks_go()

r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.GET("/start", func(c *gin.Context) {
ParserIsActive = true
c.JSON(200, gin.H{
"message": "start",
"is_active": ParserIsActive,
"current_block": amntN_block, // всего блоков в сети
"sync_block": amntL_block, // синхронизировано блоков из сети
})
})
r.GET("/stop", func(c *gin.Context) {
ParserIsActive = false
c.JSON(200, gin.H{
"message": "stop",
"is_active": ParserIsActive,
"current_block": amntN_block, // всего блоков в сети
"sync_block": amntL_block, // синхронизировано блоков из сети
})
})
r.GET("/exit", func(c *gin.Context) {
ParserIsActive = false
time.Sleep(60 * time.Second) // ждём завершения работы горутин

close(worketInputBlock)
close(worketInputTrx)
close(worketInputBNode)

close(worketInputBlock)
close(worketInputTrx)
close(worketInputBNode)
time.Sleep(20 * time.Second) // ждём чтобы наверняка завершилась корректно запись в БД при закрытие каналов
c.JSON(200, gin.H{
"message": "exit",
})
})
r.GET("/status", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "status",
"is_active": ParserIsActive,
"current_block": amntN_block, // всего блоков в сети
"sync_block": amntL_block, // синхронизировано блоков из сети
})
})

time.Sleep(10 * time.Second) // ждём чтобы наверняка завершилась корректно запись в БД при закрытие каналов
fmt.Println("конец, нажмите любую кнопку....")
fmt.Scanln()
r.Run(":8018")
}
Loading

0 comments on commit 87a6674

Please sign in to comment.