Coder Social home page Coder Social logo

nkn.ovh's Introduction

nkn.ovh

nkn.ovh - Open source monitoring for NKN nodes

Notice

Be careful! nkn.ovh is no longer the official domain of the project!

API

Documentation


System requirements.

  • Since version 1.1 the programm can work in standalone mode (without frontend proxy), but only for HTTP protocol.
  • Network bandwidth 30 mbps+.
  • MySQL 5.6+ / MariaDB 10+ with InnoDB support.
  • At least 512MB RAM
  • (Optional) Any frontend server with WebSocket proxy support for HTTPS protocol access.
  • For building the nknovh daemon, you need Golang 1.15 or higher

Build from source

  1. Get the package and build it:
git clone https://github.com/bytestostring/nkn.ovh.git
cd nkn.ovh
# Compile main daemon
go build cmd/nknovh/nknovh.go
# Compile WebAssembly (optionally)
GOOS=js GOARCH=wasm go build -ldflags=-s -o web/static/lib.wasm cmd/wasm/wasm.go

Note. If you have compiled WebAssembly (wasm.go), make sure to copy wasm_exec.js from your golang distribution to web/static/js/ directory. As example, for Go version 1.15, this file can be found here: https://github.com/golang/go/blob/dev.boringcrypto.go1.15/misc/wasm/wasm_exec.js

  1. Create a database and import the sql file this way:
mysql -uroot -p
CREATE DATABASE nknovh;
quit
mysql -uroot -p nknovh < struct.sql
  1. Copy the configuration file:
cp conf.json.example conf.json

  1. Edit DB settings in the configuration file conf.json, Also if you use proxy server, add your proxy server IP into TrustedProxies json array.

  2. Run daemon

./nknovh

Optionally you can use systemd script located in scripts/systemd/ (Linux)

  1. Go to http://your_ip:8081/ The first loading the frontend interface may be long because the application should scan NKN Mainnet Network firstly.

You can check journal files in the logs directory

Upgrade from previous version (for building from sources)

  1. Stop your nknovh: kill -9 / systemctl stop nknovh / etc

  2. Check the version of your nknovh

cat conf.json | grep "Version"
  1. Upgrade using git, and recompile main daemon.
git pull
go build cmd/nknovh/nknovh.go
  1. Optionally! ONLY If you want to recompile .wasm binary from source:
GOOS=js GOARCH=wasm go build -ldflags=-s -o web/static/lib.wasm cmd/wasm/wasm.go

Note, if you have compiled lib.wasm, make sure to copy wasm_exec.js from your golang distribution to web/static/js directory.

  1. Before restarting the nknovh, check "sqlupgrade" directory for sql changes and import the changes if they exist. For example, if your current version is "1.1.0" and you need to upgrade your database structure to the latest version "1.1.0-dirty-4":
mysql -uroot -p nknovh < sqlupgrade/from-1.1.0-to-1.1.0-dirty-4.sql
  1. Start the nknovh:
./nknovh
# Or if you are using the systemctl script
systemctl start nknovh

Donation

If you want to support this project:

nkn.ovh's People

Contributors

bytestostring avatar happy4041 avatar myau91 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

nkn.ovh's Issues

running the app issue

Hi,

I tried to follow the instruccionts

I am getting the following error when trying to run the app
root@nknovh:~/nkn.ovh# ./nknovh
2021/09/26 11:56:53 Build() returned error: dial unix path to /unix/socket.sock OR tcp host: connect: no such file or directory

I have never user golang I am sure its and easy one but dont know where to start.

some assitance please.

DB size recomendations

Hi,

I have 250 nodes and the DB size is growing really quick and big for something of this nature (I believe).

What is the "normal" size of the DB of a "system" this big?

Is there a way to purge it or remove old data? perhaps I have misconfigured something on MySQL?

Some advise would be great.

Thanks,
\M

Add rmnodebyname or updatenodebyname method support

I usually manage my nodes by node name. when a node is offline and I need to reinstall, I need to get previous node ip and call rmnodebyip api, it's not convenient. Can you support method which can remove node by node name or base on node name update node ip ?

After the panel is installed, it keeps running in circles and cannot be used normally.

