diff --git a/README.md b/README.md index a19ce156aa8a1edd3c413307ad6725ad1c3a7934..026e1ee0fa2f97536480351946549e00b98dde27 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,11 @@ or if you prefer https over ssh git clone https://github.com/iotaledger/goshimmer.git ``` +Verify that you have installed the minimal required go version (1.12.7): +``` +go version +``` + You can build your executable (as well as cross compiling for other architectures) by running the `go build` tool inside the just cloned folder `goshimmer`: ``` diff --git a/go.mod b/go.mod index c68f9b405cdfa527bfbc4c23737c235adf20f23e..4526aae3d5501de31344e16c149200b281287a1c 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,24 @@ module github.com/iotaledger/goshimmer go 1.12 require ( - github.com/dgraph-io/badger v2.0.0-rc.2.0.20190610165348-a804ffa35fb9+incompatible - github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 // indirect - github.com/dustin/go-humanize v1.0.0 // indirect - github.com/ethereum/go-ethereum v1.8.27 - github.com/gdamore/tcell v1.1.2 - github.com/go-zeromq/zmq4 v0.4.0 - github.com/golang/protobuf v1.3.1 // indirect - github.com/google/open-location-code/go v0.0.0-20190603181809-cf814bded323 + github.com/dgraph-io/badger v1.6.0 + github.com/ethereum/go-ethereum v1.9.1 + github.com/gdamore/tcell v1.2.0 + github.com/go-zeromq/zmq4 v0.5.0 + github.com/golang/protobuf v1.3.2 // indirect + github.com/google/open-location-code/go v0.0.0-20190723034300-2c7115db77a3 github.com/gorilla/websocket v1.4.0 github.com/iotaledger/iota.go v1.0.0-beta.7 + github.com/kr/pretty v0.1.0 // indirect github.com/labstack/echo v3.3.10+incompatible github.com/labstack/gommon v0.2.9 // indirect github.com/magiconair/properties v1.8.1 github.com/pkg/errors v0.8.1 - github.com/rivo/tview v0.0.0-20190609162513-b62197ade412 - github.com/zeromq/goczmq v4.1.0+incompatible // indirect - golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 - golang.org/x/net v0.0.0-20190611141213-3f473d35a33a + github.com/rivo/tview v0.0.0-20190721135419-23dc8a0944e4 + github.com/rivo/uniseg v0.1.0 // indirect + golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 + golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 + golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e // indirect + golang.org/x/text v0.3.2 // indirect + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) diff --git a/go.sum b/go.sum index 771f0549ffd393c98b879747ad602b3019761855..52799b69a49e8363c48c8aced3a5ea25893b82b0 100644 --- a/go.sum +++ b/go.sum @@ -1,55 +1,62 @@ github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/apsdehal/go-logger v0.0.0-20190506062552-f85330a4b532/go.mod h1:U3/8D6R9+bVpX0ORZjV+3mU9pQ86m7h1lESgJbXNvXA= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= -github.com/dgraph-io/badger v2.0.0-rc.2.0.20190610165348-a804ffa35fb9+incompatible h1:FE+hrPTLWIHxQzGTbjReHgpkj7+hFWC+L6b2fAxBG+I= -github.com/dgraph-io/badger v2.0.0-rc.2.0.20190610165348-a804ffa35fb9+incompatible/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= +github.com/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgryski/go-farm v0.0.0-20190323231341-8198c7b169ec/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/ethereum/go-ethereum v1.8.27 h1:d+gkiLaBDk5fn3Pe/xNVaMrB/ozI+AUB2IlVBp29IrY= -github.com/ethereum/go-ethereum v1.8.27/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/ethereum/go-ethereum v1.9.1 h1:MrdTRvKIa3apdx6NW1azzSgl8BQB1eTBVSUmFhuztaU= +github.com/ethereum/go-ethereum v1.9.1/go.mod h1:PwpWDrCLZrV+tfrhqqF6kPknbISMHaJv9Ln3kPCZLwY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell v1.1.2 h1:Afe8cU6SECC06UmvaJ55Jr3Eh0tz/ywLjqWYqjGZp3s= github.com/gdamore/tcell v1.1.2/go.mod h1:h3kq4HO9l2On+V9ed8w8ewqQEmGCSSHOgQ+2h8uzurE= +github.com/gdamore/tcell v1.2.0 h1:ikixzsxc8K8o3V2/CEmyoEW8mJZaNYQQ3NP3VIQdUe4= +github.com/gdamore/tcell v1.2.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-zeromq/zmq4 v0.4.0 h1:/TAahvAez7b6ycAyrxwN6Q36zy2OU8++uRLt6CwC74g= -github.com/go-zeromq/zmq4 v0.4.0/go.mod h1:Sm+6QJXXpXzdGVlOTEvV/6SDt+koNyLZwxe7sORh7FI= +github.com/go-zeromq/zmq4 v0.5.0 h1:DijriKlrr2b48mymvAsZApiPzrbxQodYKG1aDH1rz8c= +github.com/go-zeromq/zmq4 v0.5.0/go.mod h1:6p7pjNlkfrQQVipmEuZDk7fakLZCqPPVK+Iq3jfbDg8= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/open-location-code/go v0.0.0-20190603181809-cf814bded323 h1:s+TV4ZPsmXNvFxr9gzRTOlqf7DT862ieiOGRWA9M3oM= -github.com/google/open-location-code/go v0.0.0-20190603181809-cf814bded323/go.mod h1:eJfRN6aj+kR/rnua/rw9jAgYhqoMHldQkdTi+sePRKk= +github.com/google/open-location-code/go v0.0.0-20190723034300-2c7115db77a3 h1:qI8YeX4bVZ2HrE+kEOn12L2io7Tw/2IffULguAh3M4Q= +github.com/google/open-location-code/go v0.0.0-20190723034300-2c7115db77a3/go.mod h1:eJfRN6aj+kR/rnua/rw9jAgYhqoMHldQkdTi+sePRKk= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/iotaledger/iota.go v1.0.0-beta.7 h1:OaUNahPvOdQz2nKcgeAfcUdxlEDlEV3xwLIkwzZ1B/U= github.com/iotaledger/iota.go v1.0.0-beta.7/go.mod h1:dMps6iMVU1pf5NDYNKIw4tRsPeC8W3ZWjOvYHOO1PMg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= github.com/labstack/gommon v0.2.9 h1:heVeuAYtevIQVYkGj6A41dtfT91LrvFG220lavpWhrU= github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4= github.com/lucasb-eyer/go-colorful v1.0.2 h1:mCMFu6PgSozg9tDNMMK3g18oJBX7oYGrC09mS6CXfO4= github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -57,64 +64,75 @@ 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-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rivo/tview v0.0.0-20190609162513-b62197ade412 h1:muOFMct2jVhlSw9S3MRrxevpsAIPJeTh4e1Z7pEEQhE= -github.com/rivo/tview v0.0.0-20190609162513-b62197ade412/go.mod h1:+rKjP5+h9HMwWRpAfhIkkQ9KE3m3Nz5rwn7YtUpwgqk= -github.com/rivo/uniseg v0.0.0-20190513083848-b9f5b9457d44 h1:XKCbzPvK4/BbMXoMJOkYP2ANxiAEO0HM1xn6psSbXxY= +github.com/rivo/tview v0.0.0-20190721135419-23dc8a0944e4 h1:3L7UVoI/26LdSEPadEc4tNPMW+4vLBJaj31jAlJG4xg= +github.com/rivo/tview v0.0.0-20190721135419-23dc8a0944e4/go.mod h1:+rKjP5+h9HMwWRpAfhIkkQ9KE3m3Nz5rwn7YtUpwgqk= github.com/rivo/uniseg v0.0.0-20190513083848-b9f5b9457d44/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/zeromq/goczmq v4.1.0+incompatible h1:cGVQaU6kIwwrGso0Pgbl84tzAz/h7FJ3wYQjSonjFFc= -github.com/zeromq/goczmq v4.1.0+incompatible/go.mod h1:1uZybAJoSRCvZMH2rZxEwWBSmC4T7CB/xQOfChwPEzg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.mongodb.org/mongo-driver v1.0.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/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-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20180629035331-4cb1c02c05b0/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190611141213-3f473d35a33a h1:+KkCgOMgnKSgenxTBoiwkMqTiouMIy/3o8RLdmSbGoY= -golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed h1:uPxWBzB3+mlnjy9W58qY1j/cjyFjutgw/Vhan2zLy/A= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go index 071b091cd4b5bde5813434ca1070073dafa0604f..7b640965b688b4f20752a8ef153a9d1f8c2401a6 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "github.com/iotaledger/goshimmer/plugins/cli" "github.com/iotaledger/goshimmer/plugins/dashboard" "github.com/iotaledger/goshimmer/plugins/gossip" + "github.com/iotaledger/goshimmer/plugins/gossip-on-solidification" "github.com/iotaledger/goshimmer/plugins/gracefulshutdown" "github.com/iotaledger/goshimmer/plugins/metrics" "github.com/iotaledger/goshimmer/plugins/statusscreen" @@ -25,7 +26,7 @@ func main() { cli.PLUGIN, autopeering.PLUGIN, gossip.PLUGIN, - //gossip_on_solidification.PLUGIN, + gossip_on_solidification.PLUGIN, tangle.PLUGIN, bundleprocessor.PLUGIN, analysis.PLUGIN, diff --git a/packages/database/badger_instance.go b/packages/database/badger_instance.go new file mode 100644 index 0000000000000000000000000000000000000000..daf39ad71aeb119a0fbf6bdeea51233e3d5de64a --- /dev/null +++ b/packages/database/badger_instance.go @@ -0,0 +1,53 @@ +package database + +import ( + "os" + "sync" + + "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/options" +) + +var instance *badger.DB + +var openLock sync.Mutex + +func GetBadgerInstance() (result *badger.DB, err error) { + openLock.Lock() + + if instance == nil { + directory := *DIRECTORY.Value + + if _, osErr := os.Stat(directory); os.IsNotExist(osErr) { + if osErr := os.Mkdir(directory, 0700); osErr != nil { + err = osErr + + return + } + } else if osErr != nil { + err = osErr + + return + } + + opts := badger.DefaultOptions(directory) + opts.Logger = &logger{} + opts.Truncate = true + opts.TableLoadingMode = options.MemoryMap + + db, badgerErr := badger.Open(opts) + if err != nil { + err = badgerErr + + return + } + + instance = db + } + + openLock.Unlock() + + result = instance + + return +} diff --git a/packages/database/database.go b/packages/database/database.go index 59a994b68bff9e74321f9105773f5d23a3215ddc..4a0e9657f6e66182154ff3ca1dae9cfc39d1eebe 100644 --- a/packages/database/database.go +++ b/packages/database/database.go @@ -1,12 +1,9 @@ package database import ( - "os" - "path/filepath" "sync" "github.com/dgraph-io/badger" - "github.com/dgraph-io/badger/options" ) var databasesByName = make(map[string]*databaseImpl) @@ -17,6 +14,7 @@ var ErrKeyNotFound = badger.ErrKeyNotFound type databaseImpl struct { db *badger.DB name string + prefix []byte openLock sync.Mutex } @@ -28,51 +26,24 @@ func Get(name string) (Database, error) { return database, nil } - database := &databaseImpl{ - db: nil, - name: name, - } - if err := database.Open(); err != nil { + badgerInstance, err := GetBadgerInstance() + if err != nil { return nil, err } + database := &databaseImpl{ + db: badgerInstance, + name: name, + prefix: []byte(name + "_"), + } + databasesByName[name] = database return databasesByName[name], nil } -func (this *databaseImpl) Open() error { - this.openLock.Lock() - defer this.openLock.Unlock() - - if this.db == nil { - directory := *DIRECTORY.Value - - if _, err := os.Stat(directory); os.IsNotExist(err) { - if err := os.Mkdir(directory, 0700); err != nil { - return err - } - } - - opts := badger.DefaultOptions - opts.Dir = directory + string(filepath.Separator) + this.name - opts.ValueDir = opts.Dir - opts.Logger = &logger{} - opts.Truncate = true - opts.TableLoadingMode = options.MemoryMap - - db, err := badger.Open(opts) - if err != nil { - return err - } - this.db = db - } - - return nil -} - func (this *databaseImpl) Set(key []byte, value []byte) error { - if err := this.db.Update(func(txn *badger.Txn) error { return txn.Set(key, value) }); err != nil { + if err := this.db.Update(func(txn *badger.Txn) error { return txn.Set(append(this.prefix, key...), value) }); err != nil { return err } @@ -81,7 +52,7 @@ func (this *databaseImpl) Set(key []byte, value []byte) error { func (this *databaseImpl) Contains(key []byte) (bool, error) { err := this.db.View(func(txn *badger.Txn) error { - _, err := txn.Get(key) + _, err := txn.Get(append(this.prefix, key...)) if err != nil { return err } @@ -100,7 +71,7 @@ func (this *databaseImpl) Get(key []byte) ([]byte, error) { var result []byte = nil err := this.db.View(func(txn *badger.Txn) error { - item, err := txn.Get(key) + item, err := txn.Get(append(this.prefix, key...)) if err != nil { return err } @@ -117,7 +88,7 @@ func (this *databaseImpl) Get(key []byte) ([]byte, error) { func (this *databaseImpl) Delete(key []byte) error { err := this.db.Update(func(txn *badger.Txn) error { - err := txn.Delete(key) + err := txn.Delete(append(this.prefix, key...)) return err }) return err @@ -125,8 +96,11 @@ func (this *databaseImpl) Delete(key []byte) error { func (this *databaseImpl) ForEach(consumer func([]byte, []byte)) error { err := this.db.View(func(txn *badger.Txn) error { + iteratorOptions := badger.DefaultIteratorOptions + iteratorOptions.Prefix = this.prefix + // create an iterator the default options - it := txn.NewIterator(badger.DefaultIteratorOptions) + it := txn.NewIterator(iteratorOptions) defer it.Close() // loop through every key-value-pair and call the function @@ -138,26 +112,9 @@ func (this *databaseImpl) ForEach(consumer func([]byte, []byte)) error { return err } - consumer(item.Key(), value) + consumer(item.Key()[len(this.prefix):], value) } return nil }) return err } - -func (this *databaseImpl) Close() error { - this.openLock.Lock() - defer this.openLock.Unlock() - - if this.db != nil { - err := this.db.Close() - - this.db = nil - - if err != nil { - return err - } - } - - return nil -} diff --git a/packages/database/interfaces.go b/packages/database/interfaces.go index 064e311bc9f9b263538afb036bc30368ccd7f15e..c17ca74b0bbb3b971c0bd186a80b5374fe464966 100644 --- a/packages/database/interfaces.go +++ b/packages/database/interfaces.go @@ -1,11 +1,9 @@ package database type Database interface { - Open() error Set(key []byte, value []byte) error Contains(key []byte) (bool, error) Get(key []byte) ([]byte, error) ForEach(func(key []byte, value []byte)) error Delete(key []byte) error - Close() error } diff --git a/plugins/autopeering/protocol/incoming_response_processor.go b/plugins/autopeering/protocol/incoming_response_processor.go index 1bec1044722132eda13f3f8d1f7edd37d3637824..ea33fa60d5c7f00411f8315065692014d022a1e6 100644 --- a/plugins/autopeering/protocol/incoming_response_processor.go +++ b/plugins/autopeering/protocol/incoming_response_processor.go @@ -17,7 +17,7 @@ func createIncomingResponseProcessor(plugin *node.Plugin) *events.Closure { func processIncomingResponse(plugin *node.Plugin, peeringResponse *response.Response) { plugin.LogDebug("received peering response from " + peeringResponse.Issuer.String()) - peeringResponse.Issuer.Conn.Close() + _ = peeringResponse.Issuer.Conn.Close() knownpeers.INSTANCE.AddOrUpdate(peeringResponse.Issuer) for _, peer := range peeringResponse.Peers { @@ -28,19 +28,5 @@ func processIncomingResponse(plugin *node.Plugin, peeringResponse *response.Resp defer chosenneighbors.INSTANCE.Lock()() chosenneighbors.INSTANCE.AddOrUpdate(peeringResponse.Issuer, false) - - /* - if len(chosenneighbors.INSTANCE.Peers) > constants.NEIGHBOR_COUNT / 2 { - dropMessage := &drop.Drop{Issuer:ownpeer.INSTANCE} - dropMessage.Sign() - - chosenneighbors.FurthestNeighborLock.RLock() - if _, err := chosenneighbors.FURTHEST_NEIGHBOR.Send(dropMessage.Marshal(), types.PROTOCOL_TYPE_UDP, false); err != nil { - plugin.LogDebug("error when sending drop message to" + chosenneighbors.FURTHEST_NEIGHBOR.String()) - } - chosenneighbors.INSTANCE.Remove(chosenneighbors.FURTHEST_NEIGHBOR.Identity.StringIdentifier, false) - chosenneighbors.FurthestNeighborLock.RUnlock() - } - */ } } diff --git a/plugins/autopeering/protocol/outgoing_request_processor.go b/plugins/autopeering/protocol/outgoing_request_processor.go index 88b95669ef2931d1b5d3080b42da70d7bf872242..ea2f37459d7f3876105d30a8b2b3461bac99ca22 100644 --- a/plugins/autopeering/protocol/outgoing_request_processor.go +++ b/plugins/autopeering/protocol/outgoing_request_processor.go @@ -1,6 +1,9 @@ package protocol import ( + "github.com/iotaledger/goshimmer/plugins/autopeering/instances/outgoingrequest" + "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types" + "github.com/iotaledger/goshimmer/plugins/autopeering/server/tcp" "time" "github.com/iotaledger/goshimmer/packages/timeutil" @@ -10,10 +13,7 @@ import ( "github.com/iotaledger/goshimmer/packages/node" "github.com/iotaledger/goshimmer/plugins/autopeering/instances/acceptedneighbors" "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors" - "github.com/iotaledger/goshimmer/plugins/autopeering/instances/outgoingrequest" "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants" - "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types" - "github.com/iotaledger/goshimmer/plugins/autopeering/server/tcp" "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer" ) @@ -46,14 +46,27 @@ func sendOutgoingRequests(plugin *node.Plugin) { timeutil.Sleep(5 * time.Second) if candidateShouldBeContacted(chosenNeighborCandidate) { - if dialed, err := chosenNeighborCandidate.Send(outgoingrequest.INSTANCE.Marshal(), types.PROTOCOL_TYPE_TCP, true); err != nil { - plugin.LogDebug(err.Error()) - } else { - plugin.LogDebug("sent peering request to " + chosenNeighborCandidate.String()) + doneChan := make(chan int, 1) + + go func(doneChan chan int) { + if dialed, err := chosenNeighborCandidate.Send(outgoingrequest.INSTANCE.Marshal(), types.PROTOCOL_TYPE_TCP, true); err != nil { + plugin.LogDebug(err.Error()) + } else { + plugin.LogDebug("sent peering request to " + chosenNeighborCandidate.String()) - if dialed { - tcp.HandleConnection(chosenNeighborCandidate.Conn) + if dialed { + tcp.HandleConnection(chosenNeighborCandidate.Conn) + } } + + close(doneChan) + }(doneChan) + + select { + case <-daemon.ShutdownSignal: + return + case <-doneChan: + continue } } } diff --git a/plugins/dashboard/plugin.go b/plugins/dashboard/plugin.go index 09fb191d4ed8208856af549544c9fc933dd227d4..02f687ead809e12627f968e440fd74fd7f3de350 100644 --- a/plugins/dashboard/plugin.go +++ b/plugins/dashboard/plugin.go @@ -1,8 +1,10 @@ package dashboard import ( - "log" "net/http" + "time" + + "golang.org/x/net/context" "github.com/iotaledger/goshimmer/packages/daemon" "github.com/iotaledger/goshimmer/packages/events" @@ -10,11 +12,18 @@ import ( "github.com/iotaledger/goshimmer/plugins/metrics" ) +var server *http.Server + +var router *http.ServeMux + var PLUGIN = node.NewPlugin("Dashboard", node.Enabled, configure, run) func configure(plugin *node.Plugin) { - http.HandleFunc("/dashboard", ServeHome) - http.HandleFunc("/ws", ServeWs) + router = http.NewServeMux() + server = &http.Server{Addr: ":8081", Handler: router} + + router.HandleFunc("/dashboard", ServeHome) + router.HandleFunc("/ws", ServeWs) // send the sampledTPS to client via websocket, use uint32 to save mem metrics.Events.ReceivedTPSUpdated.Attach(events.NewClosure(func(sampledTPS uint64) { @@ -23,12 +32,21 @@ func configure(plugin *node.Plugin) { TPSQ = TPSQ[1:] } })) + + daemon.Events.Shutdown.Attach(events.NewClosure(func() { + ctx, cancel := context.WithTimeout(context.Background(), 0*time.Second) + defer cancel() + + _ = server.Shutdown(ctx) + })) } func run(plugin *node.Plugin) { daemon.BackgroundWorker("Dashboard Updater", func() { - if err := http.ListenAndServe(":8081", nil); err != nil { - log.Fatal(err) - } + go func() { + if err := server.ListenAndServe(); err != nil { + plugin.LogFailure(err.Error()) + } + }() }) } diff --git a/plugins/dashboard/tps.go b/plugins/dashboard/tps.go index 8572fa68651e918cd5b3720ffc4d9c8e5df7f7fa..ea287a74977df634a55a759666d81307f09ff9ae 100644 --- a/plugins/dashboard/tps.go +++ b/plugins/dashboard/tps.go @@ -2,9 +2,9 @@ package dashboard import ( "encoding/binary" - "fmt" "html/template" "net/http" + "sync" "github.com/gorilla/websocket" "github.com/iotaledger/goshimmer/packages/events" @@ -26,12 +26,19 @@ func ServeWs(w http.ResponseWriter, r *http.Request) { return } + var websocketWriteMutex sync.Mutex + notifyWebsocketClient := events.NewClosure(func(sampledTPS uint64) { - p := make([]byte, 4) - binary.LittleEndian.PutUint32(p, uint32(sampledTPS)) - if err := ws.WriteMessage(websocket.BinaryMessage, p); err != nil { - return - } + go func() { + websocketWriteMutex.Lock() + defer websocketWriteMutex.Unlock() + + p := make([]byte, 4) + binary.LittleEndian.PutUint32(p, uint32(sampledTPS)) + if err := ws.WriteMessage(websocket.BinaryMessage, p); err != nil { + return + } + }() }) metrics.Events.ReceivedTPSUpdated.Attach(notifyWebsocketClient) @@ -42,8 +49,6 @@ func ServeWs(w http.ResponseWriter, r *http.Request) { } } - fmt.Println("DISCONNECTOR") - metrics.Events.ReceivedTPSUpdated.Detach(notifyWebsocketClient) } diff --git a/plugins/dashboard/tps_template.go b/plugins/dashboard/tps_template.go index 69d27e6e9477f0631dd0ac6d6b7bc98d161e3140..f12df4b5efac8eb41fe2e61ee9082f38fe3448f2 100644 --- a/plugins/dashboard/tps_template.go +++ b/plugins/dashboard/tps_template.go @@ -286,17 +286,20 @@ var tpsTemplate = ` } }] }); + + const dataStr = '{{.Data}}' + const parsedData = JSON.parse(dataStr.replace(/ /g, ',')); + time = Date.now() - 1000 * (parsedData.length + 1); + for (let i = 0; i < parsedData.length; i++) { + chart.series[0].addPoint([time += 1000, parseInt(parsedData[i], 10)], false); + } + chart.redraw(); + console.log(parsedData); + const conn = new WebSocket("ws://{{.Host}}/ws"); conn.binaryType = 'arraybuffer'; conn.onopen = evt => { console.log("WebSocket is open now."); - const dataStr = '{{.Data}}' - const data = JSON.parse(dataStr.replace(/ /g, ',')); - time = Date.now() - 1000 * (data.length + 1); - for (let i = 0; i < data.length; i++) { - chart.series[0].addPoint([time += 1000, parseInt(data[i], 10)], true); - } - console.log(data); console.log("WebSocket done."); } conn.onclose = () => {