shisui

diff: ignored:
+300
-1619
+13713
-2

Portal Network Implementation. This is an overview of the changes in shisui, a fork of geth.

diff --git ethereum/go-ethereum/.gitea/workflows/release-azure-cleanup.yml optimism-java/shisui/.gitea/workflows/release-azure-cleanup.yml deleted file mode 100644 index da2400ee2680612c13bfcd0d1244c7195bc162a9..0000000000000000000000000000000000000000 --- ethereum/go-ethereum/.gitea/workflows/release-azure-cleanup.yml +++ /dev/null @@ -1,22 +0,0 @@ -on: - schedule: - - cron: '0 0 * * *' - workflow_dispatch: - -jobs: - azure-cleanup: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Go - uses: actions/setup-go@v5 - with: - go-version: 1.24 - cache: false - - - name: Run cleanup script - run: | - go run build/ci.go purge -store gethstore/builds -days 14 - env: - AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }}
diff --git ethereum/go-ethereum/.gitea/workflows/release-ppa.yml optimism-java/shisui/.gitea/workflows/release-cron.yml rename from .gitea/workflows/release-ppa.yml rename to .gitea/workflows/release-cron.yml index 23bffe773d7b3cac11d2174fd98ba1f8201f240f..3a03d0ef1492eaf48b5af791c5be98cfad2c96d1 100644 --- ethereum/go-ethereum/.gitea/workflows/release-ppa.yml +++ optimism-java/shisui/.gitea/workflows/release-cron.yml @@ -1,14 +1,27 @@ +name: Release Builds (cron) + on: schedule: - - cron: '0 16 * * *' - push: - branches: - - "release/*" - workflow_dispatch: + cron: '0 0 * * *'   jobs: + azure-cleanup: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: 1.24 + cache: false + + - name: Run cleanup script + run: | + go run build/ci.go purge -store gethstore/builds -days 14 + ppa: - name: PPA Upload + name: PPA Upload (master) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -21,16 +34,9 @@ cache: false   - name: Install deb toolchain run: | - apt-get update apt-get -yq --no-install-suggests --no-install-recommends install devscripts debhelper dput fakeroot   - - name: Add launchpad to known_hosts - run: | - echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts - - name: Run ci.go run: | + echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder <geth-ci@ethereum.org>" - env: - PPA_SIGNING_KEY: ${{ secrets.PPA_SIGNING_KEY }} - PPA_SSH_KEY: ${{ secrets.PPA_SSH_KEY }}
diff --git ethereum/go-ethereum/.gitea/workflows/release.yml optimism-java/shisui/.gitea/workflows/release.yml index 04e724ccf454db13e89546f5a0faf81d5c0ac948..a91bebda7f0dfd82d5e63e9d1c5fc4b6d7357e71 100644 --- ethereum/go-ethereum/.gitea/workflows/release.yml +++ optimism-java/shisui/.gitea/workflows/release.yml @@ -1,12 +1,11 @@ +name: Release Builds (push) + on: push: - branches: - - "master" - tags: - - "v*" + branches: [ master ]   jobs: - linux-intel: + linux: name: Linux Build runs-on: ubuntu-latest steps: @@ -18,108 +17,13 @@ with: go-version: 1.24 cache: false   - - name: Install cross toolchain - run: | - apt-get update - apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib - - - name: Build (amd64) + - name: display environment run: | - go run build/ci.go install -arch amd64 -dlgo + env   - - name: Create/upload archive (amd64) + - name: Run build run: | - go run build/ci.go archive -arch amd64 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - rm -f build/bin/* - env: - LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }} - AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }} - - - name: Build (386) - run: | - go run build/ci.go install -arch 386 -dlgo - - - name: Create/upload archive (386) - run: | - go run build/ci.go archive -arch 386 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - rm -f build/bin/* - env: - LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }} - AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }} - - linux-arm: - name: Linux Build (arm) - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Go - uses: actions/setup-go@v5 - with: - go-version: 1.24 - cache: false - - - name: Install cross toolchain - run: | - apt-get update - apt-get -yq --no-install-suggests --no-install-recommends install gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-arm-linux-gnueabihf libc6-dev-armhf-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross - ln -s /usr/include/asm-generic /usr/include/asm - - - name: Build (arm64) - run: | - go run build/ci.go install -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc - - - name: Create/upload archive (arm64) - run: | - go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - rm -fr build/bin/* - env: - LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }} - AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }} - - - name: Run build (arm5) - run: | - go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc - env: - GOARM: "5" - - - name: Create/upload archive (arm5) - run: | - go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - env: - GOARM: "5" - LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }} - AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }} - - - name: Run build (arm6) - run: | - go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc - env: - GOARM: "6" - - - name: Create/upload archive (arm6) - run: | - go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - rm -fr build/bin/* - env: - GOARM: "6" - LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }} - AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }} - - - name: Run build (arm7) - run: | - go run build/ci.go install -dlgo -arch arm -cc arm-linux-gnueabi-gcc - env: - GOARM: "7" - - - name: Create/upload archive (arm7) - run: | - go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds - rm -fr build/bin/* - env: - GOARM: "7" - LINUX_SIGNING_KEY: ${{ secrets.LINUX_SIGNING_KEY }} - AZURE_BLOBSTORE_TOKEN: ${{ secrets.AZURE_BLOBSTORE_TOKEN }} + go run build/ci.go install   docker: name: Docker Image @@ -140,8 +44,5 @@ go-version: 1.24 cache: false   - name: Run docker build - env: - DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} - DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }} run: | - go run build/ci.go dockerx -platform linux/amd64,linux/arm64,linux/riscv64 -upload + go run build/ci.go dockerx -platform linux/amd64,linux/arm64,linux/riscv64
diff --git ethereum/go-ethereum/.github/workflows/page.yml optimism-java/shisui/.github/workflows/page.yml new file mode 100644 index 0000000000000000000000000000000000000000..d22179f1b14e17e5743a12242ea0cd9c1ec5143c --- /dev/null +++ optimism-java/shisui/.github/workflows/page.yml @@ -0,0 +1,51 @@ +name: Build and publish forkdiff github-pages +permissions: + contents: write +on: + push: + branches: + - portal + - gethintegration +jobs: + deploy: + concurrency: ci-${{ github.ref }} + runs-on: ubuntu-latest + steps: + - name: Checkout shisui origin + uses: actions/checkout@v3 + with: + path: ./ + ref: portal + fetch-depth: 1 + - name: Checkout shisui + uses: actions/checkout@v3 + with: + path: ./shisui + ref: gethintegration + fetch-depth: 1 + - name: Checkout go-ethereum + uses: actions/checkout@v3 + with: + repository: ethereum/go-ethereum + path: ./go-ethereum + ref: master + fetch-depth: 1 + - name: Build forkdiff + uses: "docker://protolambda/forkdiff:latest" + with: + args: -repo=./shisui -fork=./fork.yaml -out=./index.html -upstream-repo=./go-ethereum + + - name: Build pages + run: | + mkdir -p ./tmp/pages + mv index.html ./tmp/pages/index.html + touch ./tmp/pages/.nojekyll + if [ "$GITHUB_REPOSITORY" == "optimism-java/shisui" ]; then + echo "shisui.github.io" > tmp/pages/CNAME + fi; + + - name: Deploy + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: ./tmp/pages + clean: true
diff --git ethereum/go-ethereum/.travis.yml optimism-java/shisui/.travis.yml index 28d934c65560a812a2eff4c12871e02c6d41016b..43f8ced19c1957a3bbc742a9548960702e4874c4 100644 --- ethereum/go-ethereum/.travis.yml +++ optimism-java/shisui/.travis.yml @@ -5,7 +5,7 @@ jobs: include: # This builder create and push the Docker images for all architectures - stage: build - if: type = push && tag ~= /^v[0-9]/ + if: type = push os: linux arch: amd64 dist: focal @@ -21,25 +21,9 @@ - export DOCKER_CLI_EXPERIMENTAL=enabled script: - go run build/ci.go dockerx -platform "linux/amd64,linux/arm64,linux/riscv64" -hub ethereum/client-go -upload   - # This builder does the Ubuntu PPA nightly uploads - - stage: build - if: type = push && tag ~= /^v[0-9]/ - os: linux - dist: focal - go: 1.24.x - env: - - ubuntu-ppa - git: - submodules: false # avoid cloning ethereum/tests - before_install: - - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install devscripts debhelper dput fakeroot - script: - - echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts - - go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder <geth-ci@ethereum.org>" - # This builder does the Linux Azure uploads - stage: build - if: type = push && tag ~= /^v[0-9]/ + if: type = push os: linux dist: focal sudo: required @@ -72,6 +56,40 @@ - GOARM=7 go run build/ci.go archive -arch arm -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds - go run build/ci.go install -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc - go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -signify SIGNIFY_KEY -upload gethstore/builds   + # These builders run the tests + - stage: build + if: type = push + os: linux + arch: amd64 + dist: focal + go: 1.24.x + script: + - travis_wait 45 go run build/ci.go test $TEST_PACKAGES + + - stage: build + if: type = push + os: linux + dist: focal + go: 1.23.x + script: + - travis_wait 45 go run build/ci.go test $TEST_PACKAGES + + # This builder does the Ubuntu PPA nightly uploads + - stage: build + if: type = cron || (type = push && tag ~= /^v[0-9]/) + os: linux + dist: focal + go: 1.24.x + env: + - ubuntu-ppa + git: + submodules: false # avoid cloning ethereum/tests + before_install: + - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install devscripts debhelper dput fakeroot + script: + - echo '|1|7SiYPr9xl3uctzovOTj4gMwAC1M=|t6ReES75Bo/PxlOPJ6/GsGbTrM0= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0aKz5UTUndYgIGG7dQBV+HaeuEZJ2xPHo2DS2iSKvUL4xNMSAY4UguNW+pX56nAQmZKIZZ8MaEvSj6zMEDiq6HFfn5JcTlM80UwlnyKe8B8p7Nk06PPQLrnmQt5fh0HmEcZx+JU9TZsfCHPnX7MNz4ELfZE6cFsclClrKim3BHUIGq//t93DllB+h4O9LHjEUsQ1Sr63irDLSutkLJD6RXchjROXkNirlcNVHH/jwLWR5RcYilNX7S5bIkK8NlWPjsn/8Ua5O7I9/YoE97PpO6i73DTGLh5H9JN/SITwCKBkgSDWUt61uPK3Y11Gty7o2lWsBjhBUm2Y38CBsoGmBw==' >> ~/.ssh/known_hosts + - go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder <geth-ci@ethereum.org>" + # This builder does the Azure archive purges to avoid accumulating junk - stage: build if: type = cron @@ -84,3 +102,14 @@ git: submodules: false # avoid cloning ethereum/tests script: - go run build/ci.go purge -store gethstore/builds -days 14 + + # This builder executes race tests + - stage: build + if: type = cron + os: linux + dist: focal + go: 1.24.x + env: + - racetests + script: + - travis_wait 60 go run build/ci.go test -race $TEST_PACKAGES
diff --git ethereum/go-ethereum/cmd/devp2p/internal/v4test/discv4tests.go optimism-java/shisui/cmd/devp2p/internal/v4test/discv4tests.go index 963df6cdbc2c1dce7d5f804681566e75126de782..996e133dcaf03bdbeb7097dc73006e61ba67d5e1 100644 --- ethereum/go-ethereum/cmd/devp2p/internal/v4test/discv4tests.go +++ optimism-java/shisui/cmd/devp2p/internal/v4test/discv4tests.go @@ -510,10 +510,10 @@ {Name: "Ping/ExtraDataWrongFrom", Fn: PingExtraDataWrongFrom}, {Name: "Ping/PastExpiration", Fn: PingPastExpiration}, {Name: "Ping/WrongPacketType", Fn: WrongPacketType}, {Name: "Ping/BondThenPingWithWrongFrom", Fn: BondThenPingWithWrongFrom}, - {Name: "Findnode/WithoutEndpointProof", Fn: FindnodeWithoutEndpointProof}, - {Name: "Findnode/BasicFindnode", Fn: BasicFindnode}, - {Name: "Findnode/UnsolicitedNeighbors", Fn: UnsolicitedNeighbors}, - {Name: "Findnode/PastExpiration", Fn: FindnodePastExpiration}, + {Name: "findnode/WithoutEndpointProof", Fn: FindnodeWithoutEndpointProof}, + {Name: "findnode/BasicFindnode", Fn: BasicFindnode}, + {Name: "findnode/UnsolicitedNeighbors", Fn: UnsolicitedNeighbors}, + {Name: "findnode/PastExpiration", Fn: FindnodePastExpiration}, {Name: "Amplification/InvalidPongHash", Fn: FindnodeAmplificationInvalidPongHash}, {Name: "Amplification/WrongIP", Fn: FindnodeAmplificationWrongIP}, }
diff --git ethereum/go-ethereum/cmd/geth/config.go optimism-java/shisui/cmd/geth/config.go index 3eb2b6dd37fe2f5aea1a78a9bfcf7351e0a94ccb..4215403234ad7f8d0105c9a4be2e0e9ec174e091 100644 --- ethereum/go-ethereum/cmd/geth/config.go +++ optimism-java/shisui/cmd/geth/config.go @@ -36,7 +36,6 @@ "github.com/ethereum/go-ethereum/beacon/blsync" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/catalyst" "github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/internal/flags" @@ -181,45 +180,6 @@ return stack, cfg }   -// constructs the disclaimer text block which will be printed in the logs upon -// startup when Geth is running in dev mode. -func constructDevModeBanner(ctx *cli.Context, cfg gethConfig) string { - devModeBanner := `You are running Geth in --dev mode. Please note the following: - - 1. This mode is only intended for fast, iterative development without assumptions on - security or persistence. - 2. The database is created in memory unless specified otherwise. Therefore, shutting down - your computer or losing power will wipe your entire block data and chain state for - your dev environment. - 3. A random, pre-allocated developer account will be available and unlocked as - eth.coinbase, which can be used for testing. The random dev account is temporary, - stored on a ramdisk, and will be lost if your machine is restarted. - 4. Mining is enabled by default. However, the client will only seal blocks if transactions - are pending in the mempool. The miner's minimum accepted gas price is 1. - 5. Networking is disabled; there is no listen-address, the maximum number of peers is set - to 0, and discovery is disabled. -` - if !ctx.IsSet(utils.DataDirFlag.Name) { - devModeBanner += fmt.Sprintf(` - - Running in ephemeral mode. The following account has been prefunded in the genesis: - - Account - ------------------ - 0x%x (10^49 ETH) -`, cfg.Eth.Miner.PendingFeeRecipient) - if cfg.Eth.Miner.PendingFeeRecipient == utils.DeveloperAddr { - devModeBanner += fmt.Sprintf(` - Private Key - ------------------ - 0x%x -`, crypto.FromECDSA(utils.DeveloperKey)) - } - } - - return devModeBanner -} - // makeFullNode loads geth configuration and creates the Ethereum backend. func makeFullNode(ctx *cli.Context) *node.Node { stack, cfg := makeConfigNode(ctx) @@ -279,11 +239,6 @@ utils.Fatalf("failed to register dev mode catalyst service: %v", err) } catalyst.RegisterSimulatedBeaconAPIs(stack, simBeacon) stack.RegisterLifecycle(simBeacon) - - banner := constructDevModeBanner(ctx, cfg) - for _, line := range strings.Split(banner, "\n") { - log.Warn(line) - } } else if ctx.IsSet(utils.BeaconApiFlag.Name) { // Start blsync mode. srv := rpc.NewServer()
diff --git ethereum/go-ethereum/cmd/geth/main.go optimism-java/shisui/cmd/geth/main.go index 289af908283659d85eed8aa831621c6301678dcb..733c9cf230249d243f010ee5083543918a7cfb1b 100644 --- ethereum/go-ethereum/cmd/geth/main.go +++ optimism-java/shisui/cmd/geth/main.go @@ -294,6 +294,24 @@ case ctx.IsSet(utils.HoodiFlag.Name): log.Info("Starting Geth on Hoodi testnet...")   + case ctx.IsSet(utils.DeveloperFlag.Name): + log.Info("Starting Geth in ephemeral dev mode...") + log.Warn(`You are running Geth in --dev mode. Please note the following: + + 1. This mode is only intended for fast, iterative development without assumptions on + security or persistence. + 2. The database is created in memory unless specified otherwise. Therefore, shutting down + your computer or losing power will wipe your entire block data and chain state for + your dev environment. + 3. A random, pre-allocated developer account will be available and unlocked as + eth.coinbase, which can be used for testing. The random dev account is temporary, + stored on a ramdisk, and will be lost if your machine is restarted. + 4. Mining is enabled by default. However, the client will only seal blocks if transactions + are pending in the mempool. The miner's minimum accepted gas price is 1. + 5. Networking is disabled; there is no listen-address, the maximum number of peers is set + to 0, and discovery is disabled. +`) + case !ctx.IsSet(utils.NetworkIdFlag.Name): log.Info("Starting Geth on Ethereum mainnet...") }
diff --git ethereum/go-ethereum/cmd/utils/flags.go optimism-java/shisui/cmd/utils/flags.go index 60a2cc13f110759737ca4be7b812060a66d81d1e..81c4172a53d21de6b895c0a37651f49229f87775 100644 --- ethereum/go-ethereum/cmd/utils/flags.go +++ optimism-java/shisui/cmd/utils/flags.go @@ -984,12 +984,6 @@ HttpHeaderFlag, } )   -// default account to prefund when running Geth in dev mode -var ( - DeveloperKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - DeveloperAddr = crypto.PubkeyToAddress(DeveloperKey.PublicKey) -) - // MakeDataDir retrieves the currently requested data directory, terminating // if none (or the empty string) is specified. If the node is starting a testnet, // then a subdirectory of the specified datadir will be used. @@ -1775,9 +1769,9 @@ developer = accounts.Account{Address: cfg.Miner.PendingFeeRecipient} } else if accs := ks.Accounts(); len(accs) > 0 { developer = ks.Accounts()[0] } else { - developer, err = ks.ImportECDSA(DeveloperKey, passphrase) + developer, err = ks.NewAccount(passphrase) if err != nil { - Fatalf("Failed to import developer account: %v", err) + Fatalf("Failed to create developer account: %v", err) } } // Make sure the address is configured as fee recipient, otherwise @@ -1792,18 +1786,14 @@ } } log.Info("Using developer account", "address", developer.Address)   - // configure default developer genesis which will be used unless a - // datadir is specified and a chain is preexisting at that location. + // Create a new developer genesis block or reuse existing one cfg.Genesis = core.DeveloperGenesisBlock(ctx.Uint64(DeveloperGasLimitFlag.Name), &developer.Address) - - // If a datadir is specified, ensure that any preexisting chain in that location - // has a configuration that is compatible with dev mode: it must be merged at genesis. if ctx.IsSet(DataDirFlag.Name) { chaindb := tryMakeReadOnlyDatabase(ctx, stack) if rawdb.ReadCanonicalHash(chaindb, 0) != (common.Hash{}) { - // signal fallback to preexisting chain on disk - cfg.Genesis = nil + cfg.Genesis = nil // fallback to db content   + //validate genesis has PoS enabled in block 0 genesis, err := core.ReadGenesis(chaindb) if err != nil { Fatalf("Could not read genesis from database: %v", err)
diff --git ethereum/go-ethereum/go.mod optimism-java/shisui/go.mod index 6c192c85d7d08337c4b50f5b42c6cd6d25e82c9e..d27af647ece779135b28a36ce526be64371371da 100644 --- ethereum/go-ethereum/go.mod +++ optimism-java/shisui/go.mod @@ -28,7 +28,7 @@ github.com/ferranbt/fastssz v0.1.2 github.com/fjl/gencodec v0.1.0 github.com/fsnotify/fsnotify v1.6.0 github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff - github.com/gofrs/flock v0.12.1 + github.com/gofrs/flock v0.8.1 github.com/golang-jwt/jwt/v4 v4.5.1 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/gofuzz v1.2.0
diff --git ethereum/go-ethereum/p2p/discover/v5_udp.go optimism-java/shisui/p2p/discover/v5_udp.go index 9679f5c61a9f5435e83e8766b4822f2517f91ada..b7c44b829df5723e727ef97333944e55bac0f214 100644 --- ethereum/go-ethereum/p2p/discover/v5_udp.go +++ optimism-java/shisui/p2p/discover/v5_udp.go @@ -96,12 +96,14 @@ callCh chan *callV5 callDoneCh chan *callV5 respTimeoutCh chan *callTimeout sendCh chan sendRequest + sendNoRespCh chan *sendNoRespRequest unhandled chan<- ReadPacket   // state of dispatch codec codecV5 activeCallByNode map[enode.ID]*callV5 activeCallByAuth map[v5wire.Nonce]*callV5 + noRespCallByAuth map[v5wire.Nonce]*callV5 callQueue map[enode.ID][]*callV5   // shutdown stuff @@ -113,6 +115,12 @@ }   type sendRequest struct { destID enode.ID + destAddr netip.AddrPort + msg v5wire.Packet +} + +type sendNoRespRequest struct { + destNode *enode.Node destAddr netip.AddrPort msg v5wire.Packet } @@ -176,12 +184,14 @@ readNextCh: make(chan struct{}, 1), callCh: make(chan *callV5), callDoneCh: make(chan *callV5), sendCh: make(chan sendRequest), + sendNoRespCh: make(chan *sendNoRespRequest), respTimeoutCh: make(chan *callTimeout), unhandled: cfg.Unhandled, // state of dispatch codec: v5wire.NewCodec(ln, cfg.PrivateKey, cfg.Clock, cfg.V5ProtocolID), activeCallByNode: make(map[enode.ID]*callV5), activeCallByAuth: make(map[v5wire.Nonce]*callV5), + noRespCallByAuth: make(map[v5wire.Nonce]*callV5), callQueue: make(map[enode.ID][]*callV5), // shutdown closeCtx: closeCtx, @@ -310,6 +320,21 @@ case respMsg := <-resp.ch: return respMsg.(*v5wire.TalkResponse).Message, nil case err := <-resp.err: return nil, err + } +} + +// TalkRequest sends a talk request to a node and waits for a response but will return when ctx timeout. +func (t *UDPv5) TalkRequestWithContext(ctx context.Context, n *enode.Node, protocol string, request []byte) ([]byte, error) { + req := &v5wire.TalkRequest{Protocol: protocol, Message: request} + resp := t.callToNode(n, v5wire.TalkResponseMsg, req) + defer t.callDone(resp) + select { + case respMsg := <-resp.ch: + return respMsg.(*v5wire.TalkResponse).Message, nil + case err := <-resp.err: + return nil, err + case <-ctx.Done(): + return nil, ctx.Err() } }   @@ -581,22 +606,29 @@ select { case c := <-t.callCh: t.callQueue[c.id] = append(t.callQueue[c.id], c) t.sendNextCall(c.id) + case cnr := <-t.sendNoRespCh: + // send a TalkReq call but not waiting for TalkResp + // may more used by portal network + t.sendCallNotWaitResp(cnr)   case ct := <-t.respTimeoutCh: active := t.activeCallByNode[ct.c.id] if ct.c == active && ct.timer == active.timeout { ct.c.err <- errTimeout } + delete(t.noRespCallByAuth, ct.c.nonce) + ct.c.timeout.Stop()   case c := <-t.callDoneCh: active := t.activeCallByNode[c.id] - if active != c { - panic("BUG: callDone for inactive call") + if active == c { + t.sendNextCall(c.id) + } + if c.timeout != nil { + c.timeout.Stop() } - c.timeout.Stop() delete(t.activeCallByAuth, c.nonce) delete(t.activeCallByNode, c.id) - t.sendNextCall(c.id)   case r := <-t.sendCh: t.send(r.destID, r.destAddr, r.msg, nil) @@ -619,6 +651,9 @@ c.err <- errClosed delete(t.activeCallByNode, id) delete(t.activeCallByAuth, c.nonce) } + for nonce := range t.noRespCallByAuth { + delete(t.activeCallByAuth, nonce) + } return } } @@ -644,6 +679,41 @@ c.timeout = timer close(done) }   +// sendCallNotWaitResp send a talk request contains utp packet by call, call will not insert into queue +func (t *UDPv5) sendCallNotWaitResp(r *sendNoRespRequest) { + // send out a TalkRequest that is a UTP packet for portal network + // if a handshake has been done, the n will not be nil, and just send the data out + if n := t.codec.SessionNode(r.destNode.ID(), r.destAddr.String()); n != nil { + t.send(r.destNode.ID(), r.destAddr, r.msg, nil) + return + } + + // request should be cached to handle WHOAREYOU + c := &callV5{id: r.destNode.ID(), addr: r.destAddr} + c.node = r.destNode + c.packet = r.msg + c.reqid = make([]byte, 8) + c.ch = make(chan v5wire.Packet, 1) + c.err = make(chan error, 1) + // Assign request ID. + crand.Read(c.reqid) + c.packet.SetRequestID(c.reqid) + + nonce, _ := t.send(c.id, c.addr, c.packet, nil) + c.nonce = nonce + t.noRespCallByAuth[nonce] = c + t.startResponseTimeout(c) +} + +// sendNoRespData send a data from a call of no wait resp. +// The handshake has just been successful, could clear the info in the map +func (t *UDPv5) sendNoRespData(c *callV5) { + // Just resend the data and not use call again + delete(t.noRespCallByAuth, c.nonce) + c.timeout.Stop() + t.send(c.node.ID(), c.addr, c.packet, nil) +} + // sendNextCall sends the next call in the call queue if there is no active call. func (t *UDPv5) sendNextCall(id enode.ID) { queue := t.callQueue[id] @@ -684,7 +754,15 @@ }   func (t *UDPv5) sendFromAnotherThread(toID enode.ID, toAddr netip.AddrPort, packet v5wire.Packet) { select { - case t.sendCh <- sendRequest{toID, toAddr, packet}: + case t.sendCh <- sendRequest{destID: toID, destAddr: toAddr, msg: packet}: + case <-t.closeCtx.Done(): + } +} + +// SendNoResp Send a packet but will not wait for a response +func (t *UDPv5) SendNoResp(n *enode.Node, toAddr netip.AddrPort, packet v5wire.Packet) { + select { + case t.sendNoRespCh <- &sendNoRespRequest{n, toAddr, packet}: case <-t.closeCtx.Done(): } } @@ -701,7 +779,6 @@ t.logcontext = append(t.logcontext, "err", err) t.log.Warn(">> "+packet.Name(), t.logcontext...) return nonce, err } - _, err = t.conn.WriteToUDPAddrPort(enc, toAddr) t.log.Trace(">> "+packet.Name(), t.logcontext...) return nonce, err @@ -879,15 +956,23 @@ return } // Resend the call that was answered by WHOAREYOU. t.log.Trace("<< "+p.Name(), "id", c.node.ID(), "addr", fromAddr) - c.handshakeCount++ - c.challenge = p - p.Node = c.node - t.sendCall(c) + if _, ok := t.noRespCallByAuth[p.Nonce]; !ok { + // Resend the call that was answered by WHOAREYOU. + c.handshakeCount++ + c.challenge = p + p.Node = c.node + t.sendCall(c) + } else { + t.sendNoRespData(c) + } }   // matchWithCall checks whether a handshake attempt matches the active call. func (t *UDPv5) matchWithCall(fromID enode.ID, nonce v5wire.Nonce) (*callV5, error) { c := t.activeCallByAuth[nonce] + if c == nil { + c = t.noRespCallByAuth[nonce] + } if c == nil { return nil, errChallengeNoCall }
diff --git ethereum/go-ethereum/triedb/pathdb/database.go optimism-java/shisui/triedb/pathdb/database.go index 3174a7c964b354216c1f433432bffc12757ab638..c20646031596c7025360919a8d8df24c4e5eb59e 100644 --- ethereum/go-ethereum/triedb/pathdb/database.go +++ optimism-java/shisui/triedb/pathdb/database.go @@ -487,7 +487,7 @@ rawdb.WriteSnapSyncStatusFlag(db.diskdb, rawdb.StateSyncFinished)   // Re-construct a new disk layer backed by persistent state // and schedule the state snapshot generation if it's permitted. - db.tree.init(generateSnapshot(db, root, db.isVerkle || db.config.SnapshotNoBuild)) + db.tree.reset(generateSnapshot(db, root, db.isVerkle || db.config.SnapshotNoBuild)) log.Info("Rebuilt trie database", "root", root) return nil } @@ -529,7 +529,7 @@ } // reset layer with newly created disk layer. It must be // done after each revert operation, otherwise the new // disk layer won't be accessible from outside. - db.tree.init(dl) + db.tree.reset(dl) } rawdb.DeleteTrieJournal(db.diskdb)
diff --git ethereum/go-ethereum/triedb/pathdb/difflayer.go optimism-java/shisui/triedb/pathdb/difflayer.go index ac05b4a0fbeb8a086c263842c8691aee1badc06e..2e1d83c74a94cb55fbc66d9b7894f32d7cfc561c 100644 --- ethereum/go-ethereum/triedb/pathdb/difflayer.go +++ optimism-java/shisui/triedb/pathdb/difflayer.go @@ -156,7 +156,7 @@ return newDiffLayer(dl, root, id, block, nodes, states) }   // persist flushes the diff layer and all its parent layers to disk layer. -func (dl *diffLayer) persist(force bool) (*diskLayer, error) { +func (dl *diffLayer) persist(force bool) (layer, error) { if parent, ok := dl.parentLayer().(*diffLayer); ok { // Hold the lock to prevent any read operation until the new // parent is linked correctly. @@ -183,7 +183,7 @@ }   // diffToDisk merges a bottom-most diff into the persistent disk layer underneath // it. The method will panic if called onto a non-bottom-most diff layer. -func diffToDisk(layer *diffLayer, force bool) (*diskLayer, error) { +func diffToDisk(layer *diffLayer, force bool) (layer, error) { disk, ok := layer.parentLayer().(*diskLayer) if !ok { panic(fmt.Sprintf("unknown layer type: %T", layer.parentLayer()))
diff --git ethereum/go-ethereum/triedb/pathdb/disklayer.go optimism-java/shisui/triedb/pathdb/disklayer.go index 1c9efb024bd6e0c04762fb642d85219f0800a10c..bee4cd1e8a4f0e42a0a08b379c0575829f162c1a 100644 --- ethereum/go-ethereum/triedb/pathdb/disklayer.go +++ optimism-java/shisui/triedb/pathdb/disklayer.go @@ -94,6 +94,15 @@ func (dl *diskLayer) setGenerator(generator *generator) { dl.generator = generator }   +// isStale return whether this layer has become stale (was flattened across) or if +// it's still live. +func (dl *diskLayer) isStale() bool { + dl.lock.RLock() + defer dl.lock.RUnlock() + + return dl.stale +} + // markStale sets the stale flag as true. func (dl *diskLayer) markStale() { dl.lock.Lock()
diff --git ethereum/go-ethereum/triedb/pathdb/layertree.go optimism-java/shisui/triedb/pathdb/layertree.go index b2f3f7f37ded4e0d6255b8ea212ea5255a926936..85a5e470e7f958d6c66873d01329f88c2cdb5197 100644 --- ethereum/go-ethereum/triedb/pathdb/layertree.go +++ optimism-java/shisui/triedb/pathdb/layertree.go @@ -31,50 +31,29 @@ // state layers linked with each other in a tree structure. It's // thread-safe to use. However, callers need to ensure the thread-safety // of the referenced layer by themselves. type layerTree struct { - base *diskLayer + lock sync.RWMutex layers map[common.Hash]layer - - // descendants is a two-dimensional map where the keys represent - // an ancestor state root, and the values are the state roots of - // all its descendants. - // - // For example: r -> [c1, c2, ..., cn], where c1 through cn are - // the descendants of state r. - // - // This map includes all the existing diff layers and the disk layer. - descendants map[common.Hash]map[common.Hash]struct{} - lookup *lookup - lock sync.RWMutex }   // newLayerTree constructs the layerTree with the given head layer. func newLayerTree(head layer) *layerTree { tree := new(layerTree) - tree.init(head) + tree.reset(head) return tree }   -// init initializes the layerTree by the given head layer. -func (tree *layerTree) init(head layer) { +// reset initializes the layerTree by the given head layer. +// All the ancestors will be iterated out and linked in the tree. +func (tree *layerTree) reset(head layer) { tree.lock.Lock() defer tree.lock.Unlock()   - current := head - tree.layers = make(map[common.Hash]layer) - tree.descendants = make(map[common.Hash]map[common.Hash]struct{}) - - for { - tree.layers[current.rootHash()] = current - tree.fillAncestors(current) - - parent := current.parentLayer() - if parent == nil { - break - } - current = parent + var layers = make(map[common.Hash]layer) + for head != nil { + layers[head.rootHash()] = head + head = head.parentLayer() } - tree.base = current.(*diskLayer) // panic if it's not a disk layer - tree.lookup = newLookup(head, tree.isDescendant) + tree.layers = layers }   // get retrieves a layer belonging to the given state root. @@ -85,43 +64,6 @@ return tree.layers[root] }   -// isDescendant returns whether the specified layer with given root is a -// descendant of a specific ancestor. -// -// This function assumes the read lock has been held. -func (tree *layerTree) isDescendant(root common.Hash, ancestor common.Hash) bool { - subset := tree.descendants[ancestor] - if subset == nil { - return false - } - _, ok := subset[root] - return ok -} - -// fillAncestors identifies the ancestors of the given layer and populates the -// descendants set. The ancestors include the diff layers below the supplied -// layer and also the disk layer. -// -// This function assumes the write lock has been held. -func (tree *layerTree) fillAncestors(layer layer) { - hash := layer.rootHash() - for { - parent := layer.parentLayer() - if parent == nil { - break - } - layer = parent - - phash := parent.rootHash() - subset := tree.descendants[phash] - if subset == nil { - subset = make(map[common.Hash]struct{}) - tree.descendants[phash] = subset - } - subset[hash] = struct{}{} - } -} - // forEach iterates the stored layers inside and applies the // given callback on them. func (tree *layerTree) forEach(onLayer func(layer)) { @@ -159,16 +101,8 @@ } l := parent.update(root, parent.stateID()+1, block, newNodeSet(nodes.Flatten()), states)   tree.lock.Lock() - defer tree.lock.Unlock() - - // Link the given layer into the layer set tree.layers[l.rootHash()] = l - - // Link the given layer into its ancestors (up to the current disk layer) - tree.fillAncestors(l) - - // Link the given layer into the state mutation history - tree.lookup.addLayer(l) + tree.lock.Unlock() return nil }   @@ -193,16 +127,8 @@ base, err := diff.persist(true) if err != nil { return err } - tree.base = base - - // Reset the layer tree with the single new disk layer - tree.layers = map[common.Hash]layer{ - base.rootHash(): base, - } - // Resets the descendants map, since there's only a single disk layer - // with no descendants. - tree.descendants = make(map[common.Hash]map[common.Hash]struct{}) - tree.lookup = newLookup(base, tree.isDescendant) + // Replace the entire layer tree with the flat base + tree.layers = map[common.Hash]layer{base.rootHash(): base} return nil } // Dive until we run out of layers or reach the persistent database @@ -217,11 +143,6 @@ } } // We're out of layers, flatten anything below, stopping if it's the disk or if // the memory limit is not yet exceeded. - var ( - err error - replaced layer - newBase *diskLayer - ) switch parent := diff.parentLayer().(type) { case *diskLayer: return nil @@ -231,33 +152,14 @@ // Hold the lock to prevent any read operations until the new // parent is linked correctly. diff.lock.Lock()   - // Hold the reference of the original layer being replaced - replaced = parent - - // Replace the original parent layer with new disk layer. The procedure - // can be illustrated as below: - // - // Before change: - // Chain: - // C1->C2->C3->C4 (HEAD) - // ->C2'->C3'->C4' - // - // After change: - // Chain: - // (a) C3->C4 (HEAD) - // (b) C1->C2 - // ->C2'->C3'->C4' - // The original C3 is replaced by the new base (with root C3) - // Dangling layers in (b) will be removed later - newBase, err = parent.persist(false) + base, err := parent.persist(false) if err != nil { diff.lock.Unlock() return err } - tree.layers[newBase.rootHash()] = newBase + tree.layers[base.rootHash()] = base + diff.parent = base   - // Link the new parent and release the lock - diff.parent = newBase diff.lock.Unlock()   default: @@ -271,28 +173,19 @@ parent := dl.parentLayer().rootHash() children[parent] = append(children[parent], root) } } - clearDiff := func(layer layer) { - diff, ok := layer.(*diffLayer) - if !ok { - return - } - tree.lookup.removeLayer(diff) - } var remove func(root common.Hash) remove = func(root common.Hash) { - clearDiff(tree.layers[root]) - - // Unlink the layer from the layer tree and cascade to its children - delete(tree.descendants, root) delete(tree.layers, root) for _, child := range children[root] { remove(child) } delete(children, root) } - remove(tree.base.rootHash()) // remove the old/stale disk layer - clearDiff(replaced) // remove the lookup data of the stale parent being replaced - tree.base = newBase // update the base layer with newly constructed one + for root, layer := range tree.layers { + if dl, ok := layer.(*diskLayer); ok && dl.isStale() { + remove(root) + } + } return nil }   @@ -301,41 +194,17 @@ func (tree *layerTree) bottom() *diskLayer { tree.lock.RLock() defer tree.lock.RUnlock()   - return tree.base -} - -// lookupAccount returns the layer that is guaranteed to contain the account data -// corresponding to the specified state root being queried. -func (tree *layerTree) lookupAccount(accountHash common.Hash, state common.Hash) (layer, error) { - // Hold the read lock to prevent the unexpected layer changes - tree.lock.RLock() - defer tree.lock.RUnlock() - - tip := tree.lookup.accountTip(accountHash, state, tree.base.root) - if tip == (common.Hash{}) { - return nil, fmt.Errorf("[%#x] %w", state, errSnapshotStale) - } - l := tree.layers[tip] - if l == nil { - return nil, fmt.Errorf("triedb layer [%#x] missing", tip) + if len(tree.layers) == 0 { + return nil // Shouldn't happen, empty tree } - return l, nil -} - -// lookupStorage returns the layer that is guaranteed to contain the storage slot -// data corresponding to the specified state root being queried. -func (tree *layerTree) lookupStorage(accountHash common.Hash, slotHash common.Hash, state common.Hash) (layer, error) { - // Hold the read lock to prevent the unexpected layer changes - tree.lock.RLock() - defer tree.lock.RUnlock() - - tip := tree.lookup.storageTip(accountHash, slotHash, state, tree.base.root) - if tip == (common.Hash{}) { - return nil, fmt.Errorf("[%#x] %w", state, errSnapshotStale) + // pick a random one as the entry point + var current layer + for _, layer := range tree.layers { + current = layer + break } - l := tree.layers[tip] - if l == nil { - return nil, fmt.Errorf("triedb layer [%#x] missing", tip) + for current.parentLayer() != nil { + current = current.parentLayer() } - return l, nil + return current.(*diskLayer) }
diff --git ethereum/go-ethereum/triedb/pathdb/layertree_test.go optimism-java/shisui/triedb/pathdb/layertree_test.go deleted file mode 100644 index a72ff5899eed1eeb25d60324033d77323fc218fa..0000000000000000000000000000000000000000 --- ethereum/go-ethereum/triedb/pathdb/layertree_test.go +++ /dev/null @@ -1,885 +0,0 @@ -// Copyright 2024 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/> - -package pathdb - -import ( - "errors" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/trie/trienode" -) - -func newTestLayerTree() *layerTree { - db := New(rawdb.NewMemoryDatabase(), nil, false) - l := newDiskLayer(common.Hash{0x1}, 0, db, nil, nil, newBuffer(0, nil, nil, 0)) - t := newLayerTree(l) - return t -} - -func TestLayerCap(t *testing.T) { - var cases = []struct { - init func() *layerTree - head common.Hash - layers int - base common.Hash - snapshot map[common.Hash]struct{} - }{ - { - // Chain: - // C1->C2->C3->C4 (HEAD) - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - // Chain: - // C2->C3->C4 (HEAD) - head: common.Hash{0x4}, - layers: 2, - base: common.Hash{0x2}, - snapshot: map[common.Hash]struct{}{ - common.Hash{0x2}: {}, - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - // Chain: - // C3->C4 (HEAD) - head: common.Hash{0x4}, - layers: 1, - base: common.Hash{0x3}, - snapshot: map[common.Hash]struct{}{ - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - // Chain: - // C4 (HEAD) - head: common.Hash{0x4}, - layers: 0, - base: common.Hash{0x4}, - snapshot: map[common.Hash]struct{}{ - common.Hash{0x4}: {}, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - // ->C2'->C3'->C4' - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2a}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3a}, common.Hash{0x2a}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4a}, common.Hash{0x3a}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x2b}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3b}, common.Hash{0x2b}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4b}, common.Hash{0x3b}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - // Chain: - // C2->C3->C4 (HEAD) - head: common.Hash{0x4a}, - layers: 2, - base: common.Hash{0x2a}, - snapshot: map[common.Hash]struct{}{ - common.Hash{0x4a}: {}, - common.Hash{0x3a}: {}, - common.Hash{0x2a}: {}, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - // ->C2'->C3'->C4' - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2a}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3a}, common.Hash{0x2a}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4a}, common.Hash{0x3a}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x2b}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3b}, common.Hash{0x2b}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4b}, common.Hash{0x3b}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - // Chain: - // C3->C4 (HEAD) - head: common.Hash{0x4a}, - layers: 1, - base: common.Hash{0x3a}, - snapshot: map[common.Hash]struct{}{ - common.Hash{0x4a}: {}, - common.Hash{0x3a}: {}, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - // ->C3'->C4' - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3a}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4a}, common.Hash{0x3a}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3b}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4b}, common.Hash{0x3b}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - // Chain: - // C2->C3->C4 (HEAD) - // ->C3'->C4' - head: common.Hash{0x4a}, - layers: 2, - base: common.Hash{0x2}, - snapshot: map[common.Hash]struct{}{ - common.Hash{0x4a}: {}, - common.Hash{0x3a}: {}, - common.Hash{0x4b}: {}, - common.Hash{0x3b}: {}, - common.Hash{0x2}: {}, - }, - }, - } - for _, c := range cases { - tr := c.init() - if err := tr.cap(c.head, c.layers); err != nil { - t.Fatalf("Failed to cap the layer tree %v", err) - } - if tr.bottom().root != c.base { - t.Fatalf("Unexpected bottom layer tree root, want %v, got %v", c.base, tr.bottom().root) - } - if len(c.snapshot) != len(tr.layers) { - t.Fatalf("Unexpected layer tree size, want %v, got %v", len(c.snapshot), len(tr.layers)) - } - for h := range tr.layers { - if _, ok := c.snapshot[h]; !ok { - t.Fatalf("Unexpected layer %v", h) - } - } - } -} - -func TestBaseLayer(t *testing.T) { - tr := newTestLayerTree() - - var cases = []struct { - op func() - base common.Hash - }{ - // Chain: - // C1 (HEAD) - { - func() {}, - common.Hash{0x1}, - }, - // Chain: - // C1->C2->C3 (HEAD) - { - func() { - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - }, - common.Hash{0x1}, - }, - // Chain: - // C3 (HEAD) - { - func() { - tr.cap(common.Hash{0x3}, 0) - }, - common.Hash{0x3}, - }, - // Chain: - // C4->C5->C6 (HEAD) - { - func() { - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x5}, common.Hash{0x4}, 4, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x6}, common.Hash{0x5}, 5, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.cap(common.Hash{0x6}, 2) - }, - common.Hash{0x4}, - }, - } - for _, c := range cases { - c.op() - if tr.base.rootHash() != c.base { - t.Fatalf("Unexpected base root, want %v, got: %v", c.base, tr.base.rootHash()) - } - } -} - -func TestDescendant(t *testing.T) { - var cases = []struct { - init func() *layerTree - snapshotA map[common.Hash]map[common.Hash]struct{} - op func(tr *layerTree) - snapshotB map[common.Hash]map[common.Hash]struct{} - }{ - { - // Chain: - // C1->C2 (HEAD) - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - snapshotA: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2}: {}, - }, - }, - // Chain: - // C1->C2->C3 (HEAD) - op: func(tr *layerTree) { - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - }, - snapshotB: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2}: {}, - common.Hash{0x3}: {}, - }, - common.Hash{0x2}: { - common.Hash{0x3}: {}, - }, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - snapshotA: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2}: {}, - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - common.Hash{0x2}: { - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - common.Hash{0x3}: { - common.Hash{0x4}: {}, - }, - }, - // Chain: - // C2->C3->C4 (HEAD) - op: func(tr *layerTree) { - tr.cap(common.Hash{0x4}, 2) - }, - snapshotB: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x2}: { - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - common.Hash{0x3}: { - common.Hash{0x4}: {}, - }, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - snapshotA: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2}: {}, - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - common.Hash{0x2}: { - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - common.Hash{0x3}: { - common.Hash{0x4}: {}, - }, - }, - // Chain: - // C3->C4 (HEAD) - op: func(tr *layerTree) { - tr.cap(common.Hash{0x4}, 1) - }, - snapshotB: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x3}: { - common.Hash{0x4}: {}, - }, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - snapshotA: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2}: {}, - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - common.Hash{0x2}: { - common.Hash{0x3}: {}, - common.Hash{0x4}: {}, - }, - common.Hash{0x3}: { - common.Hash{0x4}: {}, - }, - }, - // Chain: - // C4 (HEAD) - op: func(tr *layerTree) { - tr.cap(common.Hash{0x4}, 0) - }, - snapshotB: map[common.Hash]map[common.Hash]struct{}{}, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - // ->C2'->C3'->C4' - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2a}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3a}, common.Hash{0x2a}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4a}, common.Hash{0x3a}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x2b}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3b}, common.Hash{0x2b}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4b}, common.Hash{0x3b}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - snapshotA: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2a}: {}, - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - common.Hash{0x2b}: {}, - common.Hash{0x3b}: {}, - common.Hash{0x4b}: {}, - }, - common.Hash{0x2a}: { - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - }, - common.Hash{0x3a}: { - common.Hash{0x4a}: {}, - }, - common.Hash{0x2b}: { - common.Hash{0x3b}: {}, - common.Hash{0x4b}: {}, - }, - common.Hash{0x3b}: { - common.Hash{0x4b}: {}, - }, - }, - // Chain: - // C2->C3->C4 (HEAD) - op: func(tr *layerTree) { - tr.cap(common.Hash{0x4a}, 2) - }, - snapshotB: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x2a}: { - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - }, - common.Hash{0x3a}: { - common.Hash{0x4a}: {}, - }, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - // ->C2'->C3'->C4' - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2a}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3a}, common.Hash{0x2a}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4a}, common.Hash{0x3a}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x2b}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3b}, common.Hash{0x2b}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4b}, common.Hash{0x3b}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - snapshotA: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2a}: {}, - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - common.Hash{0x2b}: {}, - common.Hash{0x3b}: {}, - common.Hash{0x4b}: {}, - }, - common.Hash{0x2a}: { - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - }, - common.Hash{0x3a}: { - common.Hash{0x4a}: {}, - }, - common.Hash{0x2b}: { - common.Hash{0x3b}: {}, - common.Hash{0x4b}: {}, - }, - common.Hash{0x3b}: { - common.Hash{0x4b}: {}, - }, - }, - // Chain: - // C3->C4 (HEAD) - op: func(tr *layerTree) { - tr.cap(common.Hash{0x4a}, 1) - }, - snapshotB: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x3a}: { - common.Hash{0x4a}: {}, - }, - }, - }, - { - // Chain: - // C1->C2->C3->C4 (HEAD) - // ->C3'->C4' - init: func() *layerTree { - tr := newTestLayerTree() - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3a}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4a}, common.Hash{0x3a}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x3b}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - tr.add(common.Hash{0x4b}, common.Hash{0x3b}, 3, trienode.NewMergedNodeSet(), NewStateSetWithOrigin(nil, nil, nil, nil, false)) - return tr - }, - snapshotA: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x1}: { - common.Hash{0x2}: {}, - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - common.Hash{0x3b}: {}, - common.Hash{0x4b}: {}, - }, - common.Hash{0x2}: { - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - common.Hash{0x3b}: {}, - common.Hash{0x4b}: {}, - }, - common.Hash{0x3a}: { - common.Hash{0x4a}: {}, - }, - common.Hash{0x3b}: { - common.Hash{0x4b}: {}, - }, - }, - // Chain: - // C2->C3->C4 (HEAD) - // ->C3'->C4' - op: func(tr *layerTree) { - tr.cap(common.Hash{0x4a}, 2) - }, - snapshotB: map[common.Hash]map[common.Hash]struct{}{ - common.Hash{0x2}: { - common.Hash{0x3a}: {}, - common.Hash{0x4a}: {}, - common.Hash{0x3b}: {}, - common.Hash{0x4b}: {}, - }, - common.Hash{0x3a}: { - common.Hash{0x4a}: {}, - }, - common.Hash{0x3b}: { - common.Hash{0x4b}: {}, - }, - }, - }, - } - check := func(setA, setB map[common.Hash]map[common.Hash]struct{}) bool { - if len(setA) != len(setB) { - return false - } - for h, subA := range setA { - subB, ok := setB[h] - if !ok { - return false - } - if len(subA) != len(subB) { - return false - } - for hh := range subA { - if _, ok := subB[hh]; !ok { - return false - } - } - } - return true - } - for _, c := range cases { - tr := c.init() - if !check(c.snapshotA, tr.descendants) { - t.Fatalf("Unexpected descendants") - } - c.op(tr) - if !check(c.snapshotB, tr.descendants) { - t.Fatalf("Unexpected descendants") - } - } -} - -func TestAccountLookup(t *testing.T) { - // Chain: - // C1->C2->C3->C4 (HEAD) - tr := newTestLayerTree() // base = 0x1 - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), - NewStateSetWithOrigin(randomAccountSet("0xa"), nil, nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), - NewStateSetWithOrigin(randomAccountSet("0xb"), nil, nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), - NewStateSetWithOrigin(randomAccountSet("0xa", "0xc"), nil, nil, nil, false)) - - var cases = []struct { - account common.Hash - state common.Hash - expect common.Hash - }{ - { - // unknown account - common.HexToHash("0xd"), common.Hash{0x4}, common.Hash{0x1}, - }, - /* - lookup account from the top - */ - { - common.HexToHash("0xa"), common.Hash{0x4}, common.Hash{0x4}, - }, - { - common.HexToHash("0xb"), common.Hash{0x4}, common.Hash{0x3}, - }, - { - common.HexToHash("0xc"), common.Hash{0x4}, common.Hash{0x4}, - }, - /* - lookup account from the middle - */ - { - common.HexToHash("0xa"), common.Hash{0x3}, common.Hash{0x2}, - }, - { - common.HexToHash("0xb"), common.Hash{0x3}, common.Hash{0x3}, - }, - { - common.HexToHash("0xc"), common.Hash{0x3}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0xa"), common.Hash{0x2}, common.Hash{0x2}, - }, - { - common.HexToHash("0xb"), common.Hash{0x2}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0xc"), common.Hash{0x2}, common.Hash{0x1}, // not found - }, - /* - lookup account from the bottom - */ - { - common.HexToHash("0xa"), common.Hash{0x1}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0xb"), common.Hash{0x1}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0xc"), common.Hash{0x1}, common.Hash{0x1}, // not found - }, - } - for i, c := range cases { - l, err := tr.lookupAccount(c.account, c.state) - if err != nil { - t.Fatalf("%d: %v", i, err) - } - if l.rootHash() != c.expect { - t.Errorf("Unexpected tiphash, %d, want: %x, got: %x", i, c.expect, l.rootHash()) - } - } - - // Chain: - // C3->C4 (HEAD) - tr.cap(common.Hash{0x4}, 1) - - cases2 := []struct { - account common.Hash - state common.Hash - expect common.Hash - expectErr error - }{ - { - // unknown account - common.HexToHash("0xd"), common.Hash{0x4}, common.Hash{0x3}, nil, - }, - /* - lookup account from the top - */ - { - common.HexToHash("0xa"), common.Hash{0x4}, common.Hash{0x4}, nil, - }, - { - common.HexToHash("0xb"), common.Hash{0x4}, common.Hash{0x3}, nil, - }, - { - common.HexToHash("0xc"), common.Hash{0x4}, common.Hash{0x4}, nil, - }, - /* - lookup account from the bottom - */ - { - common.HexToHash("0xa"), common.Hash{0x3}, common.Hash{0x3}, nil, - }, - { - common.HexToHash("0xb"), common.Hash{0x3}, common.Hash{0x3}, nil, - }, - { - common.HexToHash("0xc"), common.Hash{0x3}, common.Hash{0x3}, nil, // not found - }, - /* - stale states - */ - { - common.HexToHash("0xa"), common.Hash{0x2}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0xb"), common.Hash{0x2}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0xc"), common.Hash{0x2}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0xa"), common.Hash{0x1}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0xb"), common.Hash{0x1}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0xc"), common.Hash{0x1}, common.Hash{}, errSnapshotStale, - }, - } - for i, c := range cases2 { - l, err := tr.lookupAccount(c.account, c.state) - if c.expectErr != nil { - if !errors.Is(err, c.expectErr) { - t.Fatalf("%d: unexpected error, want %v, got %v", i, c.expectErr, err) - } - } - if c.expectErr == nil { - if err != nil { - t.Fatalf("%d: %v", i, err) - } - if l.rootHash() != c.expect { - t.Errorf("Unexpected tiphash, %d, want: %x, got: %x", i, c.expect, l.rootHash()) - } - } - } -} - -func TestStorageLookup(t *testing.T) { - // Chain: - // C1->C2->C3->C4 (HEAD) - tr := newTestLayerTree() // base = 0x1 - tr.add(common.Hash{0x2}, common.Hash{0x1}, 1, trienode.NewMergedNodeSet(), - NewStateSetWithOrigin(randomAccountSet("0xa"), randomStorageSet([]string{"0xa"}, [][]string{{"0x1"}}, nil), nil, nil, false)) - tr.add(common.Hash{0x3}, common.Hash{0x2}, 2, trienode.NewMergedNodeSet(), - NewStateSetWithOrigin(randomAccountSet("0xa"), randomStorageSet([]string{"0xa"}, [][]string{{"0x2"}}, nil), nil, nil, false)) - tr.add(common.Hash{0x4}, common.Hash{0x3}, 3, trienode.NewMergedNodeSet(), - NewStateSetWithOrigin(randomAccountSet("0xa"), randomStorageSet([]string{"0xa"}, [][]string{{"0x1", "0x3"}}, nil), nil, nil, false)) - - var cases = []struct { - storage common.Hash - state common.Hash - expect common.Hash - }{ - { - // unknown storage slot - common.HexToHash("0x4"), common.Hash{0x4}, common.Hash{0x1}, - }, - /* - lookup storage slot from the top - */ - { - common.HexToHash("0x1"), common.Hash{0x4}, common.Hash{0x4}, - }, - { - common.HexToHash("0x2"), common.Hash{0x4}, common.Hash{0x3}, - }, - { - common.HexToHash("0x3"), common.Hash{0x4}, common.Hash{0x4}, - }, - /* - lookup storage slot from the middle - */ - { - common.HexToHash("0x1"), common.Hash{0x3}, common.Hash{0x2}, - }, - { - common.HexToHash("0x2"), common.Hash{0x3}, common.Hash{0x3}, - }, - { - common.HexToHash("0x3"), common.Hash{0x3}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0x1"), common.Hash{0x2}, common.Hash{0x2}, - }, - { - common.HexToHash("0x2"), common.Hash{0x2}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0x3"), common.Hash{0x2}, common.Hash{0x1}, // not found - }, - /* - lookup storage slot from the bottom - */ - { - common.HexToHash("0x1"), common.Hash{0x1}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0x2"), common.Hash{0x1}, common.Hash{0x1}, // not found - }, - { - common.HexToHash("0x3"), common.Hash{0x1}, common.Hash{0x1}, // not found - }, - } - for i, c := range cases { - l, err := tr.lookupStorage(common.HexToHash("0xa"), c.storage, c.state) - if err != nil { - t.Fatalf("%d: %v", i, err) - } - if l.rootHash() != c.expect { - t.Errorf("Unexpected tiphash, %d, want: %x, got: %x", i, c.expect, l.rootHash()) - } - } - - // Chain: - // C3->C4 (HEAD) - tr.cap(common.Hash{0x4}, 1) - - cases2 := []struct { - storage common.Hash - state common.Hash - expect common.Hash - expectErr error - }{ - { - // unknown storage slot - common.HexToHash("0x4"), common.Hash{0x4}, common.Hash{0x3}, nil, - }, - /* - lookup account from the top - */ - { - common.HexToHash("0x1"), common.Hash{0x4}, common.Hash{0x4}, nil, - }, - { - common.HexToHash("0x2"), common.Hash{0x4}, common.Hash{0x3}, nil, - }, - { - common.HexToHash("0x3"), common.Hash{0x4}, common.Hash{0x4}, nil, - }, - /* - lookup account from the bottom - */ - { - common.HexToHash("0x1"), common.Hash{0x3}, common.Hash{0x3}, nil, - }, - { - common.HexToHash("0x2"), common.Hash{0x3}, common.Hash{0x3}, nil, - }, - { - common.HexToHash("0x3"), common.Hash{0x3}, common.Hash{0x3}, nil, // not found - }, - /* - stale states - */ - { - common.HexToHash("0x1"), common.Hash{0x2}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0x2"), common.Hash{0x2}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0x3"), common.Hash{0x2}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0x1"), common.Hash{0x1}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0x2"), common.Hash{0x1}, common.Hash{}, errSnapshotStale, - }, - { - common.HexToHash("0x3"), common.Hash{0x1}, common.Hash{}, errSnapshotStale, - }, - } - for i, c := range cases2 { - l, err := tr.lookupStorage(common.HexToHash("0xa"), c.storage, c.state) - if c.expectErr != nil { - if !errors.Is(err, c.expectErr) { - t.Fatalf("%d: unexpected error, want %v, got %v", i, c.expectErr, err) - } - } - if c.expectErr == nil { - if err != nil { - t.Fatalf("%d: %v", i, err) - } - if l.rootHash() != c.expect { - t.Errorf("Unexpected tiphash, %d, want: %x, got: %x", i, c.expect, l.rootHash()) - } - } - } -}
diff --git ethereum/go-ethereum/triedb/pathdb/lookup.go optimism-java/shisui/triedb/pathdb/lookup.go deleted file mode 100644 index 8b092730f8fcb7f406615f474f2d9a6720c7fff1..0000000000000000000000000000000000000000 --- ethereum/go-ethereum/triedb/pathdb/lookup.go +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2024 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. - -package pathdb - -import ( - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "golang.org/x/sync/errgroup" -) - -// storageKey returns a key for uniquely identifying the storage slot. -func storageKey(accountHash common.Hash, slotHash common.Hash) [64]byte { - var key [64]byte - copy(key[:32], accountHash[:]) - copy(key[32:], slotHash[:]) - return key -} - -// lookup is an internal structure used to efficiently determine the layer in -// which a state entry resides. -type lookup struct { - // accounts represents the mutation history for specific accounts. - // The key is the account address hash, and the value is a slice - // of **diff layer** IDs indicating where the account was modified, - // with the order from oldest to newest. - accounts map[common.Hash][]common.Hash - - // storages represents the mutation history for specific storage - // slot. The key is the account address hash and the storage key - // hash, the value is a slice of **diff layer** IDs indicating - // where the slot was modified, with the order from oldest to newest. - storages map[[64]byte][]common.Hash - - // descendant is the callback indicating whether the layer with - // given root is a descendant of the one specified by `ancestor`. - descendant func(state common.Hash, ancestor common.Hash) bool -} - -// newLookup initializes the lookup structure. -func newLookup(head layer, descendant func(state common.Hash, ancestor common.Hash) bool) *lookup { - var ( - current = head - layers []layer - ) - for current != nil { - layers = append(layers, current) - current = current.parentLayer() - } - l := &lookup{ - accounts: make(map[common.Hash][]common.Hash), - storages: make(map[[64]byte][]common.Hash), - descendant: descendant, - } - // Apply the diff layers from bottom to top - for i := len(layers) - 1; i >= 0; i-- { - switch diff := layers[i].(type) { - case *diskLayer: - continue - case *diffLayer: - l.addLayer(diff) - } - } - return l -} - -// accountTip traverses the layer list associated with the given account in -// reverse order to locate the first entry that either matches the specified -// stateID or is a descendant of it. -// -// If found, the account data corresponding to the supplied stateID resides -// in that layer. Otherwise, two scenarios are possible: -// -// (a) the account remains unmodified from the current disk layer up to the state -// layer specified by the stateID: fallback to the disk layer for data retrieval, -// (b) or the layer specified by the stateID is stale: reject the data retrieval. -func (l *lookup) accountTip(accountHash common.Hash, stateID common.Hash, base common.Hash) common.Hash { - // Traverse the mutation history from latest to oldest one. Several - // scenarios are possible: - // - // Chain: - // D->C1->C2->C3->C4 (HEAD) - // ->C1'->C2'->C3' - // State: - // x: [C1, C1', C3', C3] - // y: [] - // - // - (x, C4) => C3 - // - (x, C3) => C3 - // - (x, C2) => C1 - // - (x, C3') => C3' - // - (x, C2') => C1' - // - (y, C4) => D - // - (y, C3') => D - // - (y, C0) => null - list := l.accounts[accountHash] - for i := len(list) - 1; i >= 0; i-- { - // If the current state matches the stateID, or the requested state is a - // descendant of it, return the current state as the most recent one - // containing the modified data. Otherwise, the current state may be ahead - // of the requested one or belong to a different branch. - if list[i] == stateID || l.descendant(stateID, list[i]) { - return list[i] - } - } - // No layer matching the stateID or its descendants was found. Use the - // current disk layer as a fallback. - if base == stateID || l.descendant(stateID, base) { - return base - } - // The layer associated with 'stateID' is not the descendant of the current - // disk layer, it's already stale, return nothing. - return common.Hash{} -} - -// storageTip traverses the layer list associated with the given account and -// slot hash in reverse order to locate the first entry that either matches -// the specified stateID or is a descendant of it. -// -// If found, the storage data corresponding to the supplied stateID resides -// in that layer. Otherwise, two scenarios are possible: -// -// (a) the storage slot remains unmodified from the current disk layer up to -// the state layer specified by the stateID: fallback to the disk layer for -// data retrieval, (b) or the layer specified by the stateID is stale: reject -// the data retrieval. -func (l *lookup) storageTip(accountHash common.Hash, slotHash common.Hash, stateID common.Hash, base common.Hash) common.Hash { - list := l.storages[storageKey(accountHash, slotHash)] - for i := len(list) - 1; i >= 0; i-- { - // If the current state matches the stateID, or the requested state is a - // descendant of it, return the current state as the most recent one - // containing the modified data. Otherwise, the current state may be ahead - // of the requested one or belong to a different branch. - if list[i] == stateID || l.descendant(stateID, list[i]) { - return list[i] - } - } - // No layer matching the stateID or its descendants was found. Use the - // current disk layer as a fallback. - if base == stateID || l.descendant(stateID, base) { - return base - } - // The layer associated with 'stateID' is not the descendant of the current - // disk layer, it's already stale, return nothing. - return common.Hash{} -} - -// addLayer traverses the state data retained in the specified diff layer and -// integrates it into the lookup set. -// -// This function assumes that all layers older than the provided one have already -// been processed, ensuring that layers are processed strictly in a bottom-to-top -// order. -func (l *lookup) addLayer(diff *diffLayer) { - defer func(now time.Time) { - lookupAddLayerTimer.UpdateSince(now) - }(time.Now()) - - var ( - wg sync.WaitGroup - state = diff.rootHash() - ) - wg.Add(1) - go func() { - defer wg.Done() - for accountHash := range diff.states.accountData { - list, exists := l.accounts[accountHash] - if !exists { - list = make([]common.Hash, 0, 16) // TODO(rjl493456442) use sync pool - } - list = append(list, state) - l.accounts[accountHash] = list - } - }() - - wg.Add(1) - go func() { - defer wg.Done() - for accountHash, slots := range diff.states.storageData { - for slotHash := range slots { - key := storageKey(accountHash, slotHash) - list, exists := l.storages[key] - if !exists { - list = make([]common.Hash, 0, 16) // TODO(rjl493456442) use sync pool - } - list = append(list, state) - l.storages[key] = list - } - } - }() - wg.Wait() -} - -// removeFromList removes the specified element from the provided list. -// It returns a flag indicating whether the element was found and removed. -func removeFromList(list []common.Hash, element common.Hash) (bool, []common.Hash) { - // Traverse the list from oldest to newest to quickly locate the element. - for i := 0; i < len(list); i++ { - if list[i] == element { - if i != 0 { - list = append(list[:i], list[i+1:]...) - } else { - // Remove the first element by shifting the slice forward. - // Pros: zero-copy. - // Cons: may retain large backing array, causing memory leaks. - // Mitigation: release the array if capacity exceeds threshold. - list = list[1:] - if cap(list) > 1024 { - list = append(make([]common.Hash, 0, len(list)), list...) - } - } - return true, list - } - } - return false, nil -} - -// removeLayer traverses the state data retained in the specified diff layer and -// unlink them from the lookup set. -func (l *lookup) removeLayer(diff *diffLayer) error { - defer func(now time.Time) { - lookupRemoveLayerTimer.UpdateSince(now) - }(time.Now()) - - var ( - eg errgroup.Group - state = diff.rootHash() - ) - eg.Go(func() error { - for accountHash := range diff.states.accountData { - found, list := removeFromList(l.accounts[accountHash], state) - if !found { - return fmt.Errorf("account lookup is not found, %x, state: %x", accountHash, state) - } - if len(list) != 0 { - l.accounts[accountHash] = list - } else { - delete(l.accounts, accountHash) - } - } - return nil - }) - - eg.Go(func() error { - for accountHash, slots := range diff.states.storageData { - for slotHash := range slots { - key := storageKey(accountHash, slotHash) - found, list := removeFromList(l.storages[key], state) - if !found { - return fmt.Errorf("storage lookup is not found, %x %x, state: %x", accountHash, slotHash, state) - } - if len(list) != 0 { - l.storages[key] = list - } else { - delete(l.storages, key) - } - } - } - return nil - }) - return eg.Wait() -}
diff --git ethereum/go-ethereum/triedb/pathdb/metrics.go optimism-java/shisui/triedb/pathdb/metrics.go index 6d40c5713b4fa4eeed8982536d48b7a7151e18bb..502c34fc62ec23e0803ec9b90f63dcde3559bdfe 100644 --- ethereum/go-ethereum/triedb/pathdb/metrics.go +++ optimism-java/shisui/triedb/pathdb/metrics.go @@ -72,9 +72,6 @@ historyBuildTimeMeter = metrics.NewRegisteredResettingTimer("pathdb/history/time", nil) historyDataBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/data", nil) historyIndexBytesMeter = metrics.NewRegisteredMeter("pathdb/history/bytes/index", nil) - - lookupAddLayerTimer = metrics.NewRegisteredResettingTimer("pathdb/lookup/add/time", nil) - lookupRemoveLayerTimer = metrics.NewRegisteredResettingTimer("pathdb/lookup/remove/time", nil) )   // Metrics in generation
diff --git ethereum/go-ethereum/triedb/pathdb/reader.go optimism-java/shisui/triedb/pathdb/reader.go index bc72db34e34cfebad7cf27d064590517c98fa90a..30f75d10582ea6b9189f8ae04d0a377f81b59cad 100644 --- ethereum/go-ethereum/triedb/pathdb/reader.go +++ optimism-java/shisui/triedb/pathdb/reader.go @@ -17,7 +17,6 @@ package pathdb   import ( - "errors" "fmt"   "github.com/ethereum/go-ethereum/common" @@ -51,10 +50,8 @@ // reader implements the database.NodeReader interface, providing the functionalities to // retrieve trie nodes by wrapping the internal state layer. type reader struct { - db *Database - state common.Hash - noHashCheck bool layer layer + noHashCheck bool }   // Node implements database.NodeReader interface, retrieving the node with specified @@ -97,23 +94,7 @@ // Note: // - the returned account data is not a copy, please don't modify it // - no error will be returned if the requested account is not found in database func (r *reader) AccountRLP(hash common.Hash) ([]byte, error) { - l, err := r.db.tree.lookupAccount(hash, r.state) - if err != nil { - return nil, err - } - // If the located layer is stale, fall back to the slow path to retrieve - // the account data. This is an edge case where the located layer is the - // disk layer (e.g., the requested account was not changed in all the diff - // layers), and it becomes stale within a very short time window. - // - // This fallback mechanism is essential, because the traversal starts from - // the entry point layer and goes down, the staleness of the disk layer does - // not affect the result unless the entry point layer is also stale. - blob, err := l.account(hash, 0) - if errors.Is(err, errSnapshotStale) { - return r.layer.account(hash, 0) - } - return blob, err + return r.layer.account(hash, 0) }   // Account directly retrieves the account associated with a particular hash in @@ -124,7 +105,7 @@ // Note: // - the returned account object is safe to modify // - no error will be returned if the requested account is not found in database func (r *reader) Account(hash common.Hash) (*types.SlimAccount, error) { - blob, err := r.AccountRLP(hash) + blob, err := r.layer.account(hash, 0) if err != nil { return nil, err } @@ -146,23 +127,7 @@ // Note: // - the returned storage data is not a copy, please don't modify it // - no error will be returned if the requested slot is not found in database func (r *reader) Storage(accountHash, storageHash common.Hash) ([]byte, error) { - l, err := r.db.tree.lookupStorage(accountHash, storageHash, r.state) - if err != nil { - return nil, err - } - // If the located layer is stale, fall back to the slow path to retrieve - // the storage data. This is an edge case where the located layer is the - // disk layer (e.g., the requested account was not changed in all the diff - // layers), and it becomes stale within a very short time window. - // - // This fallback mechanism is essential, because the traversal starts from - // the entry point layer and goes down, the staleness of the disk layer does - // not affect the result unless the entry point layer is also stale. - blob, err := l.storage(accountHash, storageHash, 0) - if errors.Is(err, errSnapshotStale) { - return r.layer.storage(accountHash, storageHash, 0) - } - return blob, err + return r.layer.storage(accountHash, storageHash, 0) }   // NodeReader retrieves a layer belonging to the given state root. @@ -171,12 +136,7 @@ layer := db.tree.get(root) if layer == nil { return nil, fmt.Errorf("state %#x is not available", root) } - return &reader{ - db: db, - state: root, - noHashCheck: db.isVerkle, - layer: layer, - }, nil + return &reader{layer: layer, noHashCheck: db.isVerkle}, nil }   // StateReader returns a reader that allows access to the state data associated @@ -186,9 +146,5 @@ layer := db.tree.get(root) if layer == nil { return nil, fmt.Errorf("state %#x is not available", root) } - return &reader{ - db: db, - state: root, - layer: layer, - }, nil + return &reader{layer: layer}, nil }
diff --git ethereum/go-ethereum/go.sum optimism-java/shisui/go.sum index c91e34965654b229826dbe3330a4645325500d29..200b3725eaa876350ad4f8c7a5a7abcaf87c88be 100644 --- ethereum/go-ethereum/go.sum +++ optimism-java/shisui/go.sum @@ -144,8 +144,8 @@ github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= -github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
diff --git ethereum/go-ethereum/grafana/README.md optimism-java/shisui/grafana/README.md new file mode 100644 index 0000000000000000000000000000000000000000..31fcdae0c91facac9e4fcbd8f6aa345e285967e3 --- /dev/null +++ optimism-java/shisui/grafana/README.md @@ -0,0 +1,148 @@ +# Monitoring Shisui with InfluxDB and Grafana + +This tutorial will guide you through the process of installing [Shisui](https://github.com/optimism-java/shisui), which is a [Portal Network](https://ethportal.net/) client, and the auxiliary software [InfluxDb](https://www.influxdata.com/products/influxdb/) and [Grafana](https://grafana.com/). With this set up, it will be possible to run a dashboard to monitor the behavior of a network node running Shisui. + +All the steps described here are based on [Docker](https://www.docker.com/), except for Shisui, but you can also install the software directly on the operating system. Links to documentation describing different types of installation will be provided. + +## Setting up InfluxDB + +To run InfluxDB using Docker run the command below: + +```sh +docker run \ + --name influxdb \ + --publish 8086:8086 \ + --add-host host.docker.internal:host-gateway \ + influxdb:1.11 +``` + +If you're using a system that doesn't have Docker, or if you prefer to install InfluxDB directly on the operating system, check out the installation options available in [the documentation](https://docs.influxdata.com/influxdb/v2/install/). + +From another terminal, you can execute [InfluxDB CLI](https://docs.influxdata.com/influxdb/v2/tools/influx-cli/) to finalize the InfluxDB configuration. Create the user: + +```sh +curl -XPOST "http://localhost:8086/query" --data-urlencode "q=CREATE USER admin WITH PASSWORD 'admin' WITH ALL PRIVILEGES" +``` +Note that when creating the user we chose the name “admin” and the password “admin”, you can change these values if you want a different administrator user. + +Then log in to the InfluxDB CLI: + +```sh +influx -username 'admin' -password 'admin' +``` + +Create a database and a user for Shisui metrics. + +```sh +create database shisui +create user shisui with password 'shisui' +``` + +Verify created database and user: + +```sh +show databases +show users +``` + +Leave InfluxDB CLI. + +```sh +quit +``` + +InfluxDB is running and configured to store metrics from Shisui. + +## Preparing Shisui + +The next step is to install and run Shisui with the parameters that allow the metrics to be exported to our InfluxDB instance. Shisui is software written in the [Go](https://go.dev/) language, so if you don't have a compiler installed, you'll need one. Follow the instructions on the official website to [install](https://go.dev/doc/install) the compiler on your machine. + +Download the latest version of Shisui: +```sh +git clone https://github.com/optimism-java/shisui.git +``` + +Enter the `shisui` directory and install: +```sh +cd shisui +make shisui +``` + +After running the above commands, you should already be able to run Shisui with the command `./build/bin/shisui`, but we can move it to the system path (you'll need sudo permission): +```sh +sudo mv ./build/bin/shisui /usr/local/bin +``` + +Then run Shisui with the command: +```sh +shisui --data.dir $HOME/.shisui --nat stun --networks "history,beacon,state" --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://127.0.0.1:8086" --metrics.influxdb.username "shisui" --metrics.influxdb.password "shisui" --metrics.influxdb.database shisui +``` + +The parameters used are: +- data.dir - configures the directory in which the databases with network data and metadata will be stored. +- nat - configures the stun server, used to pick up the external IP. If you're not behind a NAT you don't need this parameter, but if you don't know anything about it, use it. +- networks - configures the Shisui node to run on the three subnets: history, beacon, and state. +- metrics - enable metrics collection. +- metrics.influxdb - enable the InfluxDB V1 database to be fed with the collected metrics. +- metrics.influxdb.endpoint - InfluxDB address for sending metrics. +- metrics.influxdb.username - username used by Shisui to feed data into InfluxDB. +- metrics.influxdb.password - user password used by Shisui to feed data into InfluxDB. +- metrics.influxdb.database - InfluxDB database used. + +You can verify that Shisui is successfully pushing data by listing metrics in the database using InfluxDB CLI: +```sh +influx -username 'admin' -password 'admin' +use shisui +show measurements +``` + +Shisui also provides other configuration parameters and even the option to run with Docker, more information can be found in its [documentation](https://github.com/optimism-java/shisui?tab=readme-ov-file#shisui). + +## Setting up Grafana + +Execute Grafana using Docker with the command: + +```sh +docker run \ + --publish 3000:3000 \ + --add-host host.docker.internal:host-gateway \ + grafana/grafana:latest +``` + +After the above command, Grafana should already be accessible, open any browser and access the address [`localhost:3000`](http://localhost:3000). When prompted for a username and password, use the default `admin` and `admin` respectively. + +![](./grafana1.png) + +You will be redirected to the Grafana home page. First, set up your datasource. Click on the configuration icon in the left bar and select "Data sources". + +![](./grafana2.png) + +There aren't any datasources created yet, click on “Add datasource” to define one. For this setup, select “InfluxDB” and proceed. Two sets of values need to be configured when creating an InfluxDB datasource. The first is the “HTTP” fields, configure the “URL” with the value `http://host.docker.internal:8086` as shown below: + +![](./grafana3.png) + +Then configure our created dabasse “shisui” with the username and password of our created user shisui: + +![](./grafana4.png) + +Click on the “Save and Test” button to check that the configuration was successful: + +![](./grafana5.png) + +Now let's create a dashboard that consumes the data from the datasource. Click on the configuration icon in the right bar and select “Dashboards”, then, on the top right-hand side of the screen, click on the “New” menu and choose the “import” option: + +![](./grafana6.png) + +Click on “Upload dashboard JSON file” and choose the file [provided](shisuiDashboard.json) and import it. + +The dashboard should not be working, this is due to a connection failure with the datasource, so let's configure it. In the top right corner, click on the “Dashboard settings” icon: + +![](./grafana7.png) + +In Settings, go to the tab “Variables” and click on “New variable”. When setting up our new variable, we need to change 3 places. The type needs to be “Data source” and the name “datasource”. In the “type” menu of the “Data source options” section, we choose our newly created influxDB datasource: + +![](./grafana8.png) + +Click on “Apply” and save the changes made to the Dashboard. By now you have your dashboard up and running: + +![](./grafana9.png)
diff --git ethereum/go-ethereum/grafana/grafana1.png optimism-java/shisui/grafana/grafana1.png new file mode 100644 index 0000000000000000000000000000000000000000..f559b69a6fe2898d9503c3864959ee70980c0183 Binary files /dev/null and optimism-java/shisui/grafana/grafana1.png differ
diff --git ethereum/go-ethereum/grafana/grafana2.png optimism-java/shisui/grafana/grafana2.png new file mode 100644 index 0000000000000000000000000000000000000000..21d89ffb037f4a7305c5303bdbdd7411850dd2fd Binary files /dev/null and optimism-java/shisui/grafana/grafana2.png differ
diff --git ethereum/go-ethereum/grafana/grafana3.png optimism-java/shisui/grafana/grafana3.png new file mode 100644 index 0000000000000000000000000000000000000000..6834ebef7d8d6f99e5c2af72c2fad7cac9c5bd5d Binary files /dev/null and optimism-java/shisui/grafana/grafana3.png differ
diff --git ethereum/go-ethereum/grafana/grafana4.png optimism-java/shisui/grafana/grafana4.png new file mode 100644 index 0000000000000000000000000000000000000000..ba92c0ee8738b4d7e0eb6286bf7a7690e5e88b01 Binary files /dev/null and optimism-java/shisui/grafana/grafana4.png differ
diff --git ethereum/go-ethereum/grafana/grafana5.png optimism-java/shisui/grafana/grafana5.png new file mode 100644 index 0000000000000000000000000000000000000000..be1fda5c6bb66c97e93f3e0f385f0b879b10b60f Binary files /dev/null and optimism-java/shisui/grafana/grafana5.png differ
diff --git ethereum/go-ethereum/grafana/grafana6.png optimism-java/shisui/grafana/grafana6.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f388859e8dfd5ccdcb60820cd68a4b631a91a9 Binary files /dev/null and optimism-java/shisui/grafana/grafana6.png differ
diff --git ethereum/go-ethereum/grafana/grafana7.png optimism-java/shisui/grafana/grafana7.png new file mode 100644 index 0000000000000000000000000000000000000000..f68c3fccf56fa072bc61e5f0b6b68976ad2f3c86 Binary files /dev/null and optimism-java/shisui/grafana/grafana7.png differ
diff --git ethereum/go-ethereum/grafana/grafana8.png optimism-java/shisui/grafana/grafana8.png new file mode 100644 index 0000000000000000000000000000000000000000..3bd5f7eea51b5affb52d988ad8081b62d29e68b0 Binary files /dev/null and optimism-java/shisui/grafana/grafana8.png differ
diff --git ethereum/go-ethereum/grafana/grafana9.png optimism-java/shisui/grafana/grafana9.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2942de70b72f4922e7388799ed276a3ed11d4e Binary files /dev/null and optimism-java/shisui/grafana/grafana9.png differ
diff --git ethereum/go-ethereum/grafana/shisuiDashboard.json optimism-java/shisui/grafana/shisuiDashboard.json new file mode 100644 index 0000000000000000000000000000000000000000..a34d98edc5736385781bec718fb08004a159729f --- /dev/null +++ optimism-java/shisui/grafana/shisuiDashboard.json @@ -0,0 +1,13564 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Dashboard for Shisui node - forked from Geth", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 7, + "links": [], + "panels": [ + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 82, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 106, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "system", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "system_cpu_sysload", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "system", + "measurement": "geth.system/cpu/sysload.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "iowait", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "system_cpu_syswait", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "iowait", + "measurement": "geth.system/cpu/syswait.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "shisui", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "system_cpu_procload", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "shisui", + "measurement": "geth.system/cpu/procload.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 107, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "alloc", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "system_cpu_sysload", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "system", + "measurement": "geth.system/memory/allocs.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "used", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "system_cpu_syswait", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "iowait", + "measurement": "geth.system/memory/used.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "held", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "system_cpu_procload", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "shisui", + "measurement": "geth.system/memory/held.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 1364 + }, + "id": 85, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "read", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "rate(system_disk_readbytes[1m])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "read", + "measurement": "geth.system/disk/readdata.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "write", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "rate(system_disk_writebytes[1m])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "write", + "measurement": "geth.system/disk/writedata.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m1" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Disk", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 1364 + }, + "id": 181, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "goroutine count", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "txpool_pending", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "executable", + "measurement": "geth.system/cpu/goroutines.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "distinct" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Goroutines", + "type": "timeseries" + } + ], + "title": "System", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 19, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 2 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "ping rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Onbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Onbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound PING (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 2 + }, + "id": 15, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "pong rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound PONG (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 287 + }, + "id": 16, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "rate ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound PING (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 287 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "rate pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound PONG (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 295 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound find_nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 295 + }, + "id": 3978646, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "node rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 303 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound find_nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 303 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 311 + }, + "id": 23, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound find_content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 311 + }, + "id": 24, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 319 + }, + "id": 25, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound find_content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 319 + }, + "id": 26, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 327 + }, + "id": 27, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "offer rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound offer (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 327 + }, + "id": 28, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound accept (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 335 + }, + "id": 29, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "offer rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound offer (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 335 + }, + "id": 30, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/history/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound accept (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 343 + }, + "id": 31, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "node", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_nodes", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT \"count\" FROM \"geth.portal/history/sent/content.meter\" WHERE (\"host\" =~ /^$host$/) AND $timeFilter", + "rawQuery": false, + "refId": "H", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "offer", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "F", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "G", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Total Outbound", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 343 + }, + "id": 3978647, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "node", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_nodes", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT \"count\" FROM \"geth.portal/history/sent/content.meter\" WHERE (\"host\" =~ /^$host$/) AND $timeFilter", + "rawQuery": false, + "refId": "H", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "offer", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "F", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "G", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Total Inbound", + "type": "timeseries" + } + ], + "title": "History Messages", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 3978645, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 1466, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "sucess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/inbound/success.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_conn", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/inbound/fail_conn.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_deadline", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/inbound/fail_deadline.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fails_read", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/inbound/fail_read.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "uTP Inbound Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 3978648, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "sucess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/outbound/success.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_conn", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/outbound/fail_conn.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_deadline", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/outbound/fail_deadline.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fails_read", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/utp/outbound/fail_write.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "uTP Outbound Connections", + "type": "timeseries" + } + ], + "title": "History uTP", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 3978649, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 3978650, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "success", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/content/decoded/true.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "unsuccess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/content/decoded/false.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Decodifications count", + "type": "timeseries" + } + ], + "title": "History Decode", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 3978651, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 5 + }, + "id": 3978652, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "radius ratio", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "txpool_pending", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "executable", + "measurement": "geth.portal/history/radius_ratio.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "distinct" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Radius ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 5 + }, + "id": 3978653, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "entries", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/entry_count.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Entries count", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 233 + }, + "id": 3978654, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content storage", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/content_storage.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "total storage", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/history/total_storage.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Storage (Bytes)", + "type": "timeseries" + } + ], + "title": "History Storage", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 3978662, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 3978663, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "ping rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Onbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Onbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound PING (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 3978664, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "pong rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound PONG (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 162 + }, + "id": 3978665, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "rate ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound PING (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 162 + }, + "id": 3978666, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "rate pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound PONG (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 170 + }, + "id": 3978667, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound find_nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 170 + }, + "id": 3978668, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "node rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 178 + }, + "id": 23978669, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound find_nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 178 + }, + "id": 3978670, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 186 + }, + "id": 3978671, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound find_content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 186 + }, + "id": 3978672, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 194 + }, + "id": 3978673, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound find_content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 194 + }, + "id": 3978674, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 202 + }, + "id": 3978675, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "offer rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound offer (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 202 + }, + "id": 3978676, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound accept (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 210 + }, + "id": 3978677, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "offer rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound offer (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 210 + }, + "id": 3978678, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/state/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound accept (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 218 + }, + "id": 3978679, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "node", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_nodes", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT \"count\" FROM \"geth.portal/state/sent/content.meter\" WHERE (\"host\" =~ /^$host$/) AND $timeFilter", + "rawQuery": false, + "refId": "H", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "offer", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "F", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "G", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Total Outbound", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 218 + }, + "id": 3978680, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "node", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_nodes", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT \"count\" FROM \"geth.portal/state/sent/content.meter\" WHERE (\"host\" =~ /^$host$/) AND $timeFilter", + "rawQuery": false, + "refId": "H", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "offer", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "F", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "G", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Total Inbound", + "type": "timeseries" + } + ], + "title": "State Messages", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 3978681, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 3978682, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "sucess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/inbound/success.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_conn", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/inbound/fail_conn.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_deadline", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/inbound/fail_deadline.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fails_read", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/inbound/fail_read.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "uTP Inbound Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 3978683, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "sucess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/outbound/success.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_conn", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/outbound/fail_conn.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_deadline", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/outbound/fail_deadline.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fails_read", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/utp/outbound/fail_write.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "uTP Outbound Connections", + "type": "timeseries" + } + ], + "title": "State uTP", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 3978684, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 3978685, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "success", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/content/decoded/true.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "unsuccess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/content/decoded/false.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Decodifications count", + "type": "timeseries" + } + ], + "title": "State Decode", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 3978686, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 3978687, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "radius ratio", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "txpool_pending", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "executable", + "measurement": "geth.portal/state/radius_ratio.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "distinct" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Radius ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 3978688, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "entries", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/entry_count.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Entries count", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 127 + }, + "id": 3978689, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content storage", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/content_storage.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "total storage", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/total_storage.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Storage (Bytes)", + "type": "timeseries" + } + ], + "title": "State Storage", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 23978675, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 23978676, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "ping rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Onbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Onbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound PING (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 23978677, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "pong rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound PONG (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 56 + }, + "id": 23978678, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "rate ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound PING (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 56 + }, + "id": 23978679, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "rate pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound PONG (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 64 + }, + "id": 23978680, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound find_nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 64 + }, + "id": 23978681, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "node rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 72 + }, + "id": 23978682, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound find_nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 72 + }, + "id": 23978683, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "nodes rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m5" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound nodes (5m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 80 + }, + "id": 23978684, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound find_content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 80 + }, + "id": 23978685, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 88 + }, + "id": 23978686, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "find_content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound find_content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 88 + }, + "id": 23978687, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound content (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 96 + }, + "id": 23978688, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "offer rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound offer (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 96 + }, + "id": 23978689, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Intbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound accept (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 104 + }, + "id": 23978690, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "offer rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Inbound offer (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 104 + }, + "id": 23978691, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept rate", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outtbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "m15" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "mean", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "mean", + "measurement": "geth.portal/beacon/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "mean" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Rate Outbound accept (15m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 112 + }, + "id": 23978692, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "node", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_nodes", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/content.meter", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT \"count\" FROM \"geth.portal/beacon/sent/content.meter\" WHERE (\"host\" =~ /^$host$/) AND $timeFilter", + "rawQuery": false, + "refId": "H", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "offer", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "F", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/sent/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "G", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Total Outbound", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 112 + }, + "id": 23978693, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "accept", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/accept.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "node", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_nodes", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/find_nodes.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "find_content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/find_content.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "content", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/content.meter", + "orderByTime": "ASC", + "policy": "default", + "query": "SELECT \"count\" FROM \"geth.portal/beacon/sent/content.meter\" WHERE (\"host\" =~ /^$host$/) AND $timeFilter", + "rawQuery": false, + "refId": "H", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "offer", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/offer.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "E", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "ping", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/ping.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "F", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "pong", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Outbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/received/pong.meter", + "orderByTime": "ASC", + "policy": "default", + "refId": "G", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "count" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Total Inbound", + "type": "timeseries" + } + ], + "title": "Beacon Messages", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 23978694, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 11 + }, + "id": 23978695, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "sucess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/inbound/success.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_conn", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/inbound/fail_conn.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_deadline", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/inbound/fail_deadline.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fails_read", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/inbound/fail_read.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "uTP Inbound Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 11 + }, + "id": 23978696, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "sucess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/outbound/success.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_conn", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/outbound/fail_conn.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fail_deadline", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/outbound/fail_deadline.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "C", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "fails_read", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/utp/outbound/fail_write.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "D", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "uTP Outbound Connections", + "type": "timeseries" + } + ], + "title": "Beacon uTP", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 11 + }, + "id": 23978697, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 23978698, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "success", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/content/decoded/true.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "unsuccess", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/state/content/decoded/false.count", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Decodifications count", + "type": "timeseries" + } + ], + "title": "Beacon Decode", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 23978699, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 23978700, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "radius ratio", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "txpool_pending", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + } + ], + "intervalFactor": 1, + "legendFormat": "executable", + "measurement": "geth.portal/beacon/radius_ratio.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "distinct" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Radius ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 23978701, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "entries", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/entry_count.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Entries count", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 23978702, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "alias": "content storage", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/content_storage.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + }, + { + "alias": "total storage", + "datasource": { + "type": "influxdb", + "uid": "$datasource" + }, + "expr": "Inbound", + "format": "time_series", + "groupBy": [], + "hide": false, + "intervalFactor": 1, + "legendFormat": "rate", + "measurement": "geth.portal/beacon/total_storage.gauge", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "host", + "operator": "=~", + "value": "/^$host$/" + } + ] + } + ], + "title": "Storage (Bytes)", + "type": "timeseries" + } + ], + "title": "Beacon Storage", + "type": "row" + } + ], + "preload": false, + "refresh": "5s", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "localhost", + "value": "localhost" + }, + "datasource": "$datasource", + "definition": "SHOW TAG VALUES WITH KEY = \"host\"", + "includeAll": false, + "label": "Host", + "name": "host", + "options": [], + "query": "SHOW TAG VALUES WITH KEY = \"host\"", + "refresh": 1, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "current": { + "text": "50", + "value": "50" + }, + "includeAll": false, + "label": "Percentile", + "name": "percentile", + "options": [ + { + "selected": true, + "text": "50", + "value": "50" + }, + { + "selected": false, + "text": "75", + "value": "75" + }, + { + "selected": false, + "text": "95", + "value": "95" + }, + { + "selected": false, + "text": "99", + "value": "99" + }, + { + "selected": false, + "text": "999", + "value": "999" + }, + { + "selected": false, + "text": "9999", + "value": "9999" + } + ], + "query": "50, 75, 95, 99, 999, 9999", + "type": "custom" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Shisui Dashboard", + "uid": "de266ud9aornkb", + "version": 27, + "weekStart": "" +} \ No newline at end of file