[2023-08-05 / 00:51:11.068] dirtyPoll is starting...
[2023-08-05 / 00:51:11.068] [dirtyPoll] Waiting for syncing
[2023-08-05 / 00:51:11.069] neighborPoll is starting...
[2023-08-05 / 00:51:11.069] [neighborPoll] Waiting for syncing
[2023-08-05 / 00:51:11.069] walletPoll is starting...
[2023-08-05 / 00:51:11.069] [walletPoll] Waiting for syncing
[2023-08-05 / 00:51:11.069] mainPoll is starting...
[2023-08-05 / 00:51:11.069] [mainPoll] Waiting for syncing
[2023-08-05 / 00:52:00.001] mainPoll loop is starting!
[2023-08-05 / 00:52:00.001] walletPoll loop is starting!
[2023-08-05 / 00:52:00.001] dirtyPoll loop is starting!
[2023-08-05 / 00:52:00.001] neighborPoll loop is starting!
[2023-08-05 / 00:52:00.002] func fetchNodesInfo() is finished, active numbers of goroutines: 17
[2023-08-05 / 00:52:00.010] func fetchNodesInfo() is finished, active numbers of goroutines: 17
[2023-08-05 / 00:52:00.027] [NeighborPoll] Starting get neighbors
[2023-08-05 / 00:52:00.087] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.181] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.213] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.216] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.218] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.224] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.332] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.342] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.344] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.344] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.350] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.887] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.890] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.928] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.931] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.959] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.966] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.967] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.969] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.990] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.996] NodeNeighbor is not valid
[2023-08-05 / 00:52:00.999] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.001] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.023] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.028] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.034] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.035] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.048] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.067] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.068] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.073] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.079] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.102] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.202] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.260] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.263] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.278] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.280] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.281] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.283] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.312] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.320] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.341] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.356] NodeNeighbor is not valid
[2023-08-05 / 00:52:01.403] [NeighborPoll] All neighbors getted
[2023-08-05 / 00:52:01.403] [NeighborPoll] Stats of all nodes saved
[2023-08-05 / 00:52:01.405] Cannot fetch info from db (last_height), 0 row is found
[2023-08-05 / 00:52:01.406] [neighborPoll] Got an error: Error 1264: Out of range value for column 'average_uptime' at row 1
[2023-08-05 / 00:54:00.002] func fetchNodesInfo() is finished, active numbers of goroutines: 15
[2023-08-05 / 00:54:00.003] func fetchNodesInfo() is finished, active numbers of goroutines: 15
[2023-08-05 / 00:56:00.002] func fetchNodesInfo() is finished, active numbers of goroutines: 15
[2023-08-05 / 00:56:00.002] func fetchNodesInfo() is finished, active numbers of goroutines: 15
[2023-08-05 / 00:58:00.008] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 00:58:00.009] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:00:00.008] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:00:00.009] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:02:00.008] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:02:00.008] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:04:00.010] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:04:00.010] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:06:00.016] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:06:00.017] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:08:00.025] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:08:00.025] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:10:00.028] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:10:00.029] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:12:00.029] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:12:00.029] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:14:00.029] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:14:00.029] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:16:00.030] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:16:00.030] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:18:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:18:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:20:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:20:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:22:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:22:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:24:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:24:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:26:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2023-08-05 / 01:26:00.031] func fetchNodesInfo() is finished, active numbers of goroutines: 14

about add nodes multiple

1.1.1.1,node1
1.1.1.2,node2
1.1.1.3,node3

Whether batch add can be set in this way
Batch addition now causes the IP of the current batch to be the same name

y

y

Reporting error

For the last few days I have noticed that the PERSIST_FINISHED nodes slowly dwindling on the nknovh interface down to:

"PERSIST_FINISHED nodes: 31,268"

However when I visit https://explorer.nkn.org/ it reports:

"Full nodes in NKN: 157145"

also http://nstatus.org/ reports:

" Nodes: 157059 "

run from arm problem

Can't execute row.Scan(): sql: Scan error on column index 3, name "relays_per_hour": converting driver.Value type int64 ("34858141014") to a int: value out of range

I ran on the ARM machine and the database reported an error

MariaDB unexpected EOF

use MariaDB
systemctl server log:
Apr 25 19:45:05 vmi861719 nknovh[4425]: [mysql] 2022/04/25 19:45:05 packets.go:73: unexpected EOF
Apr 25 19:45:05 vmi861719 nknovh[4425]: [mysql] 2022/04/25 19:45:05 packets.go:428: busy buffer
Apr 25 19:53:08 vmi861719 nknovh[4425]: [mysql] 2022/04/25 19:53:08 packets.go:73: unexpected EOF
Apr 25 19:53:08 vmi861719 nknovh[4425]: [mysql] 2022/04/25 19:53:08 packets.go:428: busy buffer
Apr 25 20:43:04 vmi861719 nknovh[4425]: [mysql] 2022/04/25 20:43:04 packets.go:73: unexpected EOF
Apr 25 20:43:04 vmi861719 nknovh[4425]: [mysql] 2022/04/25 20:43:04 packets.go:428: busy buffer
Apr 25 20:55:08 vmi861719 nknovh[4425]: [mysql] 2022/04/25 20:55:08 packets.go:73: unexpected EOF
Apr 25 20:55:08 vmi861719 nknovh[4425]: [mysql] 2022/04/25 20:55:08 packets.go:428: busy buffer
Apr 25 21:03:06 vmi861719 nknovh[4425]: [mysql] 2022/04/25 21:03:06 packets.go:73: unexpected EOF
Apr 25 21:03:06 vmi861719 nknovh[4425]: [mysql] 2022/04/25 21:03:06 packets.go:428: busy buffer

Invalid NodeState problem

Hi developer,
I have deployed the nkn.ovh on my own server and follow all the guide provided by the readme file.
But I got stuck on the initial page for a whole night. Here is the main log and the only error here is Invalid NodeState.
Please have a look at it and I appreciated for your help.
[2021-10-18 / 09:59:21.022] dirtyPoll is starting...
[2021-10-18 / 09:59:21.022] [dirtyPoll] Waiting for syncing
[2021-10-18 / 09:59:21.022] neighborPoll is starting...
[2021-10-18 / 09:59:21.022] [neighborPoll] Waiting for syncing
[2021-10-18 / 09:59:21.022] mainPoll is starting...
[2021-10-18 / 09:59:21.022] [mainPoll] Waiting for syncing
[2021-10-18 / 09:59:21.023] walletPoll is starting...
[2021-10-18 / 09:59:21.023] [walletPoll] Waiting for syncing
[2021-10-18 / 10:00:00.004] dirtyPoll loop is starting!
[2021-10-18 / 10:00:00.005] walletPoll loop is starting!
[2021-10-18 / 10:00:00.006] mainPoll loop is starting!
[2021-10-18 / 10:00:00.006] neighborPoll loop is starting!
[2021-10-18 / 10:00:00.007] func fetchNodesInfo() is finished, active numbers of goroutines: 14
[2021-10-18 / 10:00:00.010] func fetchNodesInfo() is finished, active numbers of goroutines: 16
[2021-10-18 / 10:00:00.122] [NeighborPoll] Starting get neighbors
[2021-10-18 / 10:01:22.162] [NeighborPoll] All neighbors getted
[2021-10-18 / 10:01:26.197] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:01:43.746] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:02:00.268] func fetchNodesInfo() is finished, active numbers of goroutines: 1015
[2021-10-18 / 10:02:00.269] func fetchNodesInfo() is finished, active numbers of goroutines: 1015
[2021-10-18 / 10:02:12.064] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:03:37.331] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:03:41.126] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:03:49.768] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:03:51.973] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:03:53.030] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:03:58.053] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:00.240] func fetchNodesInfo() is finished, active numbers of goroutines: 790
[2021-10-18 / 10:04:00.271] func fetchNodesInfo() is finished, active numbers of goroutines: 891
[2021-10-18 / 10:04:01.333] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:01.425] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:02.348] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:02.888] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:16.683] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:17.928] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:22.871] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:22.933] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:04:24.451] Invalid NodeState (from UpdateNodeAN)
[2021-10-18 / 10:05:40.255] [NeighborPoll] Stats of all nodes saved
[2021-10-18 / 10:06:00.081] func fetchNodesInfo() is finished, active numbers of goroutines: 43
[2021-10-18 / 10:06:00.143] func fetchNodesInfo() is finished, active numbers of goroutines: 43
[2021-10-18 / 10:08:00.081] func fetchNodesInfo() is finished, active numbers of goroutines: 42
[2021-10-18 / 10:08:00.146] func fetchNodesInfo() is finished, active numbers of goroutines: 41
[2021-10-18 / 10:10:00.091] func fetchNodesInfo() is finished, active numbers of goroutines: 42
[2021-10-18 / 10:10:00.143] func fetchNodesInfo() is finished, active numbers of goroutines: 41

add chinaese

I can provide translation,But I can't find the relevant language configuration

Problems in operation

Logs:
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 10ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 20ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 10ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms
2022/02/28 07:30:03 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 5ms

How can I solve it?

Failed to add node using CURL

Version: 1.1.0 update Version: 1.1.0-dirty-5

Run:
curl -X POST
--data-urlencode "Name=$Node"
--data-urlencode 'Multiple=0'
--data-urlencode "Ip=$Ip"
--data-urlencode 'Hash=$Hash'
-H "Content-Type: application/x-www-form-urlencoded"
http://127.0.0.1:8081/api/addnodes

Error:
curl: (52) Empty reply from server

The above error appears on my website
I have not configured SSL

It works fine on nkn.ovh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.