From 61032753fb1b98d2eb8f98faf86febb26972b680 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Wed, 18 May 2022 09:29:47 -0600 Subject: [PATCH 01/79] Start on v0.7.3. Updated forks and tools to latest. --- CHANGELOG.md | 8 +++++++- VERSION | 2 +- scripts/forks/cactus_install.sh | 6 ++---- scripts/forks/cryptodoge_install.sh | 6 ++---- scripts/forks/flax_install.sh | 6 ++---- scripts/forks/hddcoin_install.sh | 2 +- scripts/forks/mmx_install.sh | 4 ++-- scripts/forks/nchain_install.sh | 2 ++ scripts/forks/staicoin_install.sh | 2 -- scripts/madmax_setup.sh | 4 ++-- scripts/megacmd_setup.sh | 20 -------------------- scripts/plotman_setup.sh | 2 -- scripts/pull_3rd_party_libs.sh | 10 +++++----- 13 files changed, 26 insertions(+), 48 deletions(-) delete mode 100644 scripts/megacmd_setup.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ceb1a0d..8be0cba7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.7.3] - 2022-06-? + - [Cactus](https://github.com/Cactus-Network/cactus-blockchain) - v1.3.4, matches Chia 1.3.4, please run: `cactus db upgrade` + - [Cryptodoge](https://github.com/CryptoDoge-Network/cryptodoge) - v1.3.4, matches Chia 1.3.4, please run: `cryptodoge db upgrade` + - [Flax](https://github.com/Flax-Network/flax-blockchain) - v0.1.8, matches Chia 1.3.3 + ## [0.7.2] - 2022-05-17 - Drives monitoring page - allow [overrides of smartctl commands](https://github.com/guydavis/machinaris/wiki/Drives#override-command) for special hardware. Drive failure alerts thru our enhanced Chiadog. - Alerts: per-notifier [ignore setting](https://github.com/guydavis/machinaris/wiki/ChiaDog#ignore-alerts) to prevent unwanted alerts, based on criteria. @@ -23,7 +28,8 @@ All notable changes to this project will be documented in this file. The format - [Internationalization](https://github.com/guydavis/machinaris/wiki/Localization) for locale-specific text, numbers, and currencies. Huge thanks to @antcasq (pt_PT) and @fabriziocacicia (it_IT) for providing translations! - Geolocation of peer connections for each blockchain by their IP address. [Optionally enabled](https://github.com/guydavis/machinaris/wiki/Connections) using a free Maxmind account. - [Flax](https://github.com/Flax-Network/flax-blockchain) - updated to v0.1.6, supporting new v2 DB format. - - [Silicoin](https://github.com/silicoin-network/silicoin-blockchain) - supported again as per Discord votes. + - [HDDCoin](https://github.com/HDDcoin-Network/hddcoin-blockchain/releases) - update to version 2.0.2 + - [Silicoin](https://github.com/silicoin-network/silicoin-blockchain) - v1.2.2, supported again as per Discord votes. ## [0.6.9] - 2022-02-04 - [MMX](https://github.com/madMAx43v3r/mmx-node) - support for this new blockchain, which requires its own plot files. diff --git a/VERSION b/VERSION index d5cc44d1..b09a54cb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.2 \ No newline at end of file +0.7.3 \ No newline at end of file diff --git a/scripts/forks/cactus_install.sh b/scripts/forks/cactus_install.sh index a915f3e4..8b933a03 100644 --- a/scripts/forks/cactus_install.sh +++ b/scripts/forks/cactus_install.sh @@ -4,8 +4,8 @@ # CACTUS_BRANCH=$1 -# On 2022-01-22 -HASH=9eef13171dff764bd0549de1479d775272e16bcc +# On 2022-05-18 +HASH=b03949fafd555d641efd3f6522e14b7e1df897fd if [ -z ${CACTUS_BRANCH} ]; then echo 'Skipping Cactus install as not requested.' @@ -15,8 +15,6 @@ else git submodule update --init mozilla-ca git checkout $HASH chmod +x install.sh - # 2022-01-30: pip broke due to https://github.com/pypa/pip/issues/10825 - sed -i 's/upgrade\ pip$/upgrade\ "pip<22.0"/' install.sh /usr/bin/sh ./install.sh if [ ! -d /chia-blockchain/venv ]; then diff --git a/scripts/forks/cryptodoge_install.sh b/scripts/forks/cryptodoge_install.sh index 02d63ed0..ddcd17b3 100644 --- a/scripts/forks/cryptodoge_install.sh +++ b/scripts/forks/cryptodoge_install.sh @@ -4,8 +4,8 @@ # CRYPTODOGE_BRANCH=$1 -# On 2021-11-11 -HASH=54926a63134e7aaa12e223afb0814583b779d17f +# On 2022-05-18 +HASH=4ec389b615b9054afcf43d14f7d18434b6b4d2de if [ -z ${CRYPTODOGE_BRANCH} ]; then echo 'Skipping Cryptodoge install as not requested.' @@ -15,8 +15,6 @@ else git submodule update --init mozilla-ca git checkout $HASH chmod +x install.sh - # 2022-01-30: pip broke due to https://github.com/pypa/pip/issues/10825 - sed -i 's/upgrade\ pip$/upgrade\ "pip<22.0"/' install.sh /usr/bin/sh ./install.sh if [ ! -d /chia-blockchain/venv ]; then diff --git a/scripts/forks/flax_install.sh b/scripts/forks/flax_install.sh index df7b949c..014343cf 100644 --- a/scripts/forks/flax_install.sh +++ b/scripts/forks/flax_install.sh @@ -4,8 +4,8 @@ # FLAX_BRANCH=$1 -# On 2022-03-13 -HASH=e72b47ca1c7086330b0facba6a2e7fc5967000eb +# On 2022-05-18 +HASH=5a314ca5f7f12adb16db8a9a13366f0df14ad17d if [ -z ${FLAX_BRANCH} ]; then echo 'Skipping Flax install as not requested.' @@ -16,8 +16,6 @@ else git checkout $HASH git submodule update --init mozilla-ca chmod +x install.sh - # 2022-01-30: pip broke due to https://github.com/pypa/pip/issues/10825 - sed -i 's/upgrade\ pip$/upgrade\ "pip<22.0"/' install.sh /usr/bin/sh ./install.sh if [ ! -d /chia-blockchain/venv ]; then diff --git a/scripts/forks/hddcoin_install.sh b/scripts/forks/hddcoin_install.sh index 97f1fbdc..d0b126c4 100644 --- a/scripts/forks/hddcoin_install.sh +++ b/scripts/forks/hddcoin_install.sh @@ -1,6 +1,6 @@ #!/bin/env bash # -# Installs HDDCoin as per git clone https://github.com/HDDcoin-Network/hddcoin-blockchain +https://github.com/HDDcoin-Network/hddcoin-blockchain # HDDCOIN_BRANCH=$1 diff --git a/scripts/forks/mmx_install.sh b/scripts/forks/mmx_install.sh index 11ad1229..b08d27de 100644 --- a/scripts/forks/mmx_install.sh +++ b/scripts/forks/mmx_install.sh @@ -4,8 +4,8 @@ # MMX_BRANCH=$1 -# On 2022-04-22 -HASH=ae0d15a2ef11498f529ae9c34b1cade8e3919e61 +# On 2022-05-18 +HASH=4ce5daa60a2e83471f1ea1731dd2091138f3890b if [ -z ${MMX_BRANCH} ]; then echo 'Skipping MMX install as not requested.' diff --git a/scripts/forks/nchain_install.sh b/scripts/forks/nchain_install.sh index 67f1149f..05da4a67 100644 --- a/scripts/forks/nchain_install.sh +++ b/scripts/forks/nchain_install.sh @@ -1,6 +1,8 @@ #!/bin/env bash # # Installs NChain as per https://gitee.com/ext9/ext9-blockchain +# NOTE: As of 2022-05-18, the Gitee repository went "member-only" whatever that means. +# So still using an old hash from 2021. Seems like this blockchain fork is dead. # NCHAIN_BRANCH=$1 diff --git a/scripts/forks/staicoin_install.sh b/scripts/forks/staicoin_install.sh index 631b2890..3c85d936 100644 --- a/scripts/forks/staicoin_install.sh +++ b/scripts/forks/staicoin_install.sh @@ -15,8 +15,6 @@ else cd /staicoin-blockchain git submodule update --init mozilla-ca chmod +x install.sh - # 2022-01-30: pip broke due to https://github.com/pypa/pip/issues/10825 - sed -i 's/upgrade\ pip$/upgrade\ "pip<22.0"/' install.sh /usr/bin/sh ./install.sh if [ ! -d /chia-blockchain/venv ]; then diff --git a/scripts/madmax_setup.sh b/scripts/madmax_setup.sh index d9e476f9..43ea5ea0 100644 --- a/scripts/madmax_setup.sh +++ b/scripts/madmax_setup.sh @@ -4,8 +4,8 @@ # See https://github.com/madMAx43v3r/chia-plotter # -# As of 2022-03-20 -HASH=ecec17d25cd547fa4bb64b2eb7455b831c8a2882 +# As of 2022-05-18 +HASH=514c51610e70991bfb8160782b12a08bd62259a1 MADMAX_BRANCH=master if [[ (${mode} == 'fullnode' || ${mode} =~ "plotter") && (${blockchains} == 'chia' || ${blockchains} == 'chives' || ${blockchains} == 'mmx') ]]; then diff --git a/scripts/megacmd_setup.sh b/scripts/megacmd_setup.sh deleted file mode 100644 index 347f450a..00000000 --- a/scripts/megacmd_setup.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/env bash -# -# Installs megacmd for scripted downloads of pre-synced blockchains, when requested -# -# https://github.com/meganz/MEGAcmd -# https://chiaforksblockchain.com/ -# - -if [[ ${mode} == 'fullnode' ]] && [[ "${blockchain_db_download}" == 'true' ]] && [[ ! -f /usr/bin/mega-cmd ]]; then - arch_name="$(uname -m)" - echo "Installing megacmd on ${arch_name}..." - if [[ "${arch_name}" = "x86_64" ]]; then - echo 'deb https://mega.nz/linux/MEGAsync/xUbuntu_21.04/ ./' > /etc/apt/sources.list.d/mega-nz.list - curl -fsSL https://mega.nz/keys/MEGA_signing.key | apt-key add - - apt-get update - apt-get install -y megacmd - else - echo "Installing megacmd skipped -> unsupported architecture: ${arch_name}" - fi -fi diff --git a/scripts/plotman_setup.sh b/scripts/plotman_setup.sh index e398e1f3..83b6219f 100644 --- a/scripts/plotman_setup.sh +++ b/scripts/plotman_setup.sh @@ -11,8 +11,6 @@ if [[ (${mode} == 'fullnode' || ${mode} =~ "plotter") && (${blockchains} == 'chi cd / git clone --branch ${PLOTMAN_BRANCH} https://github.com/guydavis/plotman.git cd plotman - # Chia 1.3 requires packaging==21.0 - sed -i 's/20.9/21.0/g' setup.cfg /chia-blockchain/venv/bin/python setup.py install apt update && apt install -y rsync fi diff --git a/scripts/pull_3rd_party_libs.sh b/scripts/pull_3rd_party_libs.sh index 191c9b96..e71fe956 100755 --- a/scripts/pull_3rd_party_libs.sh +++ b/scripts/pull_3rd_party_libs.sh @@ -4,15 +4,15 @@ # # Bootstrap Icons -BSI_VERSION=1.8.1 -BOOTSTRAP_VERSION=5.1.3 +BSI_VERSION=1.8.2 +BOOTSTRAP_VERSION=5.2.0-beta1 BASEPATH=${JS_LIBS_BASEPATH:-/machinaris/web/static/3rd_party} # List of other css/js links LIST=" -https://cdn.datatables.net/1.11.5/css/dataTables.bootstrap5.css -https://cdn.datatables.net/1.11.5/js/dataTables.bootstrap5.js -https://cdn.datatables.net/1.11.5/js/jquery.dataTables.js +https://cdn.datatables.net/1.12.0/css/dataTables.bootstrap5.css +https://cdn.datatables.net/1.12.0/js/dataTables.bootstrap5.js +https://cdn.datatables.net/1.12.0/js/jquery.dataTables.js https://cdn.jsdelivr.net/npm/chart.js@3.7.1/dist/chart.min.js https://cdn.jsdelivr.net/npm/chartjs-adapter-luxon@1.1.0/dist/chartjs-adapter-luxon.min.js https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js From 69d05117713e2c5967f39113d4f3d8751f3c0081 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Wed, 18 May 2022 16:49:24 -0600 Subject: [PATCH 02/79] Ignore all CAT type wallet balances, not just the "Holiday 2021" one. --- api/commands/smartctl.py | 2 +- web/models/chia.py | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/api/commands/smartctl.py b/api/commands/smartctl.py index 4b3ec89e..15150963 100644 --- a/api/commands/smartctl.py +++ b/api/commands/smartctl.py @@ -52,7 +52,7 @@ def load_drive_info(device, overrides): cmd = "smartctl -a -d {0} {1}".format(overrides[device]['device_type'], device) else: # No override, use the default auto mode cmd = "smartctl -a {0}".format(device) - app.logger.info(cmd) + #app.logger.info(cmd) proc = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) try: outs, errs = proc.communicate(timeout=90) diff --git a/web/models/chia.py b/web/models/chia.py index fdfdcfe9..04535dec 100644 --- a/web/models/chia.py +++ b/web/models/chia.py @@ -363,15 +363,18 @@ def __init__(self, wallets, cold_wallet_addresses={}): 'updated_at': wallet.updated_at }) def exclude_cat_wallets(self, wallet_details): - skip = 0 details = [] - for line in wallet_details.split('\n'): - if "Token:" in line: # Example: "Chia Holiday 2021 Token:" - skip = 3 # Skip next 3 lines for these useless CAT wallets - elif skip > 0: - skip = skip -1 + chunks = wallet_details.split('\n\n') + for chunk in chunks: + is_cat_wallet = False + lines = chunk.split('\n') + for line in lines: + if re.match('^\s+-Type:\s+CAT$', line): + is_cat_wallet = True + if is_cat_wallet: + app.logger.info("Ignoring balance of CAT type wallet named: {0}".format(lines[0][:-1])) else: - details.append(line) + details.extend(chunk.split('\n')) return '\n'.join(details) def sum_chia_wallet_balance(self, hostname, blockchain, include_cold_balance=True): From 8f01d2c9d2e3687a8f7384f9f0eef6d3ac0536f8 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Fri, 20 May 2022 11:45:38 -0600 Subject: [PATCH 03/79] Revert back to Bootstrap 5.1.3 until 5.2.0 issues are fixed. --- scripts/pull_3rd_party_libs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/pull_3rd_party_libs.sh b/scripts/pull_3rd_party_libs.sh index e71fe956..003060fc 100755 --- a/scripts/pull_3rd_party_libs.sh +++ b/scripts/pull_3rd_party_libs.sh @@ -5,7 +5,7 @@ # Bootstrap Icons BSI_VERSION=1.8.2 -BOOTSTRAP_VERSION=5.2.0-beta1 +BOOTSTRAP_VERSION=5.1.3 BASEPATH=${JS_LIBS_BASEPATH:-/machinaris/web/static/3rd_party} # List of other css/js links From 6858886e26cf89e294f391a40f4d84d5cec236ae Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Fri, 20 May 2022 13:51:06 -0600 Subject: [PATCH 04/79] Use a dev branch of Chiadog to isolate issues during testing. --- .github/workflows/develop-btcgreen.yaml | 3 ++- .github/workflows/develop-cactus.yaml | 1 + .github/workflows/develop-chia.yaml | 1 + .github/workflows/develop-chives.yaml | 1 + .github/workflows/develop-cryptodoge.yaml | 1 + .github/workflows/develop-flax.yaml | 1 + .github/workflows/develop-flora.yaml | 1 + .github/workflows/develop-hddcoin.yaml | 1 + .github/workflows/develop-maize.yaml | 1 + .github/workflows/develop-nchain.yaml | 1 + .github/workflows/develop-shibgreen.yaml | 1 + .github/workflows/develop-silicoin.yaml | 1 + .github/workflows/develop-staicoin.yaml | 1 + .github/workflows/develop-stor.yaml | 1 + docker/dockerfile | 3 +++ docker/entrypoint.sh | 2 +- scripts/chiadog_setup.sh | 4 ++-- 17 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/develop-btcgreen.yaml b/.github/workflows/develop-btcgreen.yaml index ce2be203..52433cab 100644 --- a/.github/workflows/develop-btcgreen.yaml +++ b/.github/workflows/develop-btcgreen.yaml @@ -41,7 +41,8 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" - "BTCGREEN_BRANCH=main" + "CHIADOG_BRANCH=dev" + "BTCGREEN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-btcgreen:develop ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris-btcgreen:develop diff --git a/.github/workflows/develop-cactus.yaml b/.github/workflows/develop-cactus.yaml index 81b56be5..0cef0c8f 100644 --- a/.github/workflows/develop-cactus.yaml +++ b/.github/workflows/develop-cactus.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "CACTUS_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-cactus:develop diff --git a/.github/workflows/develop-chia.yaml b/.github/workflows/develop-chia.yaml index fa0d6a4d..ab64cc88 100644 --- a/.github/workflows/develop-chia.yaml +++ b/.github/workflows/develop-chia.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "CHIA_BRANCH=latest" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris:develop diff --git a/.github/workflows/develop-chives.yaml b/.github/workflows/develop-chives.yaml index 931b5a1b..c77454da 100644 --- a/.github/workflows/develop-chives.yaml +++ b/.github/workflows/develop-chives.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "CHIVES_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-chives:develop diff --git a/.github/workflows/develop-cryptodoge.yaml b/.github/workflows/develop-cryptodoge.yaml index b23492dd..24704159 100644 --- a/.github/workflows/develop-cryptodoge.yaml +++ b/.github/workflows/develop-cryptodoge.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "CRYPTODOGE_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-cryptodoge:develop diff --git a/.github/workflows/develop-flax.yaml b/.github/workflows/develop-flax.yaml index 43ce3716..ecdbb9c7 100644 --- a/.github/workflows/develop-flax.yaml +++ b/.github/workflows/develop-flax.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "FLAX_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-flax:develop diff --git a/.github/workflows/develop-flora.yaml b/.github/workflows/develop-flora.yaml index a67d48a6..893b753e 100644 --- a/.github/workflows/develop-flora.yaml +++ b/.github/workflows/develop-flora.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "FLORA_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-flora:develop diff --git a/.github/workflows/develop-hddcoin.yaml b/.github/workflows/develop-hddcoin.yaml index 16515c34..d49a454b 100644 --- a/.github/workflows/develop-hddcoin.yaml +++ b/.github/workflows/develop-hddcoin.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "HDDCOIN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-hddcoin:develop diff --git a/.github/workflows/develop-maize.yaml b/.github/workflows/develop-maize.yaml index 561018c9..3bb3924b 100644 --- a/.github/workflows/develop-maize.yaml +++ b/.github/workflows/develop-maize.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "MAIZE_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-maize:develop diff --git a/.github/workflows/develop-nchain.yaml b/.github/workflows/develop-nchain.yaml index fe069e54..68f579da 100644 --- a/.github/workflows/develop-nchain.yaml +++ b/.github/workflows/develop-nchain.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "NCHAIN_BRANCH=net9.dev" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-nchain:develop diff --git a/.github/workflows/develop-shibgreen.yaml b/.github/workflows/develop-shibgreen.yaml index 33fdd95a..2d763c1f 100644 --- a/.github/workflows/develop-shibgreen.yaml +++ b/.github/workflows/develop-shibgreen.yaml @@ -40,6 +40,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "SHIBGREEN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-shibgreen:develop diff --git a/.github/workflows/develop-silicoin.yaml b/.github/workflows/develop-silicoin.yaml index 510ac277..3f7d02d6 100644 --- a/.github/workflows/develop-silicoin.yaml +++ b/.github/workflows/develop-silicoin.yaml @@ -40,6 +40,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "SILICOIN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-silicoin:develop diff --git a/.github/workflows/develop-staicoin.yaml b/.github/workflows/develop-staicoin.yaml index 6b126a41..e8f7df26 100644 --- a/.github/workflows/develop-staicoin.yaml +++ b/.github/workflows/develop-staicoin.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "STAICOIN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-staicoin:develop diff --git a/.github/workflows/develop-stor.yaml b/.github/workflows/develop-stor.yaml index 3d40dc2b..48286ea4 100644 --- a/.github/workflows/develop-stor.yaml +++ b/.github/workflows/develop-stor.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=develop" + "CHIADOG_BRANCH=dev" "STOR_BRANCH=master" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-stor:develop diff --git a/docker/dockerfile b/docker/dockerfile index 84dc6866..81e21961 100644 --- a/docker/dockerfile +++ b/docker/dockerfile @@ -3,6 +3,8 @@ ARG MACHINARIS_STREAM FROM ghcr.io/guydavis/machinaris-base:${MACHINARIS_STREAM} ARG DEBIAN_FRONTEND=noninteractive +ARG CHIADOG_BRANCH=main + ARG BTCGREEN_BRANCH ARG CACTUS_BRANCH ARG CHIA_BRANCH @@ -92,6 +94,7 @@ ENV LANGUAGE en_US.UTF-8 ENV FLASK_ENV=production ENV XDG_CONFIG_HOME=/root/.chia ENV AUTO_PLOT=false +ENV CHIADOG_BRANCH=${CHIADOG_BRANCH} VOLUME [ "/id_rsa" ] diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 9c884a88..9475f8ed 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -63,7 +63,7 @@ if /usr/bin/bash /machinaris/scripts/forks/${blockchains}_launch.sh; then /usr/bin/bash /machinaris/scripts/plotman_setup.sh > /tmp/plotman_setup.log 2>&1 # Conditionally install chiadog on harvesters and fullnodes - /usr/bin/bash /machinaris/scripts/chiadog_setup.sh > /tmp/chiadog_setup.log 2>&1 + /usr/bin/bash /machinaris/scripts/chiadog_setup.sh ${CHIADOG_BRANCH} > /tmp/chiadog_setup.log 2>&1 # During concurrent startup of multiple fork containers, stagger less important setups sleep $[ ( $RANDOM % 180 ) + 1 ]s diff --git a/scripts/chiadog_setup.sh b/scripts/chiadog_setup.sh index 4dde9326..d1aa3cfb 100644 --- a/scripts/chiadog_setup.sh +++ b/scripts/chiadog_setup.sh @@ -4,11 +4,11 @@ # using an enhanced and supported fork of the original project. # -CHIADOG_BRANCH=main +CHIADOG_BRANCH=$1 if [[ (${mode} == 'fullnode' || ${mode} =~ "harvester") && ${blockchains} != 'mmx' ]]; then if [[ ! -f /chiadog/main.py ]]; then - echo 'Installing Chiadog...' + echo 'Installing Chiadog from https://github.com/guydavis/chiadog using branch: ${CHIADOG_BRANCH}' cd / git clone --branch ${CHIADOG_BRANCH} https://github.com/guydavis/chiadog.git cd /chia-blockchain/ From 7308b2f049b4d42965f915b968bc3439a2d3bbb6 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 22 May 2022 16:01:47 -0600 Subject: [PATCH 05/79] Chives 1.3.0 pre-release testing. --- CHANGELOG.md | 1 + scripts/forks/chives_install.sh | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8be0cba7..d7cf3ab8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. The format ## [0.7.3] - 2022-06-? - [Cactus](https://github.com/Cactus-Network/cactus-blockchain) - v1.3.4, matches Chia 1.3.4, please run: `cactus db upgrade` + - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.0 (pre-release) - [Cryptodoge](https://github.com/CryptoDoge-Network/cryptodoge) - v1.3.4, matches Chia 1.3.4, please run: `cryptodoge db upgrade` - [Flax](https://github.com/Flax-Network/flax-blockchain) - v0.1.8, matches Chia 1.3.3 diff --git a/scripts/forks/chives_install.sh b/scripts/forks/chives_install.sh index f81cd0af..c9e7ad3d 100644 --- a/scripts/forks/chives_install.sh +++ b/scripts/forks/chives_install.sh @@ -4,8 +4,8 @@ # CHIVES_BRANCH=$1 -# On 2021-12-25 -HASH=ca078c8a2270e237437b0bab8e94d18d9f719951 +# On 2022-05-22 +HASH=c1111a79d7a1eb02a0bd2111307e266583bc67d1 if [ -z ${CHIVES_BRANCH} ]; then echo 'Skipping Chives install as not requested.' From 6a6751af72890b867191a91cd8ae5994f296f77a Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 22 May 2022 16:42:03 -0600 Subject: [PATCH 06/79] Revert as Chives 1.3.5 pre-release is not building. --- scripts/forks/chives_install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/forks/chives_install.sh b/scripts/forks/chives_install.sh index c9e7ad3d..f81cd0af 100644 --- a/scripts/forks/chives_install.sh +++ b/scripts/forks/chives_install.sh @@ -4,8 +4,8 @@ # CHIVES_BRANCH=$1 -# On 2022-05-22 -HASH=c1111a79d7a1eb02a0bd2111307e266583bc67d1 +# On 2021-12-25 +HASH=ca078c8a2270e237437b0bab8e94d18d9f719951 if [ -z ${CHIVES_BRANCH} ]; then echo 'Skipping Chives install as not requested.' From 57da469da0a78fa7b67dd7ff128a36655ee291ae Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Mon, 23 May 2022 09:33:52 -0600 Subject: [PATCH 07/79] More testing of Chives 1.3.5 in develop branch. --- CHANGELOG.md | 2 +- scripts/forks/chives_install.sh | 10 ++++------ scripts/forks/mmx_install.sh | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7cf3ab8..cc3a207d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format ## [0.7.3] - 2022-06-? - [Cactus](https://github.com/Cactus-Network/cactus-blockchain) - v1.3.4, matches Chia 1.3.4, please run: `cactus db upgrade` - - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.0 (pre-release) + - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.5 (pre-release) - currently broken due to [git clone error](https://github.com/HiveProject2021/chives-blockchain/issues/77). - [Cryptodoge](https://github.com/CryptoDoge-Network/cryptodoge) - v1.3.4, matches Chia 1.3.4, please run: `cryptodoge db upgrade` - [Flax](https://github.com/Flax-Network/flax-blockchain) - v0.1.8, matches Chia 1.3.3 diff --git a/scripts/forks/chives_install.sh b/scripts/forks/chives_install.sh index f81cd0af..9f3e9f74 100644 --- a/scripts/forks/chives_install.sh +++ b/scripts/forks/chives_install.sh @@ -4,19 +4,17 @@ # CHIVES_BRANCH=$1 -# On 2021-12-25 -HASH=ca078c8a2270e237437b0bab8e94d18d9f719951 +# On 2022-05-22 +HASH=c1111a79d7a1eb02a0bd2111307e266583bc67d1 if [ -z ${CHIVES_BRANCH} ]; then echo 'Skipping Chives install as not requested.' else git clone --branch ${CHIVES_BRANCH} --recurse-submodules https://github.com/HiveProject2021/chives-blockchain.git /chives-blockchain - cd /chives-blockchain - git submodule update --init mozilla-ca + /chives-blockchain/venv/bin/python -m pip install --upgrade pip + cd /chives-blockchain git checkout $HASH chmod +x install.sh - # 2022-01-30: pip broke due to https://github.com/pypa/pip/issues/10825 - sed -i 's/upgrade\ pip$/upgrade\ "pip<22.0"/' install.sh /usr/bin/sh ./install.sh if [ ! -d /chia-blockchain/venv ]; then diff --git a/scripts/forks/mmx_install.sh b/scripts/forks/mmx_install.sh index b08d27de..2bbae4a7 100644 --- a/scripts/forks/mmx_install.sh +++ b/scripts/forks/mmx_install.sh @@ -21,6 +21,6 @@ else git clone --branch ${MMX_BRANCH} --single-branch https://github.com/madMAx43v3r/mmx-node.git /mmx-node cd /mmx-node git submodule update --init --recursive - #git checkout $HASH - ./make_devel.sh + git checkout $HASH + ./make_release.sh fi From 09478cd8c1cc280dc929af2e42477d0dbaf2e6e5 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sat, 28 May 2022 20:10:41 -0600 Subject: [PATCH 08/79] Tracking of farmed blocks per blockchain. --- api/commands/log_parser.py | 27 +- api/default_settings.py | 1 + api/gunicorn.conf.py | 5 +- api/migrations/versions/8acdc24f8d3d_.py | 363 ++++++++++++++++++++++ api/models/log.py | 42 +++ api/schedules/stats_blocks.py | 70 +++++ api/views/__init__.py | 3 +- api/views/stats/farmedblocks/__init__.py | 1 + api/views/stats/farmedblocks/resources.py | 46 +++ api/views/stats/farmedblocks/schemas.py | 27 ++ common/models/__init__.py | 2 +- common/models/stats.py | 28 +- web/default_settings.py | 1 + web/templates/worker_launch.html | 10 +- 14 files changed, 610 insertions(+), 16 deletions(-) create mode 100644 api/migrations/versions/8acdc24f8d3d_.py create mode 100644 api/schedules/stats_blocks.py create mode 100644 api/views/stats/farmedblocks/__init__.py create mode 100644 api/views/stats/farmedblocks/resources.py create mode 100644 api/views/stats/farmedblocks/schemas.py diff --git a/api/commands/log_parser.py b/api/commands/log_parser.py index eda8d06f..1550abd9 100644 --- a/api/commands/log_parser.py +++ b/api/commands/log_parser.py @@ -2,7 +2,6 @@ # Methods around reading and parsing service logs # - import datetime import itertools import os @@ -84,6 +83,32 @@ def recent_partials(blockchain): # app.logger.debug(partials) return partials +def recent_farmed_blocks(blockchain): + log_file = get_farming_log_file(blockchain) + if not os.path.exists(log_file): + app.logger.debug( + "Skipping farmed blocks parsing as no such log file: {0}".format(log_file)) + return [] + rotated_log_file = '' + if os.path.exists(log_file + '.1'): + rotated_log_file = log_file + '.1' + proc = Popen("grep -B 5 'Farmed unfinished_block' {0} {1}".format(rotated_log_file, log_file), + stdout=PIPE, stderr=PIPE, shell=True) + try: + outs, errs = proc.communicate(timeout=90) + except TimeoutExpired: + proc.kill() + proc.communicate() + abort(500, description="The timeout is expired!") + if errs: + app.logger.error(errs.decode('utf-8')) + abort(500, description=errs.decode('utf-8')) + cli_stdout = outs.decode('utf-8') + app.logger.debug("Blocks grep: {0}".format(cli_stdout)) + blocks = log.Blocks(cli_stdout.splitlines()) + app.logger.debug(blocks) + return blocks + def find_plotting_job_log(plot_id): dir_path = '/root/.chia/plotman/logs' directory = os.fsencode(dir_path) diff --git a/api/default_settings.py b/api/default_settings.py index a9b4e6d2..43785eb5 100644 --- a/api/default_settings.py +++ b/api/default_settings.py @@ -39,6 +39,7 @@ class DefaultConfig: 'stat_plotting_total_used': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_total_used.db', 'stat_plotting_disk_used': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_used.db', 'stat_plotting_disk_free': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_free.db', + 'stat_farmed_blocks': 'sqlite:////root/.chia/machinaris/dbs/stat_farmed_blocks.db', } SQLALCHEMY_ECHO = True if 'FLASK_ENV' in os.environ and os.environ['FLASK_ENV'] == "development" else False ETAG_DISABLED = True # https://flask-smorest.readthedocs.io/en/latest/etag.html diff --git a/api/gunicorn.conf.py b/api/gunicorn.conf.py index 874ca233..813a034b 100644 --- a/api/gunicorn.conf.py +++ b/api/gunicorn.conf.py @@ -10,7 +10,7 @@ def on_starting(server): from api.schedules import status_worker, status_farm, status_plotting, \ status_plots, status_challenges, status_wallets, status_blockchains, \ status_connections, status_keys, status_alerts, status_controller, \ - status_plotnfts, status_pools, status_partials, status_drives + status_plotnfts, status_pools, status_partials, status_drives, stats_blocks from api.schedules import stats_disk, stats_farm, nft_recover, plots_check, \ log_rotate, db_backup, restart_stuck_farmer, geolocate_peers from common.config import globals @@ -66,6 +66,7 @@ def on_starting(server): #scheduler.add_job(func=db_backup.execute, name="db_backup", trigger='cron', hour=0, jitter=(JOB_JITTER*3600)) # Daily scheduler.add_job(func=restart_stuck_farmer.execute, name="restart_farmer_if_stuck", trigger='interval', minutes=5, jitter=0) scheduler.add_job(func=status_partials.update, name="partials", trigger='interval', seconds=JOB_FREQUENCY, jitter=JOB_JITTER) + scheduler.add_job(func=stats_blocks.collect, name="blocks", trigger='interval', seconds=JOB_FREQUENCY, jitter=JOB_JITTER) # Status for single Machinaris controller only, should be blockchain=chia if utils.is_controller(): @@ -76,7 +77,7 @@ def on_starting(server): scheduler.add_job(func=geolocate_peers.execute, name="geolocate_peers", trigger='interval', seconds=JOB_FREQUENCY, jitter=JOB_JITTER) # Testing only - #scheduler.add_job(func=status_drives.update, name="status_drives", trigger='interval', seconds=10) # Test immediately + #scheduler.add_job(func=stats_blocks.collect, name="stats_blocks", trigger='interval', seconds=10) # Test immediately app.logger.debug("Starting background scheduler...") scheduler.start() diff --git a/api/migrations/versions/8acdc24f8d3d_.py b/api/migrations/versions/8acdc24f8d3d_.py new file mode 100644 index 00000000..0305f7ed --- /dev/null +++ b/api/migrations/versions/8acdc24f8d3d_.py @@ -0,0 +1,363 @@ +"""empty message + +Revision ID: 8acdc24f8d3d +Revises: 00382c81d58e +Create Date: 2022-05-28 20:00:31.200678 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '8acdc24f8d3d' +down_revision = '00382c81d58e' +branch_labels = None +depends_on = None + + +def upgrade(engine_name): + globals()["upgrade_%s" % engine_name]() + + +def downgrade(engine_name): + globals()["downgrade_%s" % engine_name]() + + + + + +def upgrade_(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_alerts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_alerts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_blockchains(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_blockchains(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_challenges(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_challenges(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_connections(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_connections(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_drives(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_drives(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_farms(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_farms(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_keys(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_keys(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_partials(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_partials(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_plotnfts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_plotnfts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_plottings(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_plottings(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_plots(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_plots(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_pools(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_pools(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_wallets(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_wallets(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_workers(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_workers(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plot_count(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plot_count(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_total_coins(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_total_coins(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_netspace_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_netspace_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_time_to_win(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_time_to_win(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plotting_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plotting_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plotting_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plotting_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plotting_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plotting_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_farmed_blocks(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('stat_farmed_blocks', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('hostname', sa.String(), nullable=True), + sa.Column('blockchain', sa.String(length=64), nullable=True), + sa.Column('challenge_id', sa.String(), nullable=True), + sa.Column('plot_files', sa.String(), nullable=True), + sa.Column('proofs_found', sa.Integer(), nullable=True), + sa.Column('time_taken', sa.String(length=32), nullable=True), + sa.Column('farmed_block', sa.String(), nullable=True), + sa.Column('created_at', sa.String(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade_stat_farmed_blocks(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('stat_farmed_blocks') + # ### end Alembic commands ### + diff --git a/api/models/log.py b/api/models/log.py index 7f4e53a1..03e36ae9 100644 --- a/api/models/log.py +++ b/api/models/log.py @@ -68,3 +68,45 @@ def __init__(self, cli_stdout): app.logger.info("Failed to parse partial line: {0}".format(line)) app.logger.info(traceback.format_exc()) self.rows.reverse() + +class Blocks: + + # Parse the provided most recent lines for farmed blocks. Grep grabs 4 lines per unfinished block farmed. + def __init__(self, cli_stdout): + self.columns = [ 'challenge_id', 'plot_files', 'proofs_found', 'time_taken', 'farmed_block', 'created_at'] + self.rows = [] + plot_files = [] + plots_past_filter = proofs_found = time_taken = farmed_block = None + for line in cli_stdout: + try: + #app.logger.info(line) + if "proofs in" in line: + plot_files.append(re.search('proofs in (.*) in (\d+\.?\d*) s$', line, re.IGNORECASE).group(1)) + elif "eligible for farming" in line: + challenge_id = re.search('eligible for farming (\w+)', line, re.IGNORECASE).group(1) + '...', + plots_past_filter = str(re.search('INFO\s*(\d+) plots were eligible', line, re.IGNORECASE).group(1)) + \ + '/' + str(re.search('Total (\d+) plots', line, re.IGNORECASE).group(1)) + proofs_found = int(re.search('Found (\d+) proofs', line, re.IGNORECASE).group(1)) + time_taken = str(re.search('Time: (\d+\.?\d*) s.', line, re.IGNORECASE).group(1)) + ' secs' + created_at = line.split()[0].replace('T', ' ') + elif "Farmed unfinished_block" in line: + app.logger.info(line) + farmed_block = re.search('Farmed unfinished_block (\w)+', line, re.IGNORECASE).group(1) + elif "--" == line: + if challenge_id and plots_past_filter and proofs_found and time_taken and farmed_block: + self.rows.append({ + 'challenge_id': challenge_id, + 'plot_files': plot_files, + 'plots_past_filter': plots_past_filter, + 'proofs_found': proofs_found, + 'time_taken': time_taken, + 'farmed_block': farmed_block, + 'created_at': created_at + }) + plots_past_filter = proofs_found = time_taken = farmed_block = None + else: + app.logger.info("Missing farmed blocks data...") + except: + app.logger.info("Failed to parse blocks line: {0}".format(line)) + app.logger.info(traceback.format_exc()) + self.rows.reverse() diff --git a/api/schedules/stats_blocks.py b/api/schedules/stats_blocks.py new file mode 100644 index 00000000..d4e19c8d --- /dev/null +++ b/api/schedules/stats_blocks.py @@ -0,0 +1,70 @@ +# +# Checks for all recent farmed blocks +# + +import datetime +import sqlite3 +import traceback + +from flask import g + +from common.config import globals +from common.models import stats +from common.utils import converters +from api import app, utils, db +from api.commands import log_parser + +TABLES = [ stats.StatFarmedBlocks ] + +def collect(): + with app.app_context(): + gc = globals.load() + if not gc['farming_enabled']: + app.logger.info( + "Skipping block win stats collection as not farming on this Machinaris instance.") + return + #app.logger.info("Collecting stats about won blocks.") + current_datetime = datetime.datetime.now().strftime("%Y%m%d%H%M") + for blockchain in globals.enabled_blockchains(): + if not blockchain == 'mmx': + blocks = log_parser.recent_farmed_blocks(blockchain) + store_locally(blockchain, blocks, current_datetime) + if not gc['is_controller']: + send_to_controller(blockchain, blocks, current_datetime) + +def store_locally(blockchain, blocks, current_datetime): + hostname = utils.get_hostname() + for block in blocks.rows: + try: + db.session.add(stats.StatFarmedBlocks(hostname=hostname, + blockchain=blockchain, + challenge_id=block['challenge_id'], + plot_files=block['plot_files'], + proofs_found=block['plot_files'], + time_taken=block['time_taken'], + farmed_block=block['farmed_block'], + created_at=current_datetime)) + except: + app.logger.info(traceback.format_exc()) + db.session.commit() + +def send_to_controller(blockchain, blocks, current_datetime): + try: + payload = [] + for block in blocks.rows: + payload.append( + { + "hostname": utils.get_hostname(), + "blockchain": blockchain, + "challenge_id": block['challenge_id'], + "plot_files": block['plot_files'], + "proofs_found": block['proofs_found'], + "time_taken": block['time_taken'], + "farmed_block": block['farmed_block'], + "created_at": current_datetime, + } + ) + utils.send_post('/stats/farmedblocks', payload, debug=True) + except: + app.logger.info("Failed to send latest stat to {0}.".format('/stats/farmedblocks')) + app.logger.info(traceback.format_exc()) diff --git a/api/views/__init__.py b/api/views/__init__.py index 93e1b2fb..e2d93151 100644 --- a/api/views/__init__.py +++ b/api/views/__init__.py @@ -22,7 +22,8 @@ from . import metrics from .stats import plottingdiskused,plottingdiskfree,plotsdiskused, \ - plotsdiskfree,plotcount,plotssize,totalcoins,netspacesize,timetowin + plotsdiskfree,plotcount,plotssize,totalcoins,netspacesize,timetowin, \ + farmedblocks MODULES = ( actions, diff --git a/api/views/stats/farmedblocks/__init__.py b/api/views/stats/farmedblocks/__init__.py new file mode 100644 index 00000000..172d2b79 --- /dev/null +++ b/api/views/stats/farmedblocks/__init__.py @@ -0,0 +1 @@ +from .resources import blp # noqa \ No newline at end of file diff --git a/api/views/stats/farmedblocks/resources.py b/api/views/stats/farmedblocks/resources.py new file mode 100644 index 00000000..34e58f72 --- /dev/null +++ b/api/views/stats/farmedblocks/resources.py @@ -0,0 +1,46 @@ +import datetime as dt + +from flask.views import MethodView + +from api import app +from api.extensions.api import Blueprint, SQLCursorPage +from common.extensions.database import db +from common.models import StatFarmedBlocks + +from .schemas import StatFarmedBlocksSchema, StatFarmedBlocksQueryArgsSchema, BatchOfStatFarmedBlocksSchema, BatchOfStatFarmedBlocksQueryArgsSchema + + +blp = Blueprint( + 'StatFarmedBlocks', + __name__, + url_prefix='/stats/farmedblocks', + description="Operations on stat farmedblocks recorded on each worker." +) + + +@blp.route('/') +class StatFarmedBlockss(MethodView): + + @blp.etag + @blp.arguments(BatchOfStatFarmedBlocksQueryArgsSchema, location='query') + @blp.response(200, StatFarmedBlocksSchema(many=True)) + @blp.paginate(SQLCursorPage) + def get(self, args): + ret = db.session.query(StatFarmedBlocks).filter_by(**args) + return ret + + @blp.etag + @blp.arguments(BatchOfStatFarmedBlocksSchema) + @blp.response(201, StatFarmedBlocksSchema(many=True)) + def post(self, new_items): + if len(new_items) == 0: + return "No farmed blocks provided.", 400 + items = [] + for new_item in new_items: + # Skip any previously sent by existing challenge_id from that host + if not db.session.query(StatFarmedBlocks).filter(StatFarmedBlocks.hostname==new_item['hostname'], StatFarmedBlocks.challenge_id==new_item['challenge_id']).first(): + item = StatFarmedBlocks(**new_item) + items.append(item) + db.session.add(item) + db.session.commit() + return items diff --git a/api/views/stats/farmedblocks/schemas.py b/api/views/stats/farmedblocks/schemas.py new file mode 100644 index 00000000..7a887b05 --- /dev/null +++ b/api/views/stats/farmedblocks/schemas.py @@ -0,0 +1,27 @@ +import marshmallow as ma +from marshmallow_sqlalchemy import field_for +from marshmallow_toplevel import TopLevelSchema + +from api.extensions.api import Schema, AutoSchema +from common.models.stats import StatFarmedBlocks + +class StatFarmedBlocksSchema(AutoSchema): + id = field_for(StatFarmedBlocks, "id") + + class Meta(AutoSchema.Meta): + table = StatFarmedBlocks.__table__ + + +class StatFarmedBlocksQueryArgsSchema(Schema): + id = ma.fields.Str() + hostname = ma.fields.Str() + +class BatchOfStatFarmedBlocksSchema(TopLevelSchema): + _toplevel = ma.fields.Nested( + StatFarmedBlocksSchema, + required=True, + many=True + ) + +class BatchOfStatFarmedBlocksQueryArgsSchema(Schema): + hostname = ma.fields.Str() diff --git a/common/models/__init__.py b/common/models/__init__.py index fc5b68ac..f642006c 100644 --- a/common/models/__init__.py +++ b/common/models/__init__.py @@ -12,6 +12,6 @@ from .pools import Pool from .stats import StatPlotCount, StatPlotsSize, StatTotalCoins, StatNetspaceSize, StatTimeToWin, \ StatPlotsTotalUsed, StatPlotsDiskUsed, StatPlotsDiskFree, StatPlottingTotalUsed, \ - StatPlottingDiskUsed, StatPlottingDiskFree + StatPlottingDiskUsed, StatPlottingDiskFree, StatFarmedBlocks from .wallets import Wallet from .workers import Worker \ No newline at end of file diff --git a/common/models/stats.py b/common/models/stats.py index 9ccae005..ccc4e073 100644 --- a/common/models/stats.py +++ b/common/models/stats.py @@ -11,7 +11,7 @@ class StatPlotCount(db.Model): id = db.Column(db.Integer, primary_key=True) hostname = db.Column(db.String()) - blockchain = sa.Column(sa.String(length=64), nullable=False) + blockchain = db.Column(db.String(length=64), nullable=False) value = db.Column(db.REAL) created_at = db.Column(db.String()) @@ -21,7 +21,7 @@ class StatPlotsSize(db.Model): id = db.Column(db.Integer, primary_key=True) hostname = db.Column(db.String()) - blockchain = sa.Column(sa.String(length=64), nullable=False) + blockchain = db.Column(db.String(length=64), nullable=False) value = db.Column(db.REAL) created_at = db.Column(db.String()) @@ -31,7 +31,7 @@ class StatTotalCoins(db.Model): id = db.Column(db.Integer, primary_key=True) hostname = db.Column(db.String()) - blockchain = sa.Column(sa.String(length=64), nullable=False) + blockchain = db.Column(db.String(length=64), nullable=False) value = db.Column(db.REAL) created_at = db.Column(db.String()) @@ -41,7 +41,7 @@ class StatNetspaceSize(db.Model): id = db.Column(db.Integer, primary_key=True) hostname = db.Column(db.String()) - blockchain = sa.Column(sa.String(length=64), nullable=False) + blockchain = db.Column(db.String(length=64), nullable=False) value = db.Column(db.REAL) created_at = db.Column(db.String()) @@ -51,7 +51,7 @@ class StatTimeToWin(db.Model): id = db.Column(db.Integer, primary_key=True) hostname = db.Column(db.String()) - blockchain = sa.Column(sa.String(length=64), nullable=False) + blockchain = db.Column(db.String(length=64), nullable=False) value = db.Column(db.REAL) created_at = db.Column(db.String()) @@ -61,7 +61,7 @@ class StatPlotsTotalUsed(db.Model): id = db.Column(db.Integer, primary_key=True) hostname = db.Column(db.String()) - blockchain = sa.Column(sa.String(length=64), nullable=False) + blockchain = db.Column(db.String(length=64), nullable=False) value = db.Column(db.REAL) created_at = db.Column(db.String()) @@ -91,7 +91,7 @@ class StatPlottingTotalUsed(db.Model): id = db.Column(db.Integer, primary_key=True) hostname = db.Column(db.String()) - blockchain = sa.Column(sa.String(length=64), nullable=False) + blockchain = db.Column(db.String(length=64), nullable=False) value = db.Column(db.REAL) created_at = db.Column(db.String()) @@ -114,3 +114,17 @@ class StatPlottingDiskFree(db.Model): path = db.Column(db.String()) value = db.Column(db.REAL) created_at = db.Column(db.String()) + +class StatFarmedBlocks(db.Model): + __bind_key__ = 'stat_farmed_blocks' + __tablename__ = "stat_farmed_blocks" + + id = db.Column(db.Integer, primary_key=True) + hostname = db.Column(db.String()) + blockchain = db.Column(db.String(length=64)) + challenge_id = db.Column(db.String()) + plot_files = db.Column(db.String()) + proofs_found = db.Column(db.Integer) + time_taken = db.Column(db.String(length=32)) + farmed_block = db.Column(db.String()) + created_at = db.Column(db.String()) diff --git a/web/default_settings.py b/web/default_settings.py index 4b0d3ce2..82f71034 100644 --- a/web/default_settings.py +++ b/web/default_settings.py @@ -31,6 +31,7 @@ class DefaultConfig: 'stat_plotting_total_used': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_total_used.db', 'stat_plotting_disk_used': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_used.db', 'stat_plotting_disk_free': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_free.db', + 'stat_farmed_blocks': 'sqlite:////root/.chia/machinaris/dbs/stat_farmed_blocks.db', } SQLALCHEMY_ECHO = True if 'FLASK_ENV' in os.environ and os.environ['FLASK_ENV'] == "development" else False CONTROLLER_SCHEME = 'http' diff --git a/web/templates/worker_launch.html b/web/templates/worker_launch.html index 54fd5e6f..cdb85cf5 100644 --- a/web/templates/worker_launch.html +++ b/web/templates/worker_launch.html @@ -260,6 +260,7 @@ var blockchains = document.getElementsByName('blockchains'); var worker_port = 8928; + var is_first_loop_pass = true; for(var i = 0; i < blockchains.length; ++i) { if (blockchains[i].checked) { var blockchain = blockchains[i].value @@ -280,7 +281,7 @@ if (document.getElementById("worker_hostname").value) { cmd += ' hostname: ' + document.getElementById("worker_hostname").value + line_end; } - else if (i == 0) { + else if (is_first_loop_pass) { errors.push("{{_('Missing worker hostname. Please provide a short name to identify your worker.')}}"); } cmd += ' restart: always' + line_end; @@ -299,7 +300,7 @@ if (os == 'windows' && ($('#volume_location' + index).val() == 'remote')) { remote_windows_shares.push(volume_host_path + ':' + volume_container_path); } else { - if (i == 0) { // Record error on first pass + if (is_first_loop_pass) { // Record error on first pass if (volume_host_path.endsWith(':')) { errors.push("{{_('Invalid host path ending with colon. Try adding a slash to the end like this')}} " + volume_host_path + '/'); } @@ -351,13 +352,13 @@ cmd += ' - mode=' + mode + line_end; cmd += ' - controller_host=' + document.getElementById("controller_host").value + line_end; cmd += ' - controller_api_port=' + document.getElementById("controller_api_port").value + line_end; - } else if (i == 0) { // fullnode + } else if (is_first_loop_pass) { // fullnode errors.push("{{_('Neither Harvester or Plottter mode selected. Please choose one or both.')}}"); } if (document.getElementById("ip_addr").value) { cmd += ' - worker_address=' + document.getElementById("ip_addr").value + line_end; } - else if (i == 0) { + else if (is_first_loop_pass) { errors.push("{{_('Missing worker IP address. Please provide the IP the controller will connect to for commands.')}}"); } var worker_port = lookup_worker_port(blockchain); @@ -383,6 +384,7 @@ cmd += ' - DAC_READ_SEARCH' + line_end; } cmd += line_end; + is_first_loop_pass = false; } } return cmd; From 313845066f94cccf6eca204b8d99c865887f760f Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 29 May 2022 09:32:31 -0600 Subject: [PATCH 09/79] Fix migration? --- api/migrations/versions/53d13c2cdac7_.py | 6 ++++++ api/migrations/versions/da71a39b8e21_.py | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/api/migrations/versions/53d13c2cdac7_.py b/api/migrations/versions/53d13c2cdac7_.py index 2c980410..b7a3a82b 100644 --- a/api/migrations/versions/53d13c2cdac7_.py +++ b/api/migrations/versions/53d13c2cdac7_.py @@ -350,4 +350,10 @@ def upgrade_drives(): pass def downgrade_drives(): + pass + +def upgrade_stat_farmed_blocks(): + pass + +def downgrade_stat_farmed_blocks(): pass \ No newline at end of file diff --git a/api/migrations/versions/da71a39b8e21_.py b/api/migrations/versions/da71a39b8e21_.py index 6c44727e..23e62365 100644 --- a/api/migrations/versions/da71a39b8e21_.py +++ b/api/migrations/versions/da71a39b8e21_.py @@ -543,3 +543,9 @@ def upgrade_drives(): def downgrade_drives(): pass + +def upgrade_stat_farmed_blocks(): + pass + +def downgrade_stat_farmed_blocks(): + pass From 590044a206e6874e458c37436bb271816eaca3be Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 29 May 2022 11:07:53 -0600 Subject: [PATCH 10/79] More migration fixes. --- api/migrations/versions/00382c81d58e_.py | 5 +++++ api/migrations/versions/e5c6d9a6d9c3_.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/api/migrations/versions/00382c81d58e_.py b/api/migrations/versions/00382c81d58e_.py index 96072e88..ca96d5f2 100644 --- a/api/migrations/versions/00382c81d58e_.py +++ b/api/migrations/versions/00382c81d58e_.py @@ -376,3 +376,8 @@ def downgrade_stat_plotting_disk_free(): pass # ### end Alembic commands ### +def upgrade_stat_farmed_blocks(): + pass + +def downgrade_stat_farmed_blocks(): + pass \ No newline at end of file diff --git a/api/migrations/versions/e5c6d9a6d9c3_.py b/api/migrations/versions/e5c6d9a6d9c3_.py index 8be978f5..3f227d65 100644 --- a/api/migrations/versions/e5c6d9a6d9c3_.py +++ b/api/migrations/versions/e5c6d9a6d9c3_.py @@ -356,3 +356,8 @@ def downgrade_stat_plotting_disk_free(): pass # ### end Alembic commands ### +def upgrade_stat_farmed_blocks(): + pass + +def downgrade_stat_farmed_blocks(): + pass From 4e4291c43a49585d54275ec10a2178bedf82c220 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 29 May 2022 14:33:36 -0600 Subject: [PATCH 11/79] Fixes for parsing farmed_blocks from debug.log. --- api/migrations/README | 2 +- api/models/log.py | 22 ++++++++++----- api/schedules/stats_blocks.py | 34 ++++++++++++----------- api/views/__init__.py | 2 +- api/views/stats/farmedblocks/resources.py | 4 +-- 5 files changed, 37 insertions(+), 27 deletions(-) diff --git a/api/migrations/README b/api/migrations/README index b3dc5ffa..6d323f79 100644 --- a/api/migrations/README +++ b/api/migrations/README @@ -1,7 +1,7 @@ Schema versioning with Flask-Migrate ## Creating a migration -As developer, modify models, then run this to generate a new migration and commit it. +As developer, modify models, then run this to generate a new migration and commit it. When adding a new table, one must add the upgrade/downgrade method to past migration files with just a `pass` for method body. ``` cd /code/machinaris/api diff --git a/api/models/log.py b/api/models/log.py index 03e36ae9..194e0f34 100644 --- a/api/models/log.py +++ b/api/models/log.py @@ -77,35 +77,43 @@ def __init__(self, cli_stdout): self.rows = [] plot_files = [] plots_past_filter = proofs_found = time_taken = farmed_block = None + cli_stdout.append('--') # add a trailing -- to force last parse for line in cli_stdout: try: #app.logger.info(line) if "proofs in" in line: plot_files.append(re.search('proofs in (.*) in (\d+\.?\d*) s$', line, re.IGNORECASE).group(1)) elif "eligible for farming" in line: - challenge_id = re.search('eligible for farming (\w+)', line, re.IGNORECASE).group(1) + '...', + challenge_id = re.search('eligible for farming (\w+)', line, re.IGNORECASE).group(1) plots_past_filter = str(re.search('INFO\s*(\d+) plots were eligible', line, re.IGNORECASE).group(1)) + \ '/' + str(re.search('Total (\d+) plots', line, re.IGNORECASE).group(1)) proofs_found = int(re.search('Found (\d+) proofs', line, re.IGNORECASE).group(1)) time_taken = str(re.search('Time: (\d+\.?\d*) s.', line, re.IGNORECASE).group(1)) + ' secs' - created_at = line.split()[0].replace('T', ' ') elif "Farmed unfinished_block" in line: - app.logger.info(line) - farmed_block = re.search('Farmed unfinished_block (\w)+', line, re.IGNORECASE).group(1) + created_at = line[line.find(':')+1:].split()[0].replace('T', ' ') + farmed_block = re.search('Farmed unfinished_block (\w+)', line, re.IGNORECASE).group(1) elif "--" == line: - if challenge_id and plots_past_filter and proofs_found and time_taken and farmed_block: + if challenge_id and plots_past_filter and proofs_found and time_taken and farmed_block and len(plot_files): self.rows.append({ 'challenge_id': challenge_id, - 'plot_files': plot_files, + 'plot_files': ','.join(plot_files), 'plots_past_filter': plots_past_filter, 'proofs_found': proofs_found, 'time_taken': time_taken, 'farmed_block': farmed_block, 'created_at': created_at }) + #app.logger.info(self.rows) plots_past_filter = proofs_found = time_taken = farmed_block = None + plot_files = [] else: - app.logger.info("Missing farmed blocks data...") + app.logger.info("challenge_id: {0}".format(challenge_id)) + app.logger.info("plot_files: {0}".format(plot_files)) + app.logger.info("plots_past_filter: {0}".format(plots_past_filter)) + app.logger.info("proofs_found: {0}".format(proofs_found)) + app.logger.info("time_taken: {0}".format(time_taken)) + app.logger.info("created_at: {0}".format(created_at)) + app.logger.info("Missing farmed blocks data for farmed_block {0}".format(farmed_block)) except: app.logger.info("Failed to parse blocks line: {0}".format(line)) app.logger.info(traceback.format_exc()) diff --git a/api/schedules/stats_blocks.py b/api/schedules/stats_blocks.py index d4e19c8d..15710d31 100644 --- a/api/schedules/stats_blocks.py +++ b/api/schedules/stats_blocks.py @@ -24,31 +24,33 @@ def collect(): "Skipping block win stats collection as not farming on this Machinaris instance.") return #app.logger.info("Collecting stats about won blocks.") - current_datetime = datetime.datetime.now().strftime("%Y%m%d%H%M") for blockchain in globals.enabled_blockchains(): if not blockchain == 'mmx': blocks = log_parser.recent_farmed_blocks(blockchain) - store_locally(blockchain, blocks, current_datetime) + store_locally(blockchain, blocks) if not gc['is_controller']: - send_to_controller(blockchain, blocks, current_datetime) + send_to_controller(blockchain, blocks) -def store_locally(blockchain, blocks, current_datetime): +def store_locally(blockchain, blocks): hostname = utils.get_hostname() for block in blocks.rows: try: - db.session.add(stats.StatFarmedBlocks(hostname=hostname, - blockchain=blockchain, - challenge_id=block['challenge_id'], - plot_files=block['plot_files'], - proofs_found=block['plot_files'], - time_taken=block['time_taken'], - farmed_block=block['farmed_block'], - created_at=current_datetime)) + if not db.session.query(stats.StatFarmedBlocks).filter(stats.StatFarmedBlocks.farmed_block==block['farmed_block']).first(): + db.session.add(stats.StatFarmedBlocks(hostname=hostname, + blockchain=blockchain, + challenge_id=block['challenge_id'], + plot_files=block['plot_files'], + proofs_found=block['proofs_found'], + time_taken=block['time_taken'], + farmed_block=block['farmed_block'], + created_at=block['created_at'])) + else: + app.logger.debug("Already in database: {0}".format(block['farmed_block'])) except: app.logger.info(traceback.format_exc()) db.session.commit() -def send_to_controller(blockchain, blocks, current_datetime): +def send_to_controller(blockchain, blocks): try: payload = [] for block in blocks.rows: @@ -58,13 +60,13 @@ def send_to_controller(blockchain, blocks, current_datetime): "blockchain": blockchain, "challenge_id": block['challenge_id'], "plot_files": block['plot_files'], - "proofs_found": block['proofs_found'], + "proofs_found": int(block['proofs_found']), "time_taken": block['time_taken'], "farmed_block": block['farmed_block'], - "created_at": current_datetime, + "created_at": block['created_at'], } ) - utils.send_post('/stats/farmedblocks', payload, debug=True) + utils.send_post('/stats/farmedblocks', payload, debug=False) except: app.logger.info("Failed to send latest stat to {0}.".format('/stats/farmedblocks')) app.logger.info(traceback.format_exc()) diff --git a/api/views/__init__.py b/api/views/__init__.py index e2d93151..16a08f33 100644 --- a/api/views/__init__.py +++ b/api/views/__init__.py @@ -58,9 +58,9 @@ netspacesize, timetowin, metrics, + farmedblocks, ) - def register_blueprints(api): for module in MODULES: api.register_blueprint(module.blp) diff --git a/api/views/stats/farmedblocks/resources.py b/api/views/stats/farmedblocks/resources.py index 34e58f72..5a6379d8 100644 --- a/api/views/stats/farmedblocks/resources.py +++ b/api/views/stats/farmedblocks/resources.py @@ -37,8 +37,8 @@ def post(self, new_items): return "No farmed blocks provided.", 400 items = [] for new_item in new_items: - # Skip any previously sent by existing challenge_id from that host - if not db.session.query(StatFarmedBlocks).filter(StatFarmedBlocks.hostname==new_item['hostname'], StatFarmedBlocks.challenge_id==new_item['challenge_id']).first(): + # Skip any previously sent by existing farmed_block from that host + if not db.session.query(StatFarmedBlocks).filter(StatFarmedBlocks.hostname==new_item['hostname'], StatFarmedBlocks.farmed_block==new_item['farmed_block']).first(): item = StatFarmedBlocks(**new_item) items.append(item) db.session.add(item) From 3804656739b1f9b21fdad0e2aa30dbe26f2820f8 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 29 May 2022 18:49:43 -0600 Subject: [PATCH 12/79] Some blockchains need 10 lines before unfinished_block log line. --- api/commands/log_parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/commands/log_parser.py b/api/commands/log_parser.py index 1550abd9..7e796f71 100644 --- a/api/commands/log_parser.py +++ b/api/commands/log_parser.py @@ -92,7 +92,7 @@ def recent_farmed_blocks(blockchain): rotated_log_file = '' if os.path.exists(log_file + '.1'): rotated_log_file = log_file + '.1' - proc = Popen("grep -B 5 'Farmed unfinished_block' {0} {1}".format(rotated_log_file, log_file), + proc = Popen("grep -B 10 'Farmed unfinished_block' {0} {1}".format(rotated_log_file, log_file), stdout=PIPE, stderr=PIPE, shell=True) try: outs, errs = proc.communicate(timeout=90) From 3411e9b2cf97044f5a1da131cd585517d3f525d7 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Mon, 30 May 2022 15:35:45 -0600 Subject: [PATCH 13/79] Try core.longpaths for chives clone. --- scripts/forks/chives_install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/forks/chives_install.sh b/scripts/forks/chives_install.sh index 9f3e9f74..316a2872 100644 --- a/scripts/forks/chives_install.sh +++ b/scripts/forks/chives_install.sh @@ -10,6 +10,7 @@ HASH=c1111a79d7a1eb02a0bd2111307e266583bc67d1 if [ -z ${CHIVES_BRANCH} ]; then echo 'Skipping Chives install as not requested.' else + git config --system core.longpaths true git clone --branch ${CHIVES_BRANCH} --recurse-submodules https://github.com/HiveProject2021/chives-blockchain.git /chives-blockchain /chives-blockchain/venv/bin/python -m pip install --upgrade pip cd /chives-blockchain From 163bd86845a992400059e8465218cc8207a2a8e5 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Mon, 30 May 2022 15:46:07 -0600 Subject: [PATCH 14/79] Revert failed Chives clone fixes. --- scripts/forks/chives_install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/forks/chives_install.sh b/scripts/forks/chives_install.sh index 316a2872..91997f84 100644 --- a/scripts/forks/chives_install.sh +++ b/scripts/forks/chives_install.sh @@ -10,9 +10,7 @@ HASH=c1111a79d7a1eb02a0bd2111307e266583bc67d1 if [ -z ${CHIVES_BRANCH} ]; then echo 'Skipping Chives install as not requested.' else - git config --system core.longpaths true git clone --branch ${CHIVES_BRANCH} --recurse-submodules https://github.com/HiveProject2021/chives-blockchain.git /chives-blockchain - /chives-blockchain/venv/bin/python -m pip install --upgrade pip cd /chives-blockchain git checkout $HASH chmod +x install.sh From d8e144614312d8b83562f19c7075b4f8cde8b289 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Mon, 30 May 2022 15:52:27 -0600 Subject: [PATCH 15/79] Skip checkout call. --- scripts/forks/chives_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/forks/chives_install.sh b/scripts/forks/chives_install.sh index 91997f84..6ca889de 100644 --- a/scripts/forks/chives_install.sh +++ b/scripts/forks/chives_install.sh @@ -12,7 +12,7 @@ if [ -z ${CHIVES_BRANCH} ]; then else git clone --branch ${CHIVES_BRANCH} --recurse-submodules https://github.com/HiveProject2021/chives-blockchain.git /chives-blockchain cd /chives-blockchain - git checkout $HASH + #git checkout $HASH chmod +x install.sh /usr/bin/sh ./install.sh From dc38d2903bdc97b7712b58ffa53d584edd3387f9 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Tue, 31 May 2022 21:49:33 -0600 Subject: [PATCH 16/79] Hourly stats of wallet balances. --- CHANGELOG.md | 4 +- api/default_settings.py | 1 + api/gunicorn.conf.py | 9 +- api/migrations/README | 1 + api/migrations/versions/00382c81d58e_.py | 11 +- api/migrations/versions/4251648e5e30_.py | 368 +++++++++++++++++++++++ api/migrations/versions/53d13c2cdac7_.py | 11 +- api/migrations/versions/8acdc24f8d3d_.py | 6 + api/migrations/versions/da71a39b8e21_.py | 9 +- api/migrations/versions/e5c6d9a6d9c3_.py | 9 +- api/models/chia.py | 84 +++++- api/models/log.py | 2 +- api/schedules/stats_balances.py | 50 +++ common/models/__init__.py | 2 +- common/models/stats.py | 10 + common/utils/converters.py | 2 + scripts/forks/chives_install.sh | 5 +- scripts/pull_3rd_party_libs.sh | 2 +- web/actions/stats.py | 37 ++- web/default_settings.py | 3 +- web/routes.py | 14 +- web/templates/index/chart_balances.html | 128 ++++++++ web/templates/index/chart_farmed.html | 128 ++++++++ web/templates/{ => index}/index.html | 10 + 24 files changed, 876 insertions(+), 30 deletions(-) create mode 100644 api/migrations/versions/4251648e5e30_.py create mode 100644 api/schedules/stats_balances.py create mode 100644 web/templates/index/chart_balances.html create mode 100644 web/templates/index/chart_farmed.html rename web/templates/{ => index}/index.html (90%) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc3a207d..7265e406 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,9 @@ All notable changes to this project will be documented in this file. The format ## [0.7.3] - 2022-06-? - [Cactus](https://github.com/Cactus-Network/cactus-blockchain) - v1.3.4, matches Chia 1.3.4, please run: `cactus db upgrade` - - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.5 (pre-release) - currently broken due to [git clone error](https://github.com/HiveProject2021/chives-blockchain/issues/77). + - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.1, please run: `chives db upgrade` - [Cryptodoge](https://github.com/CryptoDoge-Network/cryptodoge) - v1.3.4, matches Chia 1.3.4, please run: `cryptodoge db upgrade` - - [Flax](https://github.com/Flax-Network/flax-blockchain) - v0.1.8, matches Chia 1.3.3 + - [Flax](https://github.com/Flax-Network/flax-blockchain) - v0.1.8, matches Chia 1.3.3, please run: `flax db upgrade` if you haven't yet ## [0.7.2] - 2022-05-17 - Drives monitoring page - allow [overrides of smartctl commands](https://github.com/guydavis/machinaris/wiki/Drives#override-command) for special hardware. Drive failure alerts thru our enhanced Chiadog. diff --git a/api/default_settings.py b/api/default_settings.py index 43785eb5..d95ed708 100644 --- a/api/default_settings.py +++ b/api/default_settings.py @@ -40,6 +40,7 @@ class DefaultConfig: 'stat_plotting_disk_used': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_used.db', 'stat_plotting_disk_free': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_free.db', 'stat_farmed_blocks': 'sqlite:////root/.chia/machinaris/dbs/stat_farmed_blocks.db', + 'stat_wallet_balances': 'sqlite:////root/.chia/machinaris/dbs/stat_wallet_balances.db', } SQLALCHEMY_ECHO = True if 'FLASK_ENV' in os.environ and os.environ['FLASK_ENV'] == "development" else False ETAG_DISABLED = True # https://flask-smorest.readthedocs.io/en/latest/etag.html diff --git a/api/gunicorn.conf.py b/api/gunicorn.conf.py index 813a034b..d4a672a2 100644 --- a/api/gunicorn.conf.py +++ b/api/gunicorn.conf.py @@ -10,8 +10,8 @@ def on_starting(server): from api.schedules import status_worker, status_farm, status_plotting, \ status_plots, status_challenges, status_wallets, status_blockchains, \ status_connections, status_keys, status_alerts, status_controller, \ - status_plotnfts, status_pools, status_partials, status_drives, stats_blocks - from api.schedules import stats_disk, stats_farm, nft_recover, plots_check, \ + status_plotnfts, status_pools, status_partials, status_drives, \ + stats_blocks, stats_balances, stats_disk, stats_farm, nft_recover, plots_check, \ log_rotate, db_backup, restart_stuck_farmer, geolocate_peers from common.config import globals @@ -75,9 +75,10 @@ def on_starting(server): scheduler.add_job(func=websvcs.get_prices, name="get_prices", trigger='interval', seconds=JOB_FREQUENCY, jitter=JOB_JITTER) scheduler.add_job(func=nft_recover.execute, name="nft_recover", trigger='interval', hours=12) scheduler.add_job(func=geolocate_peers.execute, name="geolocate_peers", trigger='interval', seconds=JOB_FREQUENCY, jitter=JOB_JITTER) - + scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='cron', minute=0) # Hourly + # Testing only - #scheduler.add_job(func=stats_blocks.collect, name="stats_blocks", trigger='interval', seconds=10) # Test immediately + #scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='interval', seconds=10) # Test immediately app.logger.debug("Starting background scheduler...") scheduler.start() diff --git a/api/migrations/README b/api/migrations/README index 6d323f79..4b8d8258 100644 --- a/api/migrations/README +++ b/api/migrations/README @@ -5,6 +5,7 @@ As developer, modify models, then run this to generate a new migration and commi ``` cd /code/machinaris/api +FLASK_APP=__init__.py flask db stamp head FLASK_APP=__init__.py flask db migrate chown -R 1000.users . ``` diff --git a/api/migrations/versions/00382c81d58e_.py b/api/migrations/versions/00382c81d58e_.py index ca96d5f2..f727a8e1 100644 --- a/api/migrations/versions/00382c81d58e_.py +++ b/api/migrations/versions/00382c81d58e_.py @@ -24,9 +24,6 @@ def downgrade(engine_name): globals()["downgrade_%s" % engine_name]() - - - def upgrade_(): # ### commands auto generated by Alembic - please adjust! ### pass @@ -380,4 +377,10 @@ def upgrade_stat_farmed_blocks(): pass def downgrade_stat_farmed_blocks(): - pass \ No newline at end of file + pass + +def upgrade_stat_wallet_balances(): + pass + +def downgrade_stat_wallet_balances(): + pass diff --git a/api/migrations/versions/4251648e5e30_.py b/api/migrations/versions/4251648e5e30_.py new file mode 100644 index 00000000..557edc07 --- /dev/null +++ b/api/migrations/versions/4251648e5e30_.py @@ -0,0 +1,368 @@ +"""empty message + +Revision ID: 4251648e5e30 +Revises: 8acdc24f8d3d +Create Date: 2022-05-31 18:08:06.431570 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '4251648e5e30' +down_revision = '8acdc24f8d3d' +branch_labels = None +depends_on = None + + +def upgrade(engine_name): + globals()["upgrade_%s" % engine_name]() + + +def downgrade(engine_name): + globals()["downgrade_%s" % engine_name]() + + +def upgrade_(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_alerts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_alerts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_blockchains(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_blockchains(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_challenges(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_challenges(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_connections(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_connections(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_drives(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_drives(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_farms(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_farms(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_keys(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_keys(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_partials(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_partials(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_plotnfts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_plotnfts(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_plottings(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_plottings(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_plots(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_plots(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_pools(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_pools(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_wallets(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_wallets(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_workers(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_workers(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plot_count(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plot_count(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_total_coins(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_total_coins(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_netspace_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_netspace_size(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_time_to_win(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_time_to_win(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plots_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plots_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plotting_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plotting_total_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plotting_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plotting_disk_used(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_plotting_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_plotting_disk_free(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_farmed_blocks(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade_stat_farmed_blocks(): + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def upgrade_stat_wallet_balances(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('stat_wallet_balances', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('hostname', sa.String(), nullable=True), + sa.Column('blockchain', sa.String(length=64), nullable=False), + sa.Column('value', sa.REAL(), nullable=True), + sa.Column('created_at', sa.String(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade_stat_wallet_balances(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('stat_wallet_balances') + # ### end Alembic commands ### + diff --git a/api/migrations/versions/53d13c2cdac7_.py b/api/migrations/versions/53d13c2cdac7_.py index b7a3a82b..0b6b164f 100644 --- a/api/migrations/versions/53d13c2cdac7_.py +++ b/api/migrations/versions/53d13c2cdac7_.py @@ -24,9 +24,6 @@ def downgrade(engine_name): globals()["downgrade_%s" % engine_name]() - - - def upgrade_(): # ### commands auto generated by Alembic - please adjust! ### pass @@ -356,4 +353,10 @@ def upgrade_stat_farmed_blocks(): pass def downgrade_stat_farmed_blocks(): - pass \ No newline at end of file + pass + +def upgrade_stat_wallet_balances(): + pass + +def downgrade_stat_wallet_balances(): + pass diff --git a/api/migrations/versions/8acdc24f8d3d_.py b/api/migrations/versions/8acdc24f8d3d_.py index 0305f7ed..b830e9ac 100644 --- a/api/migrations/versions/8acdc24f8d3d_.py +++ b/api/migrations/versions/8acdc24f8d3d_.py @@ -361,3 +361,9 @@ def downgrade_stat_farmed_blocks(): op.drop_table('stat_farmed_blocks') # ### end Alembic commands ### +def upgrade_stat_wallet_balances(): + pass + + +def downgrade_stat_wallet_balances(): + pass diff --git a/api/migrations/versions/da71a39b8e21_.py b/api/migrations/versions/da71a39b8e21_.py index 23e62365..f0297ff3 100644 --- a/api/migrations/versions/da71a39b8e21_.py +++ b/api/migrations/versions/da71a39b8e21_.py @@ -24,9 +24,6 @@ def downgrade(engine_name): globals()["downgrade_%s" % engine_name]() - - - def upgrade_(): # ### commands auto generated by Alembic - please adjust! ### pass @@ -549,3 +546,9 @@ def upgrade_stat_farmed_blocks(): def downgrade_stat_farmed_blocks(): pass + +def upgrade_stat_wallet_balances(): + pass + +def downgrade_stat_wallet_balances(): + pass diff --git a/api/migrations/versions/e5c6d9a6d9c3_.py b/api/migrations/versions/e5c6d9a6d9c3_.py index 3f227d65..60540543 100644 --- a/api/migrations/versions/e5c6d9a6d9c3_.py +++ b/api/migrations/versions/e5c6d9a6d9c3_.py @@ -24,9 +24,6 @@ def downgrade(engine_name): globals()["downgrade_%s" % engine_name]() - - - def upgrade_(): # ### commands auto generated by Alembic - please adjust! ### pass @@ -361,3 +358,9 @@ def upgrade_stat_farmed_blocks(): def downgrade_stat_farmed_blocks(): pass + +def upgrade_stat_wallet_balances(): + pass + +def downgrade_stat_wallet_balances(): + pass diff --git a/api/models/chia.py b/api/models/chia.py index 344d7e9c..715a17b9 100644 --- a/api/models/chia.py +++ b/api/models/chia.py @@ -1,3 +1,4 @@ +import locale import os import re import traceback @@ -6,7 +7,8 @@ from api import app, utils from common.config import globals -from common.utils import converters +from common.utils import converters, fiat +from common.models import wallets as w class FarmSummary: @@ -67,6 +69,86 @@ def __init__(self, cli_stdout): continue self.text += line + '\n' +class Wallets: + + def __init__(self, wallets, cold_wallet_addresses={}): + self.wallets = wallets + self.columns = ['hostname', 'details', 'updated_at'] + self.rows = [] + self.cold_wallet_addresses = cold_wallet_addresses + for wallet in wallets: + app.logger.debug("Wallets.init(): Parsing wallet for blockchain: {0}".format(wallet.blockchain)) + if wallet.blockchain == 'mmx': + hot_balance = self.sum_mmx_wallet_balance(wallet.hostname, wallet.blockchain, False) + else: + hot_balance = self.sum_chia_wallet_balance(wallet.hostname, wallet.blockchain, False) + try: + cold_balance = float(wallet.cold_balance) + except: + cold_balance = 0.0 + try: + total_balance = float(hot_balance) + float(cold_balance) + except: + total_balance = hot_balance + self.rows.append({ + 'hostname': wallet.hostname, + 'blockchain': wallet.blockchain, + 'total_balance': total_balance, + 'updated_at': wallet.updated_at }) + + def exclude_cat_wallets(self, wallet_details): + details = [] + chunks = wallet_details.split('\n\n') + for chunk in chunks: + is_cat_wallet = False + lines = chunk.split('\n') + for line in lines: + if re.match('^\s+-Type:\s+CAT$', line): + is_cat_wallet = True + if is_cat_wallet: + app.logger.info("Ignoring balance of CAT type wallet named: {0}".format(lines[0][:-1])) + else: + details.extend(chunk.split('\n')) + return '\n'.join(details) + + def sum_chia_wallet_balance(self, hostname, blockchain, include_cold_balance=True): + numeric_const_pattern = '-Total\sBalance:\s+((?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ )?)' + rx = re.compile(numeric_const_pattern, re.VERBOSE) + sum = 0 + for wallet in self.wallets: + if wallet.hostname == hostname and wallet.blockchain == blockchain: + try: + for balance in rx.findall(self.exclude_cat_wallets(wallet.details)): + #app.logger.info("Found balance of {0} for for {1} - {2}".format(balance, + # wallet.hostname, wallet.blockchain)) + sum += locale.atof(balance) + found_balance = True + except Exception as ex: + app.logger.info("Failed to find current wallet balance number for {0} - {1}: {2}".format( + wallet.hostname, wallet.blockchain, str(ex))) + if include_cold_balance and wallet.cold_balance: + sum += locale.atof(wallet.cold_balance) + return sum + + def sum_mmx_wallet_balance(self, hostname, blockchain, include_cold_balance=True): + numeric_const_pattern = 'Balance:\s+((?: (?: \d*\.\d+ ) | (?: \d+\.? ) )(?: [Ee] [+-]? \d+ )?)' + rx = re.compile(numeric_const_pattern, re.VERBOSE) + sum = 0 + for wallet in self.wallets: + if wallet.hostname == hostname and wallet.blockchain == blockchain: + try: + #app.logger.info(wallet.details) + for balance in rx.findall(wallet.details): + #app.logger.info("Found balance of {0} for for {1} - {2}".format(balance, wallet.hostname, wallet.blockchain)) + sum += locale.atof(balance) + found_balance = True + except Exception as ex: + app.logger.info("Failed to find current wallet balance number for {0} - {1}: {2}".format( + wallet.hostname, wallet.blockchain, str(ex))) + if include_cold_balance and wallet.cold_balance: + sum += locale.atof(wallet.cold_balance) + return sum + class Keys: def __init__(self, cli_stdout): diff --git a/api/models/log.py b/api/models/log.py index 194e0f34..9166f00d 100644 --- a/api/models/log.py +++ b/api/models/log.py @@ -76,7 +76,7 @@ def __init__(self, cli_stdout): self.columns = [ 'challenge_id', 'plot_files', 'proofs_found', 'time_taken', 'farmed_block', 'created_at'] self.rows = [] plot_files = [] - plots_past_filter = proofs_found = time_taken = farmed_block = None + challenge_id = plots_past_filter = proofs_found = time_taken = farmed_block = None cli_stdout.append('--') # add a trailing -- to force last parse for line in cli_stdout: try: diff --git a/api/schedules/stats_balances.py b/api/schedules/stats_balances.py new file mode 100644 index 00000000..09b6172e --- /dev/null +++ b/api/schedules/stats_balances.py @@ -0,0 +1,50 @@ +# +# Store the total wallet balance (hot + cold) per blockchain locally on the controller each hour. +# + +from ast import Store +import datetime +import http +import json +import os +import requests +import socket +import sqlite3 +import traceback + +from flask import g + +from common.config import globals +from common.models import stats, wallets as w +from api.commands import chia_cli, websvcs +from api.models import chia +from api import app, utils, db + +def collect(): + with app.app_context(): + gc = globals.load() + if not gc['is_controller']: + app.logger.info("Only collect wallet balances on controller.") + return + current_datetime = datetime.datetime.now().strftime("%Y%m%d%H%M") + try: + wallets = db.session.query(w.Wallet).order_by(w.Wallet.blockchain).all() + cold_wallet_addresses = websvcs.load_cold_wallet_addresses() + wallets = chia.Wallets(wallets, cold_wallet_addresses) + for wallet in wallets.rows: + store_locally(wallet['blockchain'], wallet['total_balance'], current_datetime) + except: + app.logger.info("Failed to load and store wallet balance.") + app.logger.info(traceback.format_exc()) + +def store_locally(blockchain, wallet_balance, current_datetime): + current_datetime = datetime.datetime.now().strftime("%Y%m%d%H%M") + try: + db.session.add(stats.StatWalletBalances( + hostname=utils.get_hostname(), + blockchain=blockchain, + value = wallet_balance, + created_at=current_datetime)) + except: + app.logger.info(traceback.format_exc()) + db.session.commit() diff --git a/common/models/__init__.py b/common/models/__init__.py index f642006c..e8cf3111 100644 --- a/common/models/__init__.py +++ b/common/models/__init__.py @@ -12,6 +12,6 @@ from .pools import Pool from .stats import StatPlotCount, StatPlotsSize, StatTotalCoins, StatNetspaceSize, StatTimeToWin, \ StatPlotsTotalUsed, StatPlotsDiskUsed, StatPlotsDiskFree, StatPlottingTotalUsed, \ - StatPlottingDiskUsed, StatPlottingDiskFree, StatFarmedBlocks + StatPlottingDiskUsed, StatPlottingDiskFree, StatFarmedBlocks, StatWalletBalances from .wallets import Wallet from .workers import Worker \ No newline at end of file diff --git a/common/models/stats.py b/common/models/stats.py index ccc4e073..0fbcc384 100644 --- a/common/models/stats.py +++ b/common/models/stats.py @@ -128,3 +128,13 @@ class StatFarmedBlocks(db.Model): time_taken = db.Column(db.String(length=32)) farmed_block = db.Column(db.String()) created_at = db.Column(db.String()) + +class StatWalletBalances(db.Model): + __bind_key__ = 'stat_wallet_balances' + __tablename__ = "stat_wallet_balances" + + id = db.Column(db.Integer, primary_key=True) + hostname = db.Column(db.String()) + blockchain = db.Column(db.String(length=64), nullable=False) + value = db.Column(db.REAL) + created_at = db.Column(db.String()) diff --git a/common/utils/converters.py b/common/utils/converters.py index 6a41e76e..3dcbde45 100644 --- a/common/utils/converters.py +++ b/common/utils/converters.py @@ -63,6 +63,8 @@ def convert_date_for_luxon(datestr): month = datestr[4:6] day = datestr[6:8] time = datestr[8:] + if not ':' in time: + time = time[:2] + ':' + time[2:] return "{0}-{1}-{2}T{3}".format(year, month, day, time) def round_balance(value): diff --git a/scripts/forks/chives_install.sh b/scripts/forks/chives_install.sh index 6ca889de..9671db15 100644 --- a/scripts/forks/chives_install.sh +++ b/scripts/forks/chives_install.sh @@ -4,14 +4,15 @@ # CHIVES_BRANCH=$1 -# On 2022-05-22 -HASH=c1111a79d7a1eb02a0bd2111307e266583bc67d1 +# On 2022-05-22 Not used anymore +# HASH=c1111a79d7a1eb02a0bd2111307e266583bc67d1 if [ -z ${CHIVES_BRANCH} ]; then echo 'Skipping Chives install as not requested.' else git clone --branch ${CHIVES_BRANCH} --recurse-submodules https://github.com/HiveProject2021/chives-blockchain.git /chives-blockchain cd /chives-blockchain + # Can't checkout due to filename limit issue with AUFS inside container #git checkout $HASH chmod +x install.sh /usr/bin/sh ./install.sh diff --git a/scripts/pull_3rd_party_libs.sh b/scripts/pull_3rd_party_libs.sh index 003060fc..d12ed7ef 100755 --- a/scripts/pull_3rd_party_libs.sh +++ b/scripts/pull_3rd_party_libs.sh @@ -13,7 +13,7 @@ LIST=" https://cdn.datatables.net/1.12.0/css/dataTables.bootstrap5.css https://cdn.datatables.net/1.12.0/js/dataTables.bootstrap5.js https://cdn.datatables.net/1.12.0/js/jquery.dataTables.js -https://cdn.jsdelivr.net/npm/chart.js@3.7.1/dist/chart.min.js +https://cdn.jsdelivr.net/npm/chart.js@3.8.0/dist/chart.min.js https://cdn.jsdelivr.net/npm/chartjs-adapter-luxon@1.1.0/dist/chartjs-adapter-luxon.min.js https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js https://moment.github.io/luxon/global/luxon.min.js" diff --git a/web/actions/stats.py b/web/actions/stats.py index 25a91caa..4114a7ab 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -21,7 +21,7 @@ from common.models.partials import Partial from common.models.stats import StatPlotCount, StatPlotsSize, StatTotalCoins, StatNetspaceSize, StatTimeToWin, \ StatPlotsTotalUsed, StatPlotsDiskUsed, StatPlotsDiskFree, StatPlottingTotalUsed, \ - StatPlottingDiskUsed, StatPlottingDiskFree + StatPlottingDiskUsed, StatPlottingDiskFree, StatFarmedBlocks, StatWalletBalances from web import app, db, utils from web.actions import chia, worker @@ -358,4 +358,37 @@ def load_summary_stats(blockchains): 'edv_fiat': edv_fiat } return stats - \ No newline at end of file + +def load_farmed_coins(blockchain): + dates = [] + values = [] + result = db.session.query(StatTotalCoins).order_by(StatTotalCoins.created_at.asc()).filter( + StatTotalCoins.blockchain == blockchain).all() + last_value = None + for i in range(len(result)): + s = result[i] + converted_date = converters.convert_date_for_luxon(s.created_at) + if (last_value != s.value) or (i % 24 == 0) or (i == len(result) - 1): + dates.append(converted_date) + values.append(s.value) + last_value = s.value + #app.logger.info(dates) + #app.logger.info(values) + return { 'title': blockchain.capitalize() + ' - ' + _('Farmed Coins'), 'dates': dates, 'vals': values} + +def load_wallet_balances(blockchain): + dates = [] + values = [] + result = db.session.query(StatWalletBalances).order_by(StatWalletBalances.created_at.asc()).filter( + StatWalletBalances.blockchain == blockchain).all() + last_value = None + for i in range(len(result)): + s = result[i] + converted_date = converters.convert_date_for_luxon(s.created_at) + if (last_value != s.value) or (i % 24 == 0) or (i == len(result) - 1): + dates.append(converted_date) + values.append(s.value) + last_value = s.value + #app.logger.info(dates) + #app.logger.info(values) + return { 'title': blockchain.capitalize() + ' - ' + _('Wallet Balances'), 'dates': dates, 'vals': values} \ No newline at end of file diff --git a/web/default_settings.py b/web/default_settings.py index 82f71034..a2e63f15 100644 --- a/web/default_settings.py +++ b/web/default_settings.py @@ -31,7 +31,8 @@ class DefaultConfig: 'stat_plotting_total_used': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_total_used.db', 'stat_plotting_disk_used': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_used.db', 'stat_plotting_disk_free': 'sqlite:////root/.chia/machinaris/dbs/stat_plotting_disk_free.db', - 'stat_farmed_blocks': 'sqlite:////root/.chia/machinaris/dbs/stat_farmed_blocks.db', + 'stat_farmed_blocks': 'sqlite:////root/.chia/machinaris/dbs/stat_farmed_blocks.db', + 'stat_wallet_balances': 'sqlite:////root/.chia/machinaris/dbs/stat_wallet_balances.db', } SQLALCHEMY_ECHO = True if 'FLASK_ENV' in os.environ and os.environ['FLASK_ENV'] == "development" else False CONTROLLER_SCHEME = 'http' diff --git a/web/routes.py b/web/routes.py index 29f660cc..ddf36712 100644 --- a/web/routes.py +++ b/web/routes.py @@ -79,9 +79,21 @@ def index(): p.partials_chart_data(farm_summary) stats.load_daily_diff(farm_summary) warnings.check_warnings(request.args) - return render_template('index.html', reload_seconds=120, farms=farm_summary.farms, \ + return render_template('index/index.html', reload_seconds=120, farms=farm_summary.farms, \ plotting=plotting, workers=workers, global_config=gc, selected_blockchain=selected_blockchain) +@app.route('/index_chart') +def index_chart(): + gc = globals.load() + chart_type = request.args.get('type') + blockchain = request.args.get('blockchain') + if chart_type == 'wallet_balances': + data = stats.load_wallet_balances(blockchain) + return render_template('index/chart_balances.html', reload_seconds=120, global_config=gc, chart_data=data) + elif chart_type == 'farmed_blocks': + data = stats.load_farmed_coins(blockchain) + return render_template('index/chart_farmed.html', reload_seconds=120, global_config=gc, chart_data=data) + @app.route('/summary', methods=['GET', 'POST']) def summary(): gc = globals.load() diff --git a/web/templates/index/chart_balances.html b/web/templates/index/chart_balances.html new file mode 100644 index 00000000..b170e6a3 --- /dev/null +++ b/web/templates/index/chart_balances.html @@ -0,0 +1,128 @@ + + + + + + + + + + {{ chart_data.title }} + {% if reload_seconds %} + + {% endif %} + + + + + + + +
+ +
+
Loaded at: {{ global_config.now }}
+ + + + + + + + diff --git a/web/templates/index/chart_farmed.html b/web/templates/index/chart_farmed.html new file mode 100644 index 00000000..b170e6a3 --- /dev/null +++ b/web/templates/index/chart_farmed.html @@ -0,0 +1,128 @@ + + + + + + + + + + {{ chart_data.title }} + {% if reload_seconds %} + + {% endif %} + + + + + + + +
+ +
+
Loaded at: {{ global_config.now }}
+ + + + + + + + diff --git a/web/templates/index.html b/web/templates/index/index.html similarity index 90% rename from web/templates/index.html rename to web/templates/index/index.html index f7e6543c..bc286843 100644 --- a/web/templates/index.html +++ b/web/templates/index/index.html @@ -84,12 +84,14 @@
{{_('Total Plots Size')}}
+

{{farms[blockchain].wallet_balance }}

{{ farms[blockchain].currency_symbol }} {{_('Balance')}}
+

{{farms[blockchain].total_coins }}

@@ -158,6 +160,14 @@
{{blockchain|capitalize}} - {{_('Partial Proof {% if global_config.farming_enabled %} {% endif %} {% endblock %} \ No newline at end of file From dcaac87234bb1387eff41e0c112dcc3bf9e13987 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Wed, 1 Jun 2022 19:44:19 -0600 Subject: [PATCH 17/79] Latest MMX testnet6. --- CHANGELOG.md | 2 + api/commands/chia_cli.py | 2 +- api/commands/websvcs.py | 8 +--- api/models/chia.py | 6 ++- api/models/log.py | 16 +++---- common/config/globals.py | 5 +++ scripts/forks/mmx_install.sh | 4 +- scripts/forks/mmx_launch.sh | 18 ++++---- web/__init__.py | 10 ++++- web/actions/stats.py | 24 ++++++++++- web/models/chia.py | 23 +++++++++- web/routes.py | 9 ++-- web/templates/blockchains.html | 2 +- web/templates/drives.html | 4 +- web/templates/index/chart_balances.html | 9 ---- web/templates/index/chart_farmed.html | 56 +++++++++++++++++++++---- web/templates/index/index.html | 7 ++-- web/templates/keys.html | 10 ++--- web/templates/plotting/jobs.html | 2 +- web/templates/summary.html | 25 +++++++++-- web/templates/wallet.html | 18 ++++++-- web/templates/workers.html | 2 +- 22 files changed, 188 insertions(+), 74 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7265e406..649c5346 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,10 +3,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.7.3] - 2022-06-? + - Wallets - chart each blockchain's farmed coins and wallet balances over the past month. - [Cactus](https://github.com/Cactus-Network/cactus-blockchain) - v1.3.4, matches Chia 1.3.4, please run: `cactus db upgrade` - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.1, please run: `chives db upgrade` - [Cryptodoge](https://github.com/CryptoDoge-Network/cryptodoge) - v1.3.4, matches Chia 1.3.4, please run: `cryptodoge db upgrade` - [Flax](https://github.com/Flax-Network/flax-blockchain) - v0.1.8, matches Chia 1.3.3, please run: `flax db upgrade` if you haven't yet + - [MMX](https://github.com/madMAx43v3r/mmx-node) - updated version for their `testnet6` network. ## [0.7.2] - 2022-05-17 - Drives monitoring page - allow [overrides of smartctl commands](https://github.com/guydavis/machinaris/wiki/Drives#override-command) for special hardware. Drive failure alerts thru our enhanced Chiadog. diff --git a/api/commands/chia_cli.py b/api/commands/chia_cli.py index 32f6e2d8..0655a852 100644 --- a/api/commands/chia_cli.py +++ b/api/commands/chia_cli.py @@ -121,7 +121,7 @@ def load_connections_show(blockchain): def load_keys_show(blockchain): chia_binary = globals.get_blockchain_binary(blockchain) - proc = Popen("{0} keys show".format(chia_binary), stdout=PIPE, stderr=PIPE, shell=True) + proc = Popen("{0} keys show -d".format(chia_binary), stdout=PIPE, stderr=PIPE, shell=True) try: outs, errs = proc.communicate(timeout=90) except TimeoutExpired: diff --git a/api/commands/websvcs.py b/api/commands/websvcs.py index 1a7e3462..fafe3ca8 100644 --- a/api/commands/websvcs.py +++ b/api/commands/websvcs.py @@ -10,6 +10,7 @@ import requests import traceback +from common.config import globals from api import app ALLTHEBLOCKS_REQUEST_INTERVAL_MINS = 15 @@ -65,11 +66,6 @@ def save_cold_wallet_cache(cold_wallet_cache): except Exception as ex: app.logger.error("Failed to store cold wallet cache in {0} because {1}".format(COLD_WALLET_CACHE_FILE, str(ex))) -def get_alltheblocks_name(blockchain): - if blockchain == 'staicoin': - return 'stai' # Special case for staicoin's inconsistent naming convention - return blockchain - def request_cold_wallet_balance(blockchain, cold_wallet_cache, alltheblocks_blockchain, address, debug=False): app.logger.info("Requesting {0} wallet balance for {1}".format(alltheblocks_blockchain, address)) url = f"https://api.alltheblocks.net/{alltheblocks_blockchain}/address/{address}" @@ -90,7 +86,7 @@ def request_cold_wallet_balance(blockchain, cold_wallet_cache, alltheblocks_bloc def cold_wallet_balance(blockchain): global last_cold_wallet_request_time total_balance = 0.0 - alltheblocks_blockchain = get_alltheblocks_name(blockchain) + alltheblocks_blockchain = globals.get_alltheblocks_name(blockchain) addresses_per_blockchain = load_cold_wallet_addresses() cold_wallet_cache = load_cold_wallet_cache() if blockchain in addresses_per_blockchain: diff --git a/api/models/chia.py b/api/models/chia.py index 715a17b9..64a76b78 100644 --- a/api/models/chia.py +++ b/api/models/chia.py @@ -106,7 +106,7 @@ def exclude_cat_wallets(self, wallet_details): if re.match('^\s+-Type:\s+CAT$', line): is_cat_wallet = True if is_cat_wallet: - app.logger.info("Ignoring balance of CAT type wallet named: {0}".format(lines[0][:-1])) + app.logger.debug("Ignoring balance of CAT type wallet named: {0}".format(lines[0][:-1])) else: details.extend(chunk.split('\n')) return '\n'.join(details) @@ -116,7 +116,9 @@ def sum_chia_wallet_balance(self, hostname, blockchain, include_cold_balance=Tru rx = re.compile(numeric_const_pattern, re.VERBOSE) sum = 0 for wallet in self.wallets: - if wallet.hostname == hostname and wallet.blockchain == blockchain: + if not 'Sync status: Synced' in wallet.details: + raise Exception('{0} wallet is not synced, so balance is unknown.') + elif wallet.hostname == hostname and wallet.blockchain == blockchain: try: for balance in rx.findall(self.exclude_cat_wallets(wallet.details)): #app.logger.info("Found balance of {0} for for {1} - {2}".format(balance, diff --git a/api/models/log.py b/api/models/log.py index 9166f00d..04b353dd 100644 --- a/api/models/log.py +++ b/api/models/log.py @@ -76,7 +76,7 @@ def __init__(self, cli_stdout): self.columns = [ 'challenge_id', 'plot_files', 'proofs_found', 'time_taken', 'farmed_block', 'created_at'] self.rows = [] plot_files = [] - challenge_id = plots_past_filter = proofs_found = time_taken = farmed_block = None + challenge_id = plots_past_filter = proofs_found = time_taken = farmed_block = created_at = None cli_stdout.append('--') # add a trailing -- to force last parse for line in cli_stdout: try: @@ -107,13 +107,13 @@ def __init__(self, cli_stdout): plots_past_filter = proofs_found = time_taken = farmed_block = None plot_files = [] else: - app.logger.info("challenge_id: {0}".format(challenge_id)) - app.logger.info("plot_files: {0}".format(plot_files)) - app.logger.info("plots_past_filter: {0}".format(plots_past_filter)) - app.logger.info("proofs_found: {0}".format(proofs_found)) - app.logger.info("time_taken: {0}".format(time_taken)) - app.logger.info("created_at: {0}".format(created_at)) - app.logger.info("Missing farmed blocks data for farmed_block {0}".format(farmed_block)) + app.logger.debug("challenge_id: {0}".format(challenge_id)) + app.logger.debug("plot_files: {0}".format(plot_files)) + app.logger.debug("plots_past_filter: {0}".format(plots_past_filter)) + app.logger.debug("proofs_found: {0}".format(proofs_found)) + app.logger.debug("time_taken: {0}".format(time_taken)) + app.logger.debug("created_at: {0}".format(created_at)) + app.logger.debug("Missing farmed blocks data for farmed_block {0}".format(farmed_block)) except: app.logger.info("Failed to parse blocks line: {0}".format(line)) app.logger.info(traceback.format_exc()) diff --git a/common/config/globals.py b/common/config/globals.py index 09bc590d..9a6abc17 100644 --- a/common/config/globals.py +++ b/common/config/globals.py @@ -411,3 +411,8 @@ def get_disks(disk_type): logging.info("Unable to find any plotting for stats.") logging.info(traceback.format_exc()) return [] + +def get_alltheblocks_name(blockchain): + if blockchain == 'staicoin': + return 'stai' # Special case for staicoin's inconsistent naming convention + return blockchain \ No newline at end of file diff --git a/scripts/forks/mmx_install.sh b/scripts/forks/mmx_install.sh index 2bbae4a7..bbf900b9 100644 --- a/scripts/forks/mmx_install.sh +++ b/scripts/forks/mmx_install.sh @@ -4,8 +4,8 @@ # MMX_BRANCH=$1 -# On 2022-05-18 -HASH=4ce5daa60a2e83471f1ea1731dd2091138f3890b +# On 2022-06-01 +HASH=92c909291d3d82f57b1680639b9b4f3c4c0ba05e if [ -z ${MMX_BRANCH} ]; then echo 'Skipping MMX install as not requested.' diff --git a/scripts/forks/mmx_launch.sh b/scripts/forks/mmx_launch.sh index 1b6b91eb..f9cfa7de 100644 --- a/scripts/forks/mmx_launch.sh +++ b/scripts/forks/mmx_launch.sh @@ -28,9 +28,9 @@ if [ ! -d /root/.chia/mmx/config ]; then EOF # For a fresh install of Machinaris-MMX, disable timelord by default to save CPU usage echo false > /root/.chia/mmx/config/local/timelord -elif [ ! -d /root/.chia/mmx/config/testnet5 ]; then # Handle an upgrade from older testnet +elif [ ! -d /root/.chia/mmx/config/testnet6 ]; then # Handle an upgrade from older testnet echo 'Copying over new testnet configs to /root/.chia/mmx/config/' - cp -r ./config/testnet5 /root/.chia/mmx/config/ + cp -r ./config/testnet6 /root/.chia/mmx/config/ fi rm -rf ./config ln -s /root/.chia/mmx/config /mmx-node/config @@ -54,19 +54,19 @@ else echo "No OPENCL_GPU provided. MMX blockchain will use use CPU instead." fi -# Symlink the NETWORK file, use 'testnet5' for now +# Symlink the NETWORK file, use 'testnet6' for now #if [ ! -f /root/.chia/mmx/NETWORK ]; then -echo 'testnet5' > /root/.chia/mmx/NETWORK +echo 'testnet6' > /root/.chia/mmx/NETWORK #fi rm -f ./NETWORK ln -s /root/.chia/mmx/NETWORK /mmx-node/NETWORK -# Symlink the testnet5 folder -if [ ! -d /root/.chia/mmx/testnet5 ]; then - mkdir /root/.chia/mmx/testnet5 +# Symlink the testnet6 folder +if [ ! -d /root/.chia/mmx/testnet6 ]; then + mkdir /root/.chia/mmx/testnet6 fi -rm -rf ./testnet5 -ln -s /root/.chia/mmx/testnet5 /mmx-node/testnet5 +rm -rf ./testnet6 +ln -s /root/.chia/mmx/testnet6 /mmx-node/testnet6 # Create a key if none found from previous runs if [[ ${mode} == 'fullnode' ]]; then diff --git a/web/__init__.py b/web/__init__.py index e551c9f4..76d84ecd 100644 --- a/web/__init__.py +++ b/web/__init__.py @@ -11,6 +11,8 @@ from web.default_settings import DefaultConfig +from common.config import globals + app = Flask(__name__) app.secret_key = b'$}#P)eu0A.O,s0Mz' app.config.from_object(DefaultConfig) @@ -96,4 +98,10 @@ def launcheridshortener(value): #app.logger.info("Shorten: {0}".format(value)) return value[:12] + '...' -app.jinja_env.filters['launcheridshortener'] = launcheridshortener \ No newline at end of file +app.jinja_env.filters['launcheridshortener'] = launcheridshortener + +def alltheblocks_blocklink(block, blockchain): + alltheblocks_blockchain = globals.get_alltheblocks_name(blockchain) + return '{1}'.format(alltheblocks_blockchain, block) + +app.jinja_env.filters['alltheblocks_blocklink'] = alltheblocks_blocklink \ No newline at end of file diff --git a/web/actions/stats.py b/web/actions/stats.py index 4114a7ab..f4725ee0 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -3,6 +3,7 @@ # import datetime +from decimal import ROUND_HALF_DOWN import sqlite3 from flask import g @@ -391,4 +392,25 @@ def load_wallet_balances(blockchain): last_value = s.value #app.logger.info(dates) #app.logger.info(values) - return { 'title': blockchain.capitalize() + ' - ' + _('Wallet Balances'), 'dates': dates, 'vals': values} \ No newline at end of file + return { 'title': blockchain.capitalize() + ' - ' + _('Wallet Balances'), 'dates': dates, 'vals': values} + +def load_farmed_blocks(blockchain): + blocks = [] + result = db.session.query(StatFarmedBlocks).order_by(StatFarmedBlocks.created_at.desc()).filter( + StatFarmedBlocks.blockchain == blockchain).all() + for row in result: + try: + w = worker.get_worker(row.hostname) + displayname = w.displayname + except: + app.logger.debug("Failed to find worker for hostname: {0}".format(ResourceWarning.hostname)) + displayname = ROUND_HALF_DOWN.hostname + blocks.append({ + 'hostname': displayname, + 'blockchain': blockchain, + 'created_at': row.created_at, + 'farmed_block': row.farmed_block, + 'plot_files': row.plot_files, + }) + app.logger.info(blocks) + return blocks \ No newline at end of file diff --git a/web/models/chia.py b/web/models/chia.py index 04535dec..a1dedc30 100644 --- a/web/models/chia.py +++ b/web/models/chia.py @@ -372,7 +372,7 @@ def exclude_cat_wallets(self, wallet_details): if re.match('^\s+-Type:\s+CAT$', line): is_cat_wallet = True if is_cat_wallet: - app.logger.info("Ignoring balance of CAT type wallet named: {0}".format(lines[0][:-1])) + app.logger.debug("Ignoring balance of CAT type wallet named: {0}".format(lines[0][:-1])) else: details.extend(chunk.split('\n')) return '\n'.join(details) @@ -449,13 +449,32 @@ def __init__(self, keys): except: app.logger.info("Keys.init(): Unable to find a worker with hostname '{0}'".format(key.hostname)) displayname = key.hostname + parsed_details = key.details + try: + parsed_details = self.link_first_wallet_address(key.blockchain, key.details) + except: + traceback.print_exc() + parsed_details = key.details self.rows.append({ 'displayname': displayname, 'hostname': key.hostname, 'blockchain': key.blockchain, 'status': worker_status, - 'details': key.details, + 'details': parsed_details, 'updated_at': key.updated_at }) + + def link_first_wallet_address(self, blockchain, details): + alltheblocks_blockchain = globals.get_alltheblocks_name(blockchain) + lines = [] + for line in details.split('\n'): + if line.startswith('First wallet address'): + label = line.split(':')[0] + address = line.split(':')[1].strip() + link = "https://alltheblocks.net/{0}/address/{1}".format(alltheblocks_blockchain, address) + lines.append("{0}: {2}".format(label, link, address)) + else: + lines.append(line) + return '\n'.join(lines) class Blockchains: diff --git a/web/routes.py b/web/routes.py index ddf36712..cb8767d7 100644 --- a/web/routes.py +++ b/web/routes.py @@ -88,11 +88,12 @@ def index_chart(): chart_type = request.args.get('type') blockchain = request.args.get('blockchain') if chart_type == 'wallet_balances': - data = stats.load_wallet_balances(blockchain) - return render_template('index/chart_balances.html', reload_seconds=120, global_config=gc, chart_data=data) + chart_data = stats.load_wallet_balances(blockchain) + return render_template('index/chart_balances.html', reload_seconds=120, global_config=gc, chart_data=chart_data, lang=get_lang(request)) elif chart_type == 'farmed_blocks': - data = stats.load_farmed_coins(blockchain) - return render_template('index/chart_farmed.html', reload_seconds=120, global_config=gc, chart_data=data) + chart_data = stats.load_farmed_coins(blockchain) + farmed_blocks = stats.load_farmed_blocks(blockchain) + return render_template('index/chart_farmed.html', reload_seconds=120, global_config=gc, chart_data=chart_data, farmed_blocks=farmed_blocks, lang=get_lang(request)) @app.route('/summary', methods=['GET', 'POST']) def summary(): diff --git a/web/templates/blockchains.html b/web/templates/blockchains.html index 01f0f302..0f8557db 100644 --- a/web/templates/blockchains.html +++ b/web/templates/blockchains.html @@ -54,7 +54,7 @@ {{blockchain.peak_time}} {{blockchain.updated_at | datetimefilter}} - + {% endfor %} diff --git a/web/templates/drives.html b/web/templates/drives.html index a4b9aa42..cc90e364 100644 --- a/web/templates/drives.html +++ b/web/templates/drives.html @@ -130,7 +130,7 @@
Temperatures
{{drive.updated_at | datetimefilter}} -   +   {% endfor %} @@ -145,7 +145,7 @@
Temperatures
+ onclick='SmartctlDeviceInfo("{{ drive.hostname }}", "{{ drive.device }}", "{{ drive.worker }}", "{{ drive.device_model }}", "{{ drive.model_family }}");return false;'> {{drive.worker}} - {{drive.device}} - {% if drive.model_family %} {{drive.model_family}} diff --git a/web/templates/index/chart_balances.html b/web/templates/index/chart_balances.html index b170e6a3..b1177849 100644 --- a/web/templates/index/chart_balances.html +++ b/web/templates/index/chart_balances.html @@ -28,9 +28,6 @@ margin: 10px; padding: 10px; padding-top: 20px; - white-space: pre-wrap; - font-family: monospace; - overflow-y: auto; } @@ -49,9 +43,6 @@
Loaded at: {{ global_config.now }}
- diff --git a/web/templates/index/chart_farmed.html b/web/templates/index/chart_farmed.html index b170e6a3..64bab740 100644 --- a/web/templates/index/chart_farmed.html +++ b/web/templates/index/chart_farmed.html @@ -7,6 +7,7 @@ + {{ chart_data.title }} {% if reload_seconds %} @@ -28,9 +29,6 @@ margin: 10px; padding: 10px; padding-top: 20px; - white-space: pre-wrap; - font-family: monospace; - overflow-y: auto; } @@ -48,15 +43,58 @@
+ {% if farmed_blocks|length > 0 %} +
+

{{_('Farmed Blocks')}}

+ + + + + + + + + + + {% for farmed_block in farmed_blocks %} + + + + + + + {% endfor %} + +
{{_('Worker')}}{{_('Plot File')}}{{_('Farmed Block')}}{{_('Farmed At')}}
{{farmed_block.hostname}}{{farmed_block.plot_files}}{{farmed_block.farmed_block|alltheblocks_blocklink(farmed_block.blockchain)|safe}}{{farmed_block.created_at[:-7]}}
+
+ {% endif %} +
Loaded at: {{ global_config.now }}
- + + + {% endif %} {% endblock %} \ No newline at end of file diff --git a/web/templates/keys.html b/web/templates/keys.html index a8733d0f..6d2b999f 100644 --- a/web/templates/keys.html +++ b/web/templates/keys.html @@ -38,15 +38,15 @@ {% for key in keys.rows %}

-
{{ key.details}}
-


+
{{ key.details|safe}}
+

{{_('NOTE: Machinaris will never display your private key here.')}}

{{_('However, you may view it yourself by executing this from within the Docker container.')}}

{% if key.blockchain == 'mmx' %} - mmx wallet get seed + mmx wallet get seed {% else %} - chia keys show --show-mnemonic-seed + chia keys show --show-mnemonic-seed {% endif %}

@@ -56,7 +56,7 @@

{{_('Best Practices')}}

{% autoescape false %}
  • {{_('Machinaris uses an online wallet for farming. It is strongly recommended that you use a cold wallet for your payout instructions. Tutorial on the %(wiki_link_open)swiki%(wiki_link_close)s. Please add "Setup a Cold Wallet" to your To-Do list!', - wiki_link_open='', wiki_link_close='')}} + wiki_link_open='', wiki_link_close='')}}
  • {% endautoescape %} diff --git a/web/templates/plotting/jobs.html b/web/templates/plotting/jobs.html index 752bb614..04f49d92 100644 --- a/web/templates/plotting/jobs.html +++ b/web/templates/plotting/jobs.html @@ -185,7 +185,7 @@ - + diff --git a/web/templates/summary.html b/web/templates/summary.html index 33d5e9f5..2b733af1 100644 --- a/web/templates/summary.html +++ b/web/templates/summary.html @@ -63,6 +63,10 @@ button.active.nav-link { background-color: #3d3f42 !important } + td.icon_cell { + text-align: center; + padding:0px 5px 0px 0px; + } {% if summaries.rows|length > 0 %} @@ -84,7 +88,8 @@ {{_('EDV')}} {{local_cur_sym|upper}} - {{_('Logs')}} + + @@ -114,8 +119,12 @@ {{summary.wallet}} {{summary.edv}} {{summary.edv_fiat}} - - + + + + + {% endfor %} @@ -142,6 +151,14 @@
    {{_('Please allow at least 15 minutes for blockchains to get started.')}}{{_('Please allow at least 15 minutes for blockchains to get started.')}}{{_('Wallet Settings')}}
    {{_('Balance')}} {{local_cur_sym}} {{_('Updated At')}} + @@ -137,7 +138,10 @@ {{wallet.total_balance}} {{wallet.blockchain_symbol}} {{wallet.fiat_balance}} {{wallet.updated_at | datetimefilter}} - + + @@ -184,7 +188,7 @@
    {{_('You can also try running "chia wallet show" on your fullnode\'s in-cont $(document).ready(function () { $('#data').DataTable({ "pageLength": 25, - "columnDefs": [{ "orderable": false, targets: [7] }], + "columnDefs": [{ "orderable": false, targets: [7,8] }], {% if lang != 'en' %} "language": { "url": "{{ url_for('static', filename='3rd_party/i18n/datatables.'+lang+'.json') }}" @@ -220,5 +224,13 @@
    {{_('You can also try running "chia wallet show" on your fullnode\'s in-cont modalTitle.textContent = 'Wallet Settings - ' + blockchain }) }) + function PopupChart(chart_type, blockchain) { + var d = new Date(); + var height = 600; + var width = 900; + var top = (screen.height - height) / 2; + var left = (screen.width - width) / 2; + window.open("{{ url_for('index_chart') }}?type=" + chart_type + "&blockchain=" + blockchain, blockchain + ' - ' + chart_type, 'resizeable=yes,scrollbars=yes,height=' + height + ',width=' + width + ',top=' + top + ',left=' + left).focus(); + } {% endblock %} \ No newline at end of file diff --git a/web/templates/workers.html b/web/templates/workers.html index f0a31cf2..f2bcf8c3 100644 --- a/web/templates/workers.html +++ b/web/templates/workers.html @@ -79,7 +79,7 @@ {{worker.versions.machinaris}} - + {% if worker.mode == "fullnode" and worker.blockchain == "chia" %} {% endif %} From c67999b935cb1ed35a1969166234c4b4a632acf7 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Wed, 1 Jun 2022 20:52:24 -0600 Subject: [PATCH 18/79] Fix for index page error. --- scripts/forks/mmx_install.sh | 2 +- web/__init__.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/forks/mmx_install.sh b/scripts/forks/mmx_install.sh index bbf900b9..124ba8d9 100644 --- a/scripts/forks/mmx_install.sh +++ b/scripts/forks/mmx_install.sh @@ -5,7 +5,7 @@ MMX_BRANCH=$1 # On 2022-06-01 -HASH=92c909291d3d82f57b1680639b9b4f3c4c0ba05e +HASH=163b59956930a7d164c9c9450f74e160eb320717 if [ -z ${MMX_BRANCH} ]; then echo 'Skipping MMX install as not requested.' diff --git a/web/__init__.py b/web/__init__.py index 76d84ecd..cdfaeb7b 100644 --- a/web/__init__.py +++ b/web/__init__.py @@ -100,6 +100,12 @@ def launcheridshortener(value): app.jinja_env.filters['launcheridshortener'] = launcheridshortener +def alltheblocks_blockchainlink(blockchain): + alltheblocks_blockchain = globals.get_alltheblocks_name(blockchain) + return 'https://alltheblocks.net/{0}'.format(alltheblocks_blockchain) + +app.jinja_env.filters['alltheblocks_blockchainlink'] = alltheblocks_blockchainlink + def alltheblocks_blocklink(block, blockchain): alltheblocks_blockchain = globals.get_alltheblocks_name(blockchain) return '{1}'.format(alltheblocks_blockchain, block) From 82b002162841bd2bdc85e8fca7ffc2edd55fe7c1 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Thu, 2 Jun 2022 20:16:12 -0600 Subject: [PATCH 19/79] Fixes from MMX testnet6 testing. --- api/commands/mmx_cli.py | 2 +- api/commands/websvcs.py | 1 - api/models/mmx.py | 2 ++ api/rpc/chia.py | 52 ++++++++++++++++++++++++++++++++-- api/schedules/stats_blocks.py | 13 +++++---- common/config/globals.py | 4 +-- scripts/forks/mmx_install.sh | 4 +-- web/templates/index/index.html | 2 ++ 8 files changed, 66 insertions(+), 14 deletions(-) diff --git a/api/commands/mmx_cli.py b/api/commands/mmx_cli.py index b88518a0..a4b6c850 100644 --- a/api/commands/mmx_cli.py +++ b/api/commands/mmx_cli.py @@ -83,7 +83,7 @@ def save_config(config, blockchain): def load_wallet_show(blockchain): mmx_binary = globals.get_blockchain_binary(blockchain) - proc = Popen("({0} node info | grep Synced) && {0} wallet show".format(mmx_binary), stdout=PIPE, stderr=PIPE, shell=True) + proc = Popen("({0} node info | grep 'Synced: No') && {0} wallet show".format(mmx_binary), stdout=PIPE, stderr=PIPE, shell=True) try: outs, errs = proc.communicate(timeout=90) except TimeoutExpired: diff --git a/api/commands/websvcs.py b/api/commands/websvcs.py index fafe3ca8..062e2c99 100644 --- a/api/commands/websvcs.py +++ b/api/commands/websvcs.py @@ -202,4 +202,3 @@ def save_exchange_rates(debug=False): app.logger.error("Received {0} from {1}".format(resp.status_code, url)) except Exception as ex: app.logger.error("Failed to store exchange cache in {0} because {1}".format(EXCHANGE_RATES_CACHE_FILE, str(ex))) - \ No newline at end of file diff --git a/api/models/mmx.py b/api/models/mmx.py index 2236733a..f3f7a752 100644 --- a/api/models/mmx.py +++ b/api/models/mmx.py @@ -26,6 +26,8 @@ def __init__(self, cli_stdout, blockchain): elif line.startswith('Synced'): if 'Yes' == line.split(':')[1].strip(): self.calc_status('Farming') + elif 'No' == line.split(':')[1].strip(): + self.calc_status('Syncing') else: self.calc_status(line.strip()) if self.plots_size == "Total space: 0 TiB": diff --git a/api/rpc/chia.py b/api/rpc/chia.py index ed85f708..21b25aee 100644 --- a/api/rpc/chia.py +++ b/api/rpc/chia.py @@ -13,74 +13,84 @@ if importlib.util.find_spec("btcgreen"): from btcgreen.rpc.full_node_rpc_client import FullNodeRpcClient from btcgreen.rpc.farmer_rpc_client import FarmerRpcClient + from btcgreen.rpc.farmer_rpc_client import WalletRpcClient from btcgreen.util.default_root import DEFAULT_ROOT_PATH from btcgreen.util.ints import uint16 from btcgreen.util.config import load_config as load_fork_config elif importlib.util.find_spec("cactus"): from cactus.rpc.full_node_rpc_client import FullNodeRpcClient from cactus.rpc.farmer_rpc_client import FarmerRpcClient + from cactus.rpc.farmer_rpc_client import WalletRpcClient from cactus.util.default_root import DEFAULT_ROOT_PATH from cactus.util.ints import uint16 from cactus.util.config import load_config as load_fork_config elif importlib.util.find_spec("chia"): from chia.rpc.full_node_rpc_client import FullNodeRpcClient from chia.rpc.farmer_rpc_client import FarmerRpcClient + from chia.rpc.farmer_rpc_client import WalletRpcClient from chia.util.default_root import DEFAULT_ROOT_PATH from chia.util.ints import uint16 from chia.util.config import load_config as load_fork_config elif importlib.util.find_spec("chives"): from chives.rpc.full_node_rpc_client import FullNodeRpcClient from chives.rpc.farmer_rpc_client import FarmerRpcClient - from chives.rpc.harvester_rpc_client import HarvesterRpcClient + from chives.rpc.farmer_rpc_client import WalletRpcClient from chives.util.default_root import DEFAULT_ROOT_PATH from chives.util.ints import uint16 from chives.util.config import load_config as load_fork_config elif importlib.util.find_spec("cryptodoge"): from cryptodoge.rpc.full_node_rpc_client import FullNodeRpcClient from cryptodoge.rpc.farmer_rpc_client import FarmerRpcClient - from cryptodoge.rpc.harvester_rpc_client import HarvesterRpcClient + from cryptodoge.rpc.farmer_rpc_client import WalletRpcClient from cryptodoge.util.default_root import DEFAULT_ROOT_PATH from cryptodoge.util.ints import uint16 from cryptodoge.util.config import load_config as load_fork_config elif importlib.util.find_spec("flax"): from flax.rpc.full_node_rpc_client import FullNodeRpcClient from flax.rpc.farmer_rpc_client import FarmerRpcClient + from flax.rpc.farmer_rpc_client import WalletRpcClient from flax.util.default_root import DEFAULT_ROOT_PATH from flax.util.ints import uint16 from flax.util.config import load_config as load_fork_config elif importlib.util.find_spec("flora"): from flora.rpc.full_node_rpc_client import FullNodeRpcClient from flora.rpc.farmer_rpc_client import FarmerRpcClient + from flora.rpc.farmer_rpc_client import WalletRpcClient from flora.util.default_root import DEFAULT_ROOT_PATH from flora.util.ints import uint16 from flora.util.config import load_config as load_fork_config elif importlib.util.find_spec("hddcoin"): from hddcoin.rpc.full_node_rpc_client import FullNodeRpcClient from hddcoin.rpc.farmer_rpc_client import FarmerRpcClient + from hddcoin.rpc.farmer_rpc_client import WalletRpcClient from hddcoin.util.default_root import DEFAULT_ROOT_PATH from hddcoin.util.ints import uint16 from hddcoin.util.config import load_config as load_fork_config elif importlib.util.find_spec("maize"): from maize.rpc.full_node_rpc_client import FullNodeRpcClient from maize.rpc.farmer_rpc_client import FarmerRpcClient + from maize.rpc.farmer_rpc_client import WalletRpcClient from maize.util.default_root import DEFAULT_ROOT_PATH from maize.util.ints import uint16 from maize.util.config import load_config as load_fork_config elif importlib.util.find_spec("shibgreen"): from shibgreen.rpc.full_node_rpc_client import FullNodeRpcClient from shibgreen.rpc.farmer_rpc_client import FarmerRpcClient + from shibgreen.rpc.farmer_rpc_client import WalletRpcClient from shibgreen.util.default_root import DEFAULT_ROOT_PATH from shibgreen.util.ints import uint16 from shibgreen.util.config import load_config as load_fork_config elif importlib.util.find_spec("stai"): from stai.rpc.full_node_rpc_client import FullNodeRpcClient from stai.rpc.farmer_rpc_client import FarmerRpcClient + from stai.rpc.farmer_rpc_client import WalletRpcClient from stai.util.default_root import DEFAULT_ROOT_PATH from stai.util.ints import uint16 from stai.util.config import load_config as load_fork_config elif importlib.util.find_spec("stor"): from stor.rpc.full_node_rpc_client import FullNodeRpcClient from stor.rpc.farmer_rpc_client import FarmerRpcClient + from stor.rpc.farmer_rpc_client import WalletRpcClient from stor.util.default_root import DEFAULT_ROOT_PATH from stor.util.ints import uint16 from stor.util.config import load_config as load_fork_config @@ -167,3 +177,41 @@ async def load_all_plots(): except Exception as ex: app.logger.info("Error getting plots via RPC: {0}".format(str(ex))) return all_plots + +# Used to load farmed blocks via RPC +def get_transactions(address): + farmed_blocks = asyncio.run(load_farmed_blocks()) + return farmed_blocks + +async def load_farmed_blocks(address): + farmed_blocks = [] + try: + config = load_fork_config(DEFAULT_ROOT_PATH, 'config.yaml') + wallet_rpc_port = config["wallet"]["rpc_port"] + wallet = await WalletRpcClient.create( + 'localhost', uint16(wallet_rpc_port), DEFAULT_ROOT_PATH, config + ) + result = await wallet.get_farm_block(address) + wallet.close() + await wallet.await_closed() + for harvester in result["harvesters"]: + # app.logger.info(harvester.keys()) Returns: ['connection', 'failed_to_open_filenames', 'no_key_filenames', 'plots'] + # app.logger.info(harvester['connection']) Returns: {'host': '192.168.1.100', 'node_id': '602eb9...90378', 'port': 62599} + host = harvester["connection"]["host"] + plots = harvester["plots"] + app.logger.info("Listing plots found {0} plots on {1}.".format(len(plots), host)) + for plot in plots: + all_plots.append({ + "hostname": host, + "type": "solo" if (plot["pool_contract_puzzle_hash"] is None) else "portable", + "plot_id": plot['plot_id'], + "file_size": plot['file_size'], # bytes + "filename": plot['filename'], # full path and name + "plot_public_key": plot['plot_public_key'], + "pool_contract_puzzle_hash": plot['pool_contract_puzzle_hash'], + "pool_public_key": plot['pool_public_key'], + }) + except Exception as ex: + app.logger.info("Error getting plots via RPC: {0}".format(str(ex))) + return all_plots + diff --git a/api/schedules/stats_blocks.py b/api/schedules/stats_blocks.py index 15710d31..db0ef6e9 100644 --- a/api/schedules/stats_blocks.py +++ b/api/schedules/stats_blocks.py @@ -24,12 +24,13 @@ def collect(): "Skipping block win stats collection as not farming on this Machinaris instance.") return #app.logger.info("Collecting stats about won blocks.") - for blockchain in globals.enabled_blockchains(): - if not blockchain == 'mmx': - blocks = log_parser.recent_farmed_blocks(blockchain) - store_locally(blockchain, blocks) - if not gc['is_controller']: - send_to_controller(blockchain, blocks) + blockchain = globals.enabled_blockchains()[0] + if blockchain == 'mmx': + return + blocks = log_parser.recent_farmed_blocks(blockchain) + store_locally(blockchain, blocks) + if not gc['is_controller']: + send_to_controller(blockchain, blocks) def store_locally(blockchain, blocks): hostname = utils.get_hostname() diff --git a/common/config/globals.py b/common/config/globals.py index 9a6abc17..f8974489 100644 --- a/common/config/globals.py +++ b/common/config/globals.py @@ -31,8 +31,8 @@ BLADEBIT_BINARY = '/usr/bin/bladebit' CHIADOG_PATH = '/chiadog' -MMX_NETWORK = 'testnet5' -MMX_CONFIG = 'testnet5' +MMX_NETWORK = 'testnet6' +MMX_CONFIG = 'testnet6' RELOAD_MINIMUM_DAYS = 1 # Don't run binaries for version again until this time expires diff --git a/scripts/forks/mmx_install.sh b/scripts/forks/mmx_install.sh index 124ba8d9..c53561bf 100644 --- a/scripts/forks/mmx_install.sh +++ b/scripts/forks/mmx_install.sh @@ -4,8 +4,8 @@ # MMX_BRANCH=$1 -# On 2022-06-01 -HASH=163b59956930a7d164c9c9450f74e160eb320717 +# On 2022-06-02 +HASH=f8ea5be1b2fb61160898d0164cad152da25f4c45 if [ -z ${MMX_BRANCH} ]; then echo 'Skipping MMX install as not requested.' diff --git a/web/templates/index/index.html b/web/templates/index/index.html index 88225e1e..faa3ea78 100644 --- a/web/templates/index/index.html +++ b/web/templates/index/index.html @@ -99,7 +99,9 @@
    {{ farms[blockchain].currency_symbol }} {{_('F
    + {% if blockchain != 'mmx' %} + {% endif %}

    Date: Thu, 2 Jun 2022 20:50:15 -0600 Subject: [PATCH 20/79] Start on effort calculation. --- api/gunicorn.conf.py | 4 +- api/rpc/chia.py | 77 ++++++++++++++++++----------------- api/schedules/stats_effort.py | 33 +++++++++++++++ 3 files changed, 75 insertions(+), 39 deletions(-) create mode 100644 api/schedules/stats_effort.py diff --git a/api/gunicorn.conf.py b/api/gunicorn.conf.py index d4a672a2..7e19bf0b 100644 --- a/api/gunicorn.conf.py +++ b/api/gunicorn.conf.py @@ -12,7 +12,7 @@ def on_starting(server): status_connections, status_keys, status_alerts, status_controller, \ status_plotnfts, status_pools, status_partials, status_drives, \ stats_blocks, stats_balances, stats_disk, stats_farm, nft_recover, plots_check, \ - log_rotate, db_backup, restart_stuck_farmer, geolocate_peers + log_rotate, db_backup, restart_stuck_farmer, geolocate_peers, stats_effort from common.config import globals from api.commands import websvcs @@ -78,7 +78,7 @@ def on_starting(server): scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='cron', minute=0) # Hourly # Testing only - #scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='interval', seconds=10) # Test immediately + #scheduler.add_job(func=stats_effort.calculate, name="stats_effort", trigger='interval', seconds=10) # Test immediately app.logger.debug("Starting background scheduler...") scheduler.start() diff --git a/api/rpc/chia.py b/api/rpc/chia.py index 21b25aee..ab438934 100644 --- a/api/rpc/chia.py +++ b/api/rpc/chia.py @@ -13,84 +13,84 @@ if importlib.util.find_spec("btcgreen"): from btcgreen.rpc.full_node_rpc_client import FullNodeRpcClient from btcgreen.rpc.farmer_rpc_client import FarmerRpcClient - from btcgreen.rpc.farmer_rpc_client import WalletRpcClient + from btcgreen.rpc.wallet_rpc_client import WalletRpcClient from btcgreen.util.default_root import DEFAULT_ROOT_PATH from btcgreen.util.ints import uint16 from btcgreen.util.config import load_config as load_fork_config elif importlib.util.find_spec("cactus"): from cactus.rpc.full_node_rpc_client import FullNodeRpcClient from cactus.rpc.farmer_rpc_client import FarmerRpcClient - from cactus.rpc.farmer_rpc_client import WalletRpcClient + from cactus.rpc.wallet_rpc_client import WalletRpcClient from cactus.util.default_root import DEFAULT_ROOT_PATH from cactus.util.ints import uint16 from cactus.util.config import load_config as load_fork_config elif importlib.util.find_spec("chia"): from chia.rpc.full_node_rpc_client import FullNodeRpcClient from chia.rpc.farmer_rpc_client import FarmerRpcClient - from chia.rpc.farmer_rpc_client import WalletRpcClient + from chia.rpc.wallet_rpc_client import WalletRpcClient from chia.util.default_root import DEFAULT_ROOT_PATH from chia.util.ints import uint16 from chia.util.config import load_config as load_fork_config elif importlib.util.find_spec("chives"): from chives.rpc.full_node_rpc_client import FullNodeRpcClient from chives.rpc.farmer_rpc_client import FarmerRpcClient - from chives.rpc.farmer_rpc_client import WalletRpcClient + from chives.rpc.wallet_rpc_client import WalletRpcClient from chives.util.default_root import DEFAULT_ROOT_PATH from chives.util.ints import uint16 from chives.util.config import load_config as load_fork_config elif importlib.util.find_spec("cryptodoge"): from cryptodoge.rpc.full_node_rpc_client import FullNodeRpcClient from cryptodoge.rpc.farmer_rpc_client import FarmerRpcClient - from cryptodoge.rpc.farmer_rpc_client import WalletRpcClient + from cryptodoge.rpc.wallet_rpc_client import WalletRpcClient from cryptodoge.util.default_root import DEFAULT_ROOT_PATH from cryptodoge.util.ints import uint16 from cryptodoge.util.config import load_config as load_fork_config elif importlib.util.find_spec("flax"): from flax.rpc.full_node_rpc_client import FullNodeRpcClient from flax.rpc.farmer_rpc_client import FarmerRpcClient - from flax.rpc.farmer_rpc_client import WalletRpcClient + from flax.rpc.wallet_rpc_client import WalletRpcClient from flax.util.default_root import DEFAULT_ROOT_PATH from flax.util.ints import uint16 from flax.util.config import load_config as load_fork_config elif importlib.util.find_spec("flora"): from flora.rpc.full_node_rpc_client import FullNodeRpcClient from flora.rpc.farmer_rpc_client import FarmerRpcClient - from flora.rpc.farmer_rpc_client import WalletRpcClient + from flora.rpc.wallet_rpc_client import WalletRpcClient from flora.util.default_root import DEFAULT_ROOT_PATH from flora.util.ints import uint16 from flora.util.config import load_config as load_fork_config elif importlib.util.find_spec("hddcoin"): from hddcoin.rpc.full_node_rpc_client import FullNodeRpcClient from hddcoin.rpc.farmer_rpc_client import FarmerRpcClient - from hddcoin.rpc.farmer_rpc_client import WalletRpcClient + from hddcoin.rpc.wallet_rpc_client import WalletRpcClient from hddcoin.util.default_root import DEFAULT_ROOT_PATH from hddcoin.util.ints import uint16 from hddcoin.util.config import load_config as load_fork_config elif importlib.util.find_spec("maize"): from maize.rpc.full_node_rpc_client import FullNodeRpcClient from maize.rpc.farmer_rpc_client import FarmerRpcClient - from maize.rpc.farmer_rpc_client import WalletRpcClient + from maize.rpc.wallet_rpc_client import WalletRpcClient from maize.util.default_root import DEFAULT_ROOT_PATH from maize.util.ints import uint16 from maize.util.config import load_config as load_fork_config elif importlib.util.find_spec("shibgreen"): from shibgreen.rpc.full_node_rpc_client import FullNodeRpcClient from shibgreen.rpc.farmer_rpc_client import FarmerRpcClient - from shibgreen.rpc.farmer_rpc_client import WalletRpcClient + from shibgreen.rpc.wallet_rpc_client import WalletRpcClient from shibgreen.util.default_root import DEFAULT_ROOT_PATH from shibgreen.util.ints import uint16 from shibgreen.util.config import load_config as load_fork_config elif importlib.util.find_spec("stai"): from stai.rpc.full_node_rpc_client import FullNodeRpcClient from stai.rpc.farmer_rpc_client import FarmerRpcClient - from stai.rpc.farmer_rpc_client import WalletRpcClient + from stai.rpc.wallet_rpc_client import WalletRpcClient from stai.util.default_root import DEFAULT_ROOT_PATH from stai.util.ints import uint16 from stai.util.config import load_config as load_fork_config elif importlib.util.find_spec("stor"): from stor.rpc.full_node_rpc_client import FullNodeRpcClient from stor.rpc.farmer_rpc_client import FarmerRpcClient - from stor.rpc.farmer_rpc_client import WalletRpcClient + from stor.rpc.wallet_rpc_client import WalletRpcClient from stor.util.default_root import DEFAULT_ROOT_PATH from stor.util.ints import uint16 from stor.util.config import load_config as load_fork_config @@ -178,40 +178,43 @@ async def load_all_plots(): app.logger.info("Error getting plots via RPC: {0}".format(str(ex))) return all_plots -# Used to load farmed blocks via RPC -def get_transactions(address): - farmed_blocks = asyncio.run(load_farmed_blocks()) - return farmed_blocks +def get_wallets(): + wallets = asyncio.run(load_wallets()) + return wallets -async def load_farmed_blocks(address): - farmed_blocks = [] +async def load_wallets(): + wallets = [] try: config = load_fork_config(DEFAULT_ROOT_PATH, 'config.yaml') wallet_rpc_port = config["wallet"]["rpc_port"] wallet = await WalletRpcClient.create( 'localhost', uint16(wallet_rpc_port), DEFAULT_ROOT_PATH, config ) - result = await wallet.get_farm_block(address) + result = await wallet.get_wallets() wallet.close() await wallet.await_closed() - for harvester in result["harvesters"]: - # app.logger.info(harvester.keys()) Returns: ['connection', 'failed_to_open_filenames', 'no_key_filenames', 'plots'] - # app.logger.info(harvester['connection']) Returns: {'host': '192.168.1.100', 'node_id': '602eb9...90378', 'port': 62599} - host = harvester["connection"]["host"] - plots = harvester["plots"] - app.logger.info("Listing plots found {0} plots on {1}.".format(len(plots), host)) - for plot in plots: - all_plots.append({ - "hostname": host, - "type": "solo" if (plot["pool_contract_puzzle_hash"] is None) else "portable", - "plot_id": plot['plot_id'], - "file_size": plot['file_size'], # bytes - "filename": plot['filename'], # full path and name - "plot_public_key": plot['plot_public_key'], - "pool_contract_puzzle_hash": plot['pool_contract_puzzle_hash'], - "pool_public_key": plot['pool_public_key'], - }) + print(result) except Exception as ex: app.logger.info("Error getting plots via RPC: {0}".format(str(ex))) - return all_plots + return wallets + +def get_transactions(wallet_id): + transactions = asyncio.run(load_transactions(wallet_id)) + return transactions + +async def load_transactions(wallet_id): + transactions = [] + try: + config = load_fork_config(DEFAULT_ROOT_PATH, 'config.yaml') + wallet_rpc_port = config["wallet"]["rpc_port"] + wallet = await WalletRpcClient.create( + 'localhost', uint16(wallet_rpc_port), DEFAULT_ROOT_PATH, config + ) + result = await wallet.get_transactions(wallet_id) + wallet.close() + await wallet.await_closed() + print(result) + except Exception as ex: + app.logger.info("Error getting plots via RPC: {0}".format(str(ex))) + return transactions diff --git a/api/schedules/stats_effort.py b/api/schedules/stats_effort.py new file mode 100644 index 00000000..17cb1faa --- /dev/null +++ b/api/schedules/stats_effort.py @@ -0,0 +1,33 @@ +# +# Calculates effort per blockchain +# + + +import datetime +import http +import json +import os +import requests +import socket +import sqlite3 +import traceback + +from flask import g + +from common.config import globals +from api.rpc import chia +from api import app, utils, db + +def calculate(): + with app.app_context(): + gc = globals.load() + current_datetime = datetime.datetime.now().strftime("%Y%m%d%H%M") + try: + wallets = chia.get_wallets() + for wallet in wallets: + print(wallet) + app.logger.info("Getting transactions in wallet #{0}: {1}".format(wallet['id'], wallet['name'])) + chia.get_transactions(wallet['id']) + except: + app.logger.info("Failed to calculate blockchain effort.") + app.logger.info(traceback.format_exc()) From 377457e7c53215957be10c5575be6fca345886f8 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Fri, 3 Jun 2022 16:43:51 -0600 Subject: [PATCH 21/79] Start testing upcoming Chia v1.4 in machinaris:develop stream only. --- .github/workflows/develop-chia.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/develop-chia.yaml b/.github/workflows/develop-chia.yaml index ab64cc88..82479afd 100644 --- a/.github/workflows/develop-chia.yaml +++ b/.github/workflows/develop-chia.yaml @@ -42,7 +42,7 @@ jobs: build-args: | "MACHINARIS_STREAM=develop" "CHIADOG_BRANCH=dev" - "CHIA_BRANCH=latest" + "CHIA_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris:develop ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris:develop From 03123dbded309d60eff88ebf28b2f703d3762f47 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Fri, 3 Jun 2022 16:44:26 -0600 Subject: [PATCH 22/79] Revert --- .github/workflows/develop-chia.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/develop-chia.yaml b/.github/workflows/develop-chia.yaml index 82479afd..ab64cc88 100644 --- a/.github/workflows/develop-chia.yaml +++ b/.github/workflows/develop-chia.yaml @@ -42,7 +42,7 @@ jobs: build-args: | "MACHINARIS_STREAM=develop" "CHIADOG_BRANCH=dev" - "CHIA_BRANCH=main" + "CHIA_BRANCH=latest" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris:develop ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris:develop From 3af894c8ea75586778b99d69418da5e2e61e8b1f Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Fri, 3 Jun 2022 16:54:02 -0600 Subject: [PATCH 23/79] Start testing upcoming Chia v1.4 in machinaris:develop stream only. --- .github/workflows/develop-chia.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/develop-chia.yaml b/.github/workflows/develop-chia.yaml index ab64cc88..82479afd 100644 --- a/.github/workflows/develop-chia.yaml +++ b/.github/workflows/develop-chia.yaml @@ -42,7 +42,7 @@ jobs: build-args: | "MACHINARIS_STREAM=develop" "CHIADOG_BRANCH=dev" - "CHIA_BRANCH=latest" + "CHIA_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris:develop ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris:develop From 3d1ec7a5c033d8e9b02784e51ec722813c1f8b34 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Fri, 3 Jun 2022 17:40:57 -0600 Subject: [PATCH 24/79] Chia prompt changed last month. #682 --- api/commands/chia_cli.py | 2 +- api/commands/pools_cli.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/commands/chia_cli.py b/api/commands/chia_cli.py index 0655a852..f74589de 100644 --- a/api/commands/chia_cli.py +++ b/api/commands/chia_cli.py @@ -77,7 +77,7 @@ def load_wallet_show(blockchain): child = pexpect.spawn("{0} wallet show".format(chia_binary)) wallet_index = 1 while True: - i = child.expect(["Wallet height:.*\r\n", "Choose wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) + i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "No online backup file found.*\r\n"], timeout=120) if i == 0: app.logger.debug("wallet show returned 'Wallet height...' so collecting details.") wallet_show += child.after.decode("utf-8") + child.before.decode("utf-8") + child.read().decode("utf-8") diff --git a/api/commands/pools_cli.py b/api/commands/pools_cli.py index f6f3d82f..99da0039 100644 --- a/api/commands/pools_cli.py +++ b/api/commands/pools_cli.py @@ -89,7 +89,7 @@ def load_plotnft_show(blockchain): child = pexpect.spawn("{0} plotnft show".format(chia_binary)) pool_wallet_id = 1 while True: - i = child.expect(["Wallet height:.*\r\n", "Choose wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) + i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "No online backup file found.*\r\n"], timeout=120) if i == 0: app.logger.debug("wallet show returned 'Wallet height...' so collecting details.") wallet_show += child.after.decode("utf-8") + child.before.decode("utf-8") + child.read().decode("utf-8") @@ -129,7 +129,7 @@ def process_pool_leave(blockchain, pool_wallet_id): child = pexpect.spawn(cmd) child.logfile = sys.stdout.buffer while True: - i = child.expect(["Choose wallet key:.*\r\n", pexpect.EOF]) + i = child.expect(["Wallet keys:.*\r\n", pexpect.EOF]) if i == 0: app.logger.info("plotnft got index prompt so selecting #{0}".format(pool_wallet_id)) child.sendline("{0}".format(pool_wallet_id)) @@ -173,7 +173,7 @@ def process_pool_join(blockchain, pool_url, pool_wallet_id): child = pexpect.spawn(cmd) child.logfile = sys.stdout.buffer while True: - i = child.expect(["Choose wallet key:.*\r\n", pexpect.EOF]) + i = child.expect(["Wallet keys:.*\r\n", pexpect.EOF]) if i == 0: app.logger.info("plotnft got index prompt so selecting #{0}".format(pool_wallet_id)) child.sendline("{0}".format(pool_wallet_id)) @@ -202,7 +202,7 @@ def process_self_pool(blockchain, pool_wallet_id): child = pexpect.spawn(cmd) child.logfile = sys.stdout.buffer while True: - i = child.expect(["Choose wallet key:.*\r\n", pexpect.EOF]) + i = child.expect(["Wallet keys:.*\r\n", pexpect.EOF]) if i == 0: app.logger.info("plotnft got index prompt so selecting #{0}".format(pool_wallet_id)) child.sendline("{0}".format(pool_wallet_id)) From ee96f10b0d8baaf421246914c99ce1b67e7ff580 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sat, 4 Jun 2022 19:57:27 -0600 Subject: [PATCH 25/79] Wallet chart on index page. --- common/utils/fiat.py | 2 +- web/actions/stats.py | 37 +++++++++++- web/routes.py | 1 + web/templates/blockchains.html | 21 +++++-- web/templates/index/index.html | 21 ++++++- web/templates/summary.html | 2 +- web/templates/views/index_script_block.js | 74 +++++++++++++++++++++++ 7 files changed, 146 insertions(+), 12 deletions(-) diff --git a/common/utils/fiat.py b/common/utils/fiat.py index 40a17e31..2def4325 100644 --- a/common/utils/fiat.py +++ b/common/utils/fiat.py @@ -23,7 +23,7 @@ def to_fiat(blockchain, coins): usd_per_coin = float(data[blockchain]) fiat_per_usd = get_fiat_exchange_to_usd() fiat_cur_sym = get_local_currency_symbol().lower() - if usd_per_coin and fiat_per_usd: + if usd_per_coin and fiat_per_usd and coins: #print("Converting {0} coins of {1} with {2}".format(coins, usd_per_coin, fiat_per_usd)) fiat_localized = format_currency(round(usd_per_coin * fiat_per_usd * coins, 2), '') return "{0} {1}".format(fiat_localized, fiat_cur_sym) diff --git a/web/actions/stats.py b/web/actions/stats.py index f4725ee0..152b8f4c 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -3,7 +3,6 @@ # import datetime -from decimal import ROUND_HALF_DOWN import sqlite3 from flask import g @@ -404,7 +403,7 @@ def load_farmed_blocks(blockchain): displayname = w.displayname except: app.logger.debug("Failed to find worker for hostname: {0}".format(ResourceWarning.hostname)) - displayname = ROUND_HALF_DOWN.hostname + displayname = hostname blocks.append({ 'hostname': displayname, 'blockchain': blockchain, @@ -413,4 +412,36 @@ def load_farmed_blocks(blockchain): 'plot_files': row.plot_files, }) app.logger.info(blocks) - return blocks \ No newline at end of file + return blocks + +def wallet_chart_data(farm_summary): + for blockchain in farm_summary.farms: + balances = load_wallet_balances(blockchain) + coins = load_farmed_coins(blockchain) + chart_data = { 'dates': [], 'balances': [], 'coins': []} + i = j = 0 + # First push thru wallet balances list + while i < len(balances['dates']): + balance_date = balances['dates'][i] + if j < len(coins['dates']): + coin_date = coins['dates'][j] + else: + coin_date = '2100-01-01' # far in future + if balance_date < coin_date: + chart_data['dates'].append(balance_date) + chart_data['balances'].append(converters.round_balance(balances['vals'][i])) + chart_data['coins'].append('null') # Javascript null + i += 1 + else: + chart_data['dates'].append(coin_date) + chart_data['coins'].append(converters.round_balance(coins['vals'][j])) + chart_data['balances'].append('null') # Javascript null + j += 1 + # Then add any remaining farmed coins + while j < len(coins['dates']): + chart_data['dates'].append(coins['dates'][j]) + chart_data['coins'].append(converters.round_balance(coins['vals'][j])) + chart_data['balances'].append('null') # Javascript null + j += 1 + #app.logger.info("{0} -> {1}".format(blockchain, chart_data)) + farm_summary.farms[blockchain]['wallets'] = chart_data diff --git a/web/routes.py b/web/routes.py index cb8767d7..c77f1d2c 100644 --- a/web/routes.py +++ b/web/routes.py @@ -78,6 +78,7 @@ def index(): chia.challenges_chart_data(farm_summary) p.partials_chart_data(farm_summary) stats.load_daily_diff(farm_summary) + stats.wallet_chart_data(farm_summary) warnings.check_warnings(request.args) return render_template('index/index.html', reload_seconds=120, farms=farm_summary.farms, \ plotting=plotting, workers=workers, global_config=gc, selected_blockchain=selected_blockchain) diff --git a/web/templates/blockchains.html b/web/templates/blockchains.html index 0f8557db..700fd587 100644 --- a/web/templates/blockchains.html +++ b/web/templates/blockchains.html @@ -17,6 +17,10 @@ button.active.nav-link { background-color: #3d3f42 !important } + td.icon_cell { + text-align: center; + padding:0px 5px 0px 0px; + }
    @@ -33,7 +37,8 @@ {{_('Peak Height')}} {{_('Peak Time')}} {{_('Updated At')}} - {{_('Logs')}} + + @@ -53,8 +58,16 @@ {{blockchain.peak_height}} {{blockchain.peak_time}} {{blockchain.updated_at | datetimefilter}} - - + {% + if blockchain == 'mmx' + %}{% + else + %}{% + endif + %} + + + {% endfor %} @@ -110,7 +123,7 @@
    {{_('Try running "chia show --state" on your farmers to verify.')}}
    "pageLength": 25, "columnDefs": [ { - targets: [5], "orderable": false, + targets: [5,6], "orderable": false, } ], {% if lang != 'en' %} diff --git a/web/templates/index/index.html b/web/templates/index/index.html index faa3ea78..02da6a44 100644 --- a/web/templates/index/index.html +++ b/web/templates/index/index.html @@ -99,9 +99,7 @@
    {{ farms[blockchain].currency_symbol }} {{_('F

    - {% if blockchain != 'mmx' %} - - {% endif %} +

    {{ blockchain|capitalize }} {{_('Netspace')}}<

    + {% if farms[blockchain].wallets.dates|length > 0 %} +
    +
    +
    +
    + + + +
    +
    +
    {{blockchain|capitalize}} - {{_('Wallets')}}
    + +
    +
    + {% endif %} + {% if farms[blockchain].challenges.labels|length > 0 %}
    @@ -143,6 +157,7 @@
    {{blockchain|capitalize}} - {{_('Partial Proof
    {% endif %} +
    {% endfor %}
    diff --git a/web/templates/summary.html b/web/templates/summary.html index 2b733af1..53141bde 100644 --- a/web/templates/summary.html +++ b/web/templates/summary.html @@ -123,7 +123,7 @@ href="#" title="{{_('Chart Wallet')}}" onclick='PopupChart("wallet_balances","{{ summary.blockchain }}");return false;'> - + diff --git a/web/templates/views/index_script_block.js b/web/templates/views/index_script_block.js index 8f2ca5a0..32ad8777 100644 --- a/web/templates/views/index_script_block.js +++ b/web/templates/views/index_script_block.js @@ -40,6 +40,80 @@ $('[data-toggle="tooltip"]').tooltip(); {% for blockchain in farms %} +{% if farms[blockchain].wallets.dates|length > 0 %} +var ctx = document.getElementById('{{blockchain}}_wallets_chart'); +var myChart = new Chart(ctx, { + type: 'line', + data: { + labels: {{ farms[blockchain].wallets.dates | safe }}, + datasets: [ + { + label: "{{_('Farmed Coins')}}", + data: {{ farms[blockchain].wallets.coins | safe }}, + backgroundColor: color(0), + }, + { + label: "{{_('Total Balance')}}", + data: {{ farms[blockchain].wallets.balances | safe }}, + backgroundColor: color(1), + }, + ], + }, + borderWidth: 1, + options: { + plugins: { + legend: { + labels: { + color: "#c7c7c7", + font: { + size: 18 + } + } + } + }, + scales: { + x: { + type: 'time', + time: { + tooltipFormat: 'DD T' + }, + ticks: { + color: "#c7c7c7", + font: { + size: 16 + } + }, + title: { + display: true, + text: "{{_('Date')}}", + color: "#c7c7c7", + font: { + size: 18 + } + } + }, + y: { + ticks: { + color: "#c7c7c7", + font: { + size: 16 + } + }, + beginAtZero: true, + title: { + display: true, + text: "{{_('Coins')}}", + color: "#c7c7c7", + font: { + size: 18 + } + } + } + } + } + }); + {% endif %} + {% if farms[blockchain].challenges.labels|length > 0 %} var ctx = document.getElementById('{{blockchain}}_challenges_chart'); var myChart = new Chart(ctx, { From 5a42666ef5630f4ac8244310321f82d929beff1b Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sat, 4 Jun 2022 22:25:33 -0600 Subject: [PATCH 26/79] More charts! --- common/utils/converters.py | 2 +- web/actions/stats.py | 56 ++++++++++ web/routes.py | 9 ++ web/templates/index/chart_netspace.html | 126 ++++++++++++++++++++++ web/templates/index/chart_plot_count.html | 119 ++++++++++++++++++++ web/templates/index/chart_plots_size.html | 119 ++++++++++++++++++++ web/templates/index/index.html | 16 ++- web/templates/views/index_script_block.js | 6 ++ 8 files changed, 448 insertions(+), 5 deletions(-) create mode 100644 web/templates/index/chart_netspace.html create mode 100644 web/templates/index/chart_plot_count.html create mode 100644 web/templates/index/chart_plots_size.html diff --git a/common/utils/converters.py b/common/utils/converters.py index 3dcbde45..41570040 100644 --- a/common/utils/converters.py +++ b/common/utils/converters.py @@ -22,7 +22,7 @@ def sizeof_fmt(num, suffix='B'): def convert_size(size_bytes): if size_bytes == 0: - return "0B" + return "0 B" size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") i = int(math.floor(math.log(size_bytes, 1024))) p = math.pow(1024, i) diff --git a/web/actions/stats.py b/web/actions/stats.py index 152b8f4c..a45f81f1 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -393,6 +393,25 @@ def load_wallet_balances(blockchain): #app.logger.info(values) return { 'title': blockchain.capitalize() + ' - ' + _('Wallet Balances'), 'dates': dates, 'vals': values} +def load_netspace_size(blockchain): + dates = [] + values = [] + result = db.session.query(StatNetspaceSize).order_by(StatNetspaceSize.created_at.asc()).filter( + StatNetspaceSize.blockchain == blockchain).all() + for i in range(len(result)): + s = result[i] + converted_date = converters.convert_date_for_luxon(s.created_at) + if (i == 0) or (i % 24 == 0) or (i == len(result) - 1): + dates.append(converted_date) + values.append(s.value) + #app.logger.info(dates) + # TODO Handle data crossing single unit boundary (either up or down) + unit = converters.gib_to_fmt(max(values)).split()[1] + converted_values = list(map(lambda x: float(converters.gib_to_fmt(x).split()[0]), values)) + app.logger.info(converted_values) + return { 'title': blockchain.capitalize() + ' - ' + _('Netspace Size'), 'dates': dates, 'vals': converted_values, + 'y_axis_title': _('Size') + ' (' + unit + ')'} + def load_farmed_blocks(blockchain): blocks = [] result = db.session.query(StatFarmedBlocks).order_by(StatFarmedBlocks.created_at.desc()).filter( @@ -414,6 +433,43 @@ def load_farmed_blocks(blockchain): app.logger.info(blocks) return blocks +def load_plot_count(blockchain): + dates = [] + values = [] + result = db.session.query(StatPlotCount).order_by(StatPlotCount.created_at.asc()).filter( + StatPlotCount.blockchain == blockchain).all() + last_value = None + for i in range(len(result)): + s = result[i] + converted_date = converters.convert_date_for_luxon(s.created_at) + if (last_value != s.value) or (i % 24 == 0) or (i == len(result) - 1): + dates.append(converted_date) + values.append(s.value) + last_value = s.value + #app.logger.info(dates) + #app.logger.info(values) + return { 'title': blockchain.capitalize() + ' - ' + _('Plot Counts'), 'dates': dates, 'vals': values} + +def load_plots_size(blockchain): + dates = [] + values = [] + result = db.session.query(StatPlotsSize).order_by(StatPlotsSize.created_at.asc()).filter( + StatPlotsSize.blockchain == blockchain).all() + last_value = None + for i in range(len(result)): + s = result[i] + converted_date = converters.convert_date_for_luxon(s.created_at) + if (last_value != s.value) or (i % 24 == 0) or (i == len(result) - 1): + dates.append(converted_date) + values.append(s.value) + last_value = s.value + # TODO Handle data crossing single unit boundary (either up or down) + unit = converters.gib_to_fmt(max(values)).split()[1] + converted_values = list(map(lambda x: float(converters.gib_to_fmt(x).split()[0]), values)) + app.logger.info(converted_values) + return { 'title': blockchain.capitalize() + ' - ' + _('Plots Size'), 'dates': dates, 'vals': converted_values, + 'y_axis_title': _('Size') + ' (' + unit + ')'} + def wallet_chart_data(farm_summary): for blockchain in farm_summary.farms: balances = load_wallet_balances(blockchain) diff --git a/web/routes.py b/web/routes.py index c77f1d2c..c8a053a3 100644 --- a/web/routes.py +++ b/web/routes.py @@ -95,6 +95,15 @@ def index_chart(): chart_data = stats.load_farmed_coins(blockchain) farmed_blocks = stats.load_farmed_blocks(blockchain) return render_template('index/chart_farmed.html', reload_seconds=120, global_config=gc, chart_data=chart_data, farmed_blocks=farmed_blocks, lang=get_lang(request)) + elif chart_type == 'netspace_size': + chart_data = stats.load_netspace_size(blockchain) + return render_template('index/chart_netspace.html', reload_seconds=120, global_config=gc, chart_data=chart_data, lang=get_lang(request)) + elif chart_type == 'plot_count': + chart_data = stats.load_plot_count(blockchain) + return render_template('index/chart_plot_count.html', reload_seconds=120, global_config=gc, chart_data=chart_data, lang=get_lang(request)) + elif chart_type == 'plots_size': + chart_data = stats.load_plots_size(blockchain) + return render_template('index/chart_plots_size.html', reload_seconds=120, global_config=gc, chart_data=chart_data, lang=get_lang(request)) @app.route('/summary', methods=['GET', 'POST']) def summary(): diff --git a/web/templates/index/chart_netspace.html b/web/templates/index/chart_netspace.html new file mode 100644 index 00000000..c3b25b2b --- /dev/null +++ b/web/templates/index/chart_netspace.html @@ -0,0 +1,126 @@ + + + + + + + + + + + {{ chart_data.title }} + {% if reload_seconds %} + + {% endif %} + + + + + + + +
    + +
    + +
    Loaded at: {{ global_config.now }}
    + + + + + + + + + + diff --git a/web/templates/index/chart_plot_count.html b/web/templates/index/chart_plot_count.html new file mode 100644 index 00000000..4c1e9e12 --- /dev/null +++ b/web/templates/index/chart_plot_count.html @@ -0,0 +1,119 @@ + + + + + + + + + + {{ chart_data.title }} + {% if reload_seconds %} + + {% endif %} + + + + + + + +
    + +
    +
    Loaded at: {{ global_config.now }}
    + + + + + + + diff --git a/web/templates/index/chart_plots_size.html b/web/templates/index/chart_plots_size.html new file mode 100644 index 00000000..c375af54 --- /dev/null +++ b/web/templates/index/chart_plots_size.html @@ -0,0 +1,119 @@ + + + + + + + + + + {{ chart_data.title }} + {% if reload_seconds %} + + {% endif %} + + + + + + + +
    + +
    +
    Loaded at: {{ global_config.now }}
    + + + + + + + diff --git a/web/templates/index/index.html b/web/templates/index/index.html index 02da6a44..a38f1d0d 100644 --- a/web/templates/index/index.html +++ b/web/templates/index/index.html @@ -67,6 +67,7 @@
    {{_('Farming')}}:
    +

    {{farms[blockchain].plot_count }}

    {{_('Total Plots')}}
    @@ -74,6 +75,7 @@
    {{_('Total Plots')}}
    +

    {{farms[blockchain].plots_display_size }}

    {{_('Total Plots Size')}}
    @@ -99,7 +101,7 @@
    {{ farms[blockchain].currency_symbol }} {{_('F
    - +

    {{ blockchain|capitalize }} {{_('Netspace')}}<

    {{blockchain|capitalize}} - {{_('Wallets')}}
    - +
    + +
    {% endif %} @@ -137,7 +141,9 @@
    {{blockchain|capitalize}} - {{_('Wallets')}}
    {{blockchain|capitalize}} - {{_('Challenges from Harvesters')}}
    - +
    + +
    {% endif %} @@ -153,7 +159,9 @@
    {{blockchain|capitalize}} - {{_('Challenges fr
    {{blockchain|capitalize}} - {{_('Partial Proofs for Pools')}}
    - +
    + +
    {% endif %} diff --git a/web/templates/views/index_script_block.js b/web/templates/views/index_script_block.js index 32ad8777..2d7c812b 100644 --- a/web/templates/views/index_script_block.js +++ b/web/templates/views/index_script_block.js @@ -61,6 +61,8 @@ var myChart = new Chart(ctx, { }, borderWidth: 1, options: { + responsive: true, + maintainAspectRatio: false, plugins: { legend: { labels: { @@ -132,6 +134,8 @@ var myChart = new Chart(ctx, { }, borderWidth: 1, options: { + responsive: true, + maintainAspectRatio: false, plugins: { legend: { labels: { @@ -203,6 +207,8 @@ var myChart = new Chart(ctx, { }, borderWidth: 1, options: { + responsive: true, + maintainAspectRatio: false, plugins: { legend: { labels: { From e8cb0f95a3cd07e2aab0f7c2ce9a86ef29a9a3db Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 5 Jun 2022 11:08:32 -0600 Subject: [PATCH 27/79] Handle target_unit conversions. --- api/commands/chia_cli.py | 6 +++--- api/commands/pools_cli.py | 6 +++--- api/schedules/nft_recover.py | 2 +- common/utils/converters.py | 17 +++++++++++++++-- web/actions/stats.py | 13 ++++++------- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/api/commands/chia_cli.py b/api/commands/chia_cli.py index f74589de..0de0bb7f 100644 --- a/api/commands/chia_cli.py +++ b/api/commands/chia_cli.py @@ -77,16 +77,16 @@ def load_wallet_show(blockchain): child = pexpect.spawn("{0} wallet show".format(chia_binary)) wallet_index = 1 while True: - i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "No online backup file found.*\r\n"], timeout=120) + i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "Choose wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) if i == 0: app.logger.debug("wallet show returned 'Wallet height...' so collecting details.") wallet_show += child.after.decode("utf-8") + child.before.decode("utf-8") + child.read().decode("utf-8") break - elif i == 1: + elif i == 1 or i == 2: app.logger.debug("wallet show got index prompt so selecting #{0}".format(wallet_index)) child.sendline("{0}".format(wallet_index)) wallet_index += 1 - elif i == 2: + elif i == 3: child.sendline("S") else: app.logger.debug("pexpect returned {0}".format(i)) diff --git a/api/commands/pools_cli.py b/api/commands/pools_cli.py index 99da0039..1aaa08e9 100644 --- a/api/commands/pools_cli.py +++ b/api/commands/pools_cli.py @@ -89,16 +89,16 @@ def load_plotnft_show(blockchain): child = pexpect.spawn("{0} plotnft show".format(chia_binary)) pool_wallet_id = 1 while True: - i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "No online backup file found.*\r\n"], timeout=120) + i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "Choose wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) if i == 0: app.logger.debug("wallet show returned 'Wallet height...' so collecting details.") wallet_show += child.after.decode("utf-8") + child.before.decode("utf-8") + child.read().decode("utf-8") break - elif i == 1: + elif i == 1 or i == 2: app.logger.debug("wallet show got index prompt so selecting #{0}".format(pool_wallet_id)) child.sendline("{0}".format(pool_wallet_id)) pool_wallet_id += 1 - elif i == 2: + elif i == 3: child.sendline("S") else: app.logger.debug("pexpect returned {0}".format(i)) diff --git a/api/schedules/nft_recover.py b/api/schedules/nft_recover.py index 3baa6f97..e94b5bac 100644 --- a/api/schedules/nft_recover.py +++ b/api/schedules/nft_recover.py @@ -56,7 +56,7 @@ def execute(): 'pool_contract_address': pool_contract_address } try: - utils.send_worker_post(fullnode, '/rewards/', payload, debug=True) + utils.send_worker_post(fullnode, '/rewards/', payload, debug=False) except Exception as ex: app.logger.error("Failed to request reward recovery for {0} to {1}:{2} because {3}.".format( fullnode.blockchain, fullnode.hostname, fullnode.port, str(ex))) diff --git a/common/utils/converters.py b/common/utils/converters.py index 41570040..b2ef1ed5 100644 --- a/common/utils/converters.py +++ b/common/utils/converters.py @@ -20,6 +20,16 @@ def sizeof_fmt(num, suffix='B'): return "0" return value +def sizeof_fmt_unit(num, target_unit): + for unit in ['','KiB','MiB','GiB','TiB','PiB','EiB','ZiB']: + if target_unit == unit: + return "{0} {1}".format(flask_babel.format_decimal(num), unit) + num /= 1024.0 + value = "{0} {1}".format(flask_babel.format_decimal(num, 'YiB')) + if value == "0.000 B": + return "0" + return value + def convert_size(size_bytes): if size_bytes == 0: return "0 B" @@ -29,8 +39,11 @@ def convert_size(size_bytes): s = round(size_bytes / p, 2) return "%s %s" % (s, size_name[i]) -def gib_to_fmt(gibs): - return sizeof_fmt(gibs * 1024 * 1024 * 1024) +def gib_to_fmt(gibs, target_unit=None): + if target_unit: + return sizeof_fmt_unit(gibs * 1024 * 1024 * 1024, target_unit=target_unit) + else: + return sizeof_fmt(gibs * 1024 * 1024 * 1024) def str_to_gibs(str): if str == "Unknown": diff --git a/web/actions/stats.py b/web/actions/stats.py index a45f81f1..1f1e3f2e 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -405,10 +405,9 @@ def load_netspace_size(blockchain): dates.append(converted_date) values.append(s.value) #app.logger.info(dates) - # TODO Handle data crossing single unit boundary (either up or down) unit = converters.gib_to_fmt(max(values)).split()[1] - converted_values = list(map(lambda x: float(converters.gib_to_fmt(x).split()[0]), values)) - app.logger.info(converted_values) + converted_values = list(map(lambda x: float(converters.gib_to_fmt(x, target_unit=unit).split()[0]), values)) + #app.logger.info(converted_values) return { 'title': blockchain.capitalize() + ' - ' + _('Netspace Size'), 'dates': dates, 'vals': converted_values, 'y_axis_title': _('Size') + ' (' + unit + ')'} @@ -422,7 +421,7 @@ def load_farmed_blocks(blockchain): displayname = w.displayname except: app.logger.debug("Failed to find worker for hostname: {0}".format(ResourceWarning.hostname)) - displayname = hostname + displayname = row.hostname blocks.append({ 'hostname': displayname, 'blockchain': blockchain, @@ -463,10 +462,10 @@ def load_plots_size(blockchain): dates.append(converted_date) values.append(s.value) last_value = s.value - # TODO Handle data crossing single unit boundary (either up or down) + #app.logger.info(dates) unit = converters.gib_to_fmt(max(values)).split()[1] - converted_values = list(map(lambda x: float(converters.gib_to_fmt(x).split()[0]), values)) - app.logger.info(converted_values) + converted_values = list(map(lambda x: float(converters.gib_to_fmt(x, target_unit=unit).split()[0]), values)) + #app.logger.info(converted_values) return { 'title': blockchain.capitalize() + ' - ' + _('Plots Size'), 'dates': dates, 'vals': converted_values, 'y_axis_title': _('Size') + ' (' + unit + ')'} From ea98f691ff063f97bc1e1a799bb2a68aeadc9bb6 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 5 Jun 2022 14:11:10 -0600 Subject: [PATCH 28/79] Support old and new Chia CLI formats. --- api/commands/chia_cli.py | 6 +++--- api/commands/pools_cli.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/commands/chia_cli.py b/api/commands/chia_cli.py index 0de0bb7f..cd024113 100644 --- a/api/commands/chia_cli.py +++ b/api/commands/chia_cli.py @@ -77,16 +77,16 @@ def load_wallet_show(blockchain): child = pexpect.spawn("{0} wallet show".format(chia_binary)) wallet_index = 1 while True: - i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "Choose wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) + i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "Choose wallet key:.*\r\n", "Choose a wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) if i == 0: app.logger.debug("wallet show returned 'Wallet height...' so collecting details.") wallet_show += child.after.decode("utf-8") + child.before.decode("utf-8") + child.read().decode("utf-8") break - elif i == 1 or i == 2: + elif i == 1 or i == 2 or i == 3: app.logger.debug("wallet show got index prompt so selecting #{0}".format(wallet_index)) child.sendline("{0}".format(wallet_index)) wallet_index += 1 - elif i == 3: + elif i == 4: child.sendline("S") else: app.logger.debug("pexpect returned {0}".format(i)) diff --git a/api/commands/pools_cli.py b/api/commands/pools_cli.py index 1aaa08e9..a948ad43 100644 --- a/api/commands/pools_cli.py +++ b/api/commands/pools_cli.py @@ -89,16 +89,16 @@ def load_plotnft_show(blockchain): child = pexpect.spawn("{0} plotnft show".format(chia_binary)) pool_wallet_id = 1 while True: - i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "Choose wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) + i = child.expect(["Wallet height:.*\r\n", "Wallet keys:.*\r\n", "Choose wallet key:.*\r\n", "Choose a wallet key:.*\r\n", "No online backup file found.*\r\n"], timeout=120) if i == 0: app.logger.debug("wallet show returned 'Wallet height...' so collecting details.") wallet_show += child.after.decode("utf-8") + child.before.decode("utf-8") + child.read().decode("utf-8") break - elif i == 1 or i == 2: + elif i == 1 or i == 2 or i == 3: app.logger.debug("wallet show got index prompt so selecting #{0}".format(pool_wallet_id)) child.sendline("{0}".format(pool_wallet_id)) pool_wallet_id += 1 - elif i == 3: + elif i == 4: child.sendline("S") else: app.logger.debug("pexpect returned {0}".format(i)) From f41f3cc88f107dacbfbe11ce937e1b8e343aacd3 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 5 Jun 2022 16:06:06 -0600 Subject: [PATCH 29/79] Fixes in upstream Chiadog for Chia log changes. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 649c5346..fe7368ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. The format ## [0.7.3] - 2022-06-? - Wallets - chart each blockchain's farmed coins and wallet balances over the past month. + - [Chia](https://github.com/Chia-Network/chia-blockchain) - v1.3.6 pre-release for testing - [Cactus](https://github.com/Cactus-Network/cactus-blockchain) - v1.3.4, matches Chia 1.3.4, please run: `cactus db upgrade` - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.1, please run: `chives db upgrade` - [Cryptodoge](https://github.com/CryptoDoge-Network/cryptodoge) - v1.3.4, matches Chia 1.3.4, please run: `cryptodoge db upgrade` From 8b11e269e94357b1ff61064617854054d1d2a201 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Sun, 5 Jun 2022 20:42:49 -0600 Subject: [PATCH 30/79] Fix links on Blockchains page. Wiki link. --- web/templates/blockchains.html | 6 +++--- web/templates/index/index.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/web/templates/blockchains.html b/web/templates/blockchains.html index 700fd587..7d77b42c 100644 --- a/web/templates/blockchains.html +++ b/web/templates/blockchains.html @@ -59,10 +59,10 @@ {{blockchain.peak_time}} {{blockchain.updated_at | datetimefilter}} {% - if blockchain == 'mmx' - %}{% + if blockchain.blockchain == 'mmx' + %}{% else - %}{% + %}{% endif %} diff --git a/web/templates/index/index.html b/web/templates/index/index.html index a38f1d0d..3bd67cdb 100644 --- a/web/templates/index/index.html +++ b/web/templates/index/index.html @@ -117,7 +117,7 @@
    {{ blockchain|capitalize }} {{_('Netspace')}}<
    From 9f0903b59dc61ea98eb30b38e8441b483002e779 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Mon, 6 Jun 2022 14:09:20 -0600 Subject: [PATCH 31/79] Farmed block easter egg. --- api/schedules/stats_farm.py | 2 +- web/actions/stats.py | 22 +++++++++++++++++++++- web/static/mario_coin.gif | Bin 0 -> 46317 bytes web/templates/index/index.html | 3 ++- 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 web/static/mario_coin.gif diff --git a/api/schedules/stats_farm.py b/api/schedules/stats_farm.py index d905e2bd..39e6c7de 100644 --- a/api/schedules/stats_farm.py +++ b/api/schedules/stats_farm.py @@ -17,7 +17,7 @@ DELETE_OLD_STATS_AFTER_DAYS = 30 TABLES = [ stats.StatPlotCount, stats.StatPlotsSize, stats.StatTotalCoins, - stats.StatNetspaceSize, stats.StatTimeToWin ] + stats.StatNetspaceSize, stats.StatTimeToWin, stats.StatWalletBalances, ] def delete_old_stats(): try: diff --git a/web/actions/stats.py b/web/actions/stats.py index 1f1e3f2e..f1209b53 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -40,7 +40,8 @@ def load_daily_diff(farm_summary): since_str = since_date.strftime("%Y%m%d%H%M%S") summary['plot_count'] = plot_count_diff(since_str, blockchain) summary['plots_size'] = plots_size_diff(since_str, blockchain) - summary['total_coin'] = total_coin_diff(since_str, blockchain) + summary['total_coins'] = total_coin_diff(since_str, blockchain) + summary['wallet_balance'] = wallet_balance_diff(since_str, blockchain) summary['netspace_size'] = netspace_size_diff(since_str, blockchain) #app.logger.info("{0} -> {1}".format(blockchain, summary)) farm_summary.farms[blockchain]['daily_diff'] = summary @@ -88,11 +89,30 @@ def total_coin_diff(since, blockchain): #app.logger.info(before.value) if (latest.value - before.value) != 0: result = ("%+6g " % (latest.value - before.value)) + _('in last day.') + #app.logger.info("Total coins daily diff: {0}".format(result)) except Exception as ex: app.logger.debug("Failed to query for day diff of total_coin because {0}".format(str(ex))) #app.logger.info("Result is: {0}".format(result)) return result +def wallet_balance_diff(since, blockchain): + result = '' + try: + latest = db.session.query(StatWalletBalances).filter(StatWalletBalances.blockchain==blockchain).order_by(StatWalletBalances.created_at.desc()).limit(1).first() + #if blockchain == 'cactus': + # app.logger.info(latest.value) + before = db.session.query(StatWalletBalances).filter(StatWalletBalances.blockchain==blockchain, StatWalletBalances.created_at <= since).order_by(StatWalletBalances.created_at.desc()).limit(1).first() + #if blockchain == 'cactus': + # app.logger.info(before.value) + if (latest.value - before.value) != 0: + result = ("%+6g " % (latest.value - before.value)) + _('in last day.') + #app.logger.info("Total coins daily diff: {0}".format(result)) + except Exception as ex: + app.logger.info("Failed to query for day diff of wallet_balances because {0}".format(str(ex))) + #if blockchain == 'cactus': + # app.logger.info("Result is: {0}".format(result)) + return result + def netspace_size_diff(since, blockchain): result = '' try: diff --git a/web/static/mario_coin.gif b/web/static/mario_coin.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba3ea9565229b80d854ce929360011282fadd7c3 GIT binary patch literal 46317 zcmeIbWl&sux9*E4XdDX?B)A2FYe<3yl8}TDoFuqIg1ftGBaK4~&@|GxyIXK~XxuH$ zB}?A5*52>FcURqW>g+nze5H%(+4LN9jAuN*|063eBP6V6gUNxpkMYM(syF$}C$du+ zs;hdJtLgTut1G%Q9DLmC-*WtV#jn?5V54qUPN8@@!Q$-a+$KSiW>2%qS{8`dT3J{e@kwA_mj?yo&nDE8$W*F zjE$uaPO%P;+!&w8n_gy|9a+GcT-kcGHoCC6efV&9et+rc;_gZM#=$B6VH=g;r>HfzwNT z(!{X{>8^7T#RG`Co|*TE%Orb&TxI!YPK&7Gj%KYZ0;`5_ELI2Mt3%C{q*gRnV00zG zRXVo(wJn~WWX5^?-Ev9_wjrKB|I?}bY^Bkc;v?`4%@dWnoCj6>YvTz(y4HLJLBkoK ziy|J4rqGv#n9wR2E=uwPy}nc+7n5r~d;VxR?)z(~` z>@Id0>ZaBHyf{5T&i2*Sp{}ludfIS2a7c~jJWuhWI7zgbl^$T-D{n}`f4sg5^uS|VOY`0y$4(Dm0sDrW-?KX@tl2&#ZlkL0$RzuSlcuaz_-5fSTKr=9KXg!m??VK?L00 zZ3f6_VzrQ87+d34V@-X@d}!bQ1kqPO!F!V-8UXEJc8=hMuxF0h+~gjj*k_}#CYc4KC;yT_B(?|2ZC-(OqVw>lzf1Y2BX=L%zKZjdz0y(P6M#|{t$ zoh}ePOZE@RuLh#sOGq&Vn4y4Px^uO z8w{S1bRt7?0?HW!Z=!^B5`DGjG&8sT3C7ZIJCippV_0KKPto1cGiqkQdK4(4nSlWi zdiIdA5fzkMPyZAv?z-~O2dk?#*4A{I`UznH-#>AH7kdzvC2$)1A@!~ME)Fdi>*&a*= zHm~sE!+MQYxMTUA(uwH@)H$}kNj<(VC4Lb2+If2@^=I;`-E9`W82G^WgUaA_HM}2jg}KL7GpUq{5_!GL%XD%ejn94=qhClR^|+<%~SXx zK+C@&T`-{nPVED0Y8i8#j6TDUISMfJl~T7ZSG`dZ>q{C^ukn`rW2wQeZ{w7Q=mp{< z;o*08_iQQM*~E{;M0RPhOZ9ro@vmJs_<;dh95|E@#~Tei;3rK`J-Vb%y%rNUame7xnLp7tq4e8^+>Fn9e z`H|%@?cvp_#oR5>4rDL?pzx^Zr1-4#0`arrDqt%h&NwB`qy9F5V(wOAlmBf7g=D#+ zg@=|z4Xn*VsED~TZ;B4{`(%S!@(#?)*;$A|ZABOEqn0JXAsrLW7#Gzfu4A z`8A$TZ@~B2LlWG?_ls}CM0;?G2*!885(L&v(AZo=j=y%`oxM!H2tRTpo1!UIsfv4R5^TOWL#-~jGn?#+y*mBTV{frNnoO;? zx?+FDKUz_CrrODKwL9}Q&|+Hn`D3cvz7hJVE&2#r#4q}Z9TbWO-Ws!uV6~Hv>`RrvW0)jO}A${%T4pV%d@7T#MGvdrCj!M-8x#E%|in~5V4+} zY;w+;ovtlnl4UW#3^M$YIKq~JwL2OIZg)LqGe+<#eEtp+31EfvR8Vq2;qaHp!j$D? z0sx%txKca6o|hR~(%ibr;nC#Fv`~7cU$q%qth$z;KS#;FUEUE_6&J9UGpS#`R0>fq zLbftnnjC^(&ejZd8d+3dE|_puPvdg%_}KNx#5H<8;fQN;e?}D7+*lz%+Tx-&72E1l z)-jUFF{5UZVdohV*I}J*7S|c!R887t{9S|>9A_fJ*ZrkKlP^y+dV;TqcJh+1SL^ZL z?$(g&yY&MG_}ATf6Fl;Ji)#L)yXq<&&*Q7H!33xvuDzD0lIT~9ntDU5@JdQ6oSA?! zw5i^jm5Ma6U!7M$NdnZ(Du5g|tEkx-+<3s?zhb)su<)Cd+$Y*T9~L-=RO3VF8N_%*E(A@4_^K@ zEcfw7 zC^Ej=`wb&s8F5!=>{l*#ocPaGs1TYSD4OkRx4FhosBqwMf6=#NH;l8Vp!}K~Bdmxb ze6Tl}J0dXoF0_yj(GSr>&`gg#o$m`K%!v)KLx5&#Ut-=0lPJw{lQ#b>?7^l`g9~w_Ndb{ z1hvOWqHMkAO{Tm#FMI*nN3P3HSmu3jgidu`@Ko~Xyhydxr2HP5jLrK#@)Md5xaDWK z5X5mek3N{kWR2e8$q37Q$n1FD7cU_v#A3L(9dmue3sPf7PuZ1R&&XG#6xz{m=sz*~ z5K4_NMXNG(0ONK8BeEma+=R1YUZ{XP5?=VRG9`Xt`}7!qW!0vSX$xodNcq$$obB=* zYs}Eas!OP#L~aCYc0aEiHzgGTR@Zpbm;o;1XHS2{SM; z%(CZI*vQR*i!g!@^gE1mL2&?sywpJ_BWTV!KG+W43pPpn=tTyF?cPC|W&>W)i-O_0 zl&0Cm9nxKl#Z~7fTZLf5Nk&q)05}a0Vp^@d~IoOpSv47W? z8*l-?(5gLWQY)-K$*451)1eQ^FTH69;wiv*J`Rf|5b!UEza#pJr;eD{elLpRU3F2y z17}U1b~-`fqGoFDlf5KXz6y9JC%Zpa>YXcxw3d?vB3SPOfC~~!VwLb|-*fgiCDpQo zTZMxYIa4KF;)nPBJN=tZE?Mkdlp)DqYOHb2Iyx+x#LiyCTid)JuDw{ zR)0x==@Lheg5g@pEaA@9SB)%g5PG|8LXb%(*o~wgO9Uc9%_I$XmJ!!wyo?o3p zoN(s#c&vy-=_Y*lHA-a)EZ`U|O``i_Jg%NPydIC$F78~9#|?RABDUSR?<2yQY$BZW|r#eT*hXZHhmgiR6b*GU=^QntDdtVL!>rp44 z&$2FPjtCEKbxFOrfw-@!YWZH8lW-kJ^N>gJg(Y#J{?k=dUVrPW2Sr5eGEt-LQ7q;u zuR3^1z2kWF@_XYcE~s6Ea)3kV&~2n85P!Kze@>IxQ-4Ph=#t}dc5WL1l$Bt z9RFGaVqQ(oP|BCyIx30&D6E@Jv+U0gRYhoiFL*Gfny*$YZ@SS^YQNK6%Xx*R%<5p( z5p0Ot^H@!FN-N?yoj}eB`TA$B0EWe34jXuF*9&2t4kD5MPlK`Jab;^1a~lO2`Dt#Z z@yAb7*R;EowhBud#*94sa-1dvpU>R)eHfp20kN6dHVfZ+HwI(7J0`kYO2S@svNfgU z*heBE2H6|yN~#Ofb{-_fS?B`3u0y#HZt2u}=w6Smxgn$cWZ;Chd6(PO!#&>1@6G%VRcqp#6VuvjxAgrzAKqu(e{JPv!M&MHNy zKzchT4lBZuG2xjV&x(Vo%G`21htIfyoo&$iW57FbVvfi6+Q8K~i|s@mpnWTAUWz1} z8Z*8!CBQH(aNm(7(LD}inB}e9$rK)jCDIT{K)+$^99r;*IWnEgX+1V&gPbkX@@`-@ zq)?g?5>^ZbEakuCy=jsU+z)~j=3%jeVNeCsP0ymjI53p3TY+t{nBfJxIeeJOh!d1- z0NE-_Ql4akAJ%-bKwQu%E>@_*gE>PsI@c_s4_4SVt7S(N&8o5H6tik`_7!(rR_Jef z7L(i*gSp^#8DcgPvm|pjXb+z7RN^acX4XA?c!|;c+@zYJjlns&sGKl?)hc*TD+G?k zcF@J^apw`0Z8cxj<#x};iY8yHSacV>*D439i+z=kq{Y8_qEr-4>=RVtt`I-=Z0Mup zG-TioZ^U7U+PmAwIE-Y(2Lsygh>r(9X>gW}G}*Z7P5k^|4ji(GCKhbB;a1D8<|}qt zLAcrDJIt|?)N;gQjD?;C1W8I|&p*+XNG*r@$X1svM|??r)|5<3eukUokK!MujInT< zPW_U0zHt<)eAo`@CpjYgYrZm#%!`s>6r7q1a9zPvdqG2p{aO*c2g}jdl^&&&tNEr0aC`v zlvh^Lc&=Z{FqHN!CA)gkbW$72aG-h-Jh-h9{f@BizS$G-LS_hld=!y=oTjQ9v81xu zt)kK{2roCDCLesIBbUAJam~=-S`QGnDup^+z`U%iXQ7wVPSCRO&9j})(?bU`W1r5L z_-F1q>Mq23v4@MgvL7V&U#R*sidS*X(+r5w^2mYp6?N*amh#d+Udd9LTH^D;os(%{?L{2zK; zoY6ucOU|_($5A$>hso1=U2wQ8uJt(Hkvz;Wv5f@GaG`T@%m_h|qQ*!$`ZI<|VS&h{ zXnC#<#t<24(V5SaQxnHq}e%3L;`8Q zN3Ms80yxt{8q5mf_n~A1yEj%ELx8QPY>610eM=^28!d67Ujt0Q=4Qdn~><*BAj6gGRK@(?lLWHRCThbEDJ+QR|M3u zo5Ql<7h4s3cf0aHEBlj$bpcqKh4tfi#f)=D=|c({arvqX>u<|W`8Hh=P|~*^uUycz z&2^gMwX2&D(RaK9OqsWM7Dz$6=#gD;44!E9gGz~RqP3o+eKV^Tv5yXh=mh=>Dn zm?|sASvVy!)YCjp!|q`}@XZi|AH%&EikP!s1Ru}eA#$_8enUX891>mH)z07R_J!~) zI!aQ$Vl}SV+h=9vFE(iTf)8iB((nQKVoS>s{4Q<6uu3 zz&TRqvuj$cbH|snOunh2!bT*V55ug9$l$3Gky9=yPd}-Q$=T6J?whV79~ULieyn`89=alu z!tZDYeSFV|JL$k`n=goPT@<*QFk=I_#U>0Y%PVV~2xaHUe-yiLa86*x3z=)Ld9>_F95IfSfZrBgMJ}S3*R_}Lj=rel{SFyQ`ZN?VCC#`{w@olY~ zi(;GVo)?d~NzVliRr+`*0W`ss-*`qtfWk64pAI($@5*;2xk8VPd*5nIx`~S&f0_H} zdsSOAS-h}Hoc>&vLyPBV!>#bkXjj|`|I(-LvtPBzY(MSEci7|6LaNSMcXl$|J0)yg zRJV~Dizzy;D65~QJs%%j}#)0Ud&melpfEi;vK8fd4cu>_0;a@fJrE9J$~Iy2Sx0>@RL8{UM$T_2P&3%Lm6##*Lt|L$6ry9@z#c0#Z5I$@$6 zL0b-&0~=c&+fCgKP+pFcH<+0tVgr(g!azbH85_^AiyPTY3!w0RBu@E0C6c6Zf~~1g zm<9D_6I8{efdnCVVNejyqu|ZroX_lLrL8JfTSe0Vo_vfcX^jR%t=~mM`Lcm?LFI%= zmuVH2gGWL6ZfzAu&GAZQa}AON=~arN!L+LDu9f1+$6HOZXvBteA?rvM39UhQ$vB!D z&Q&0=)^{PI+(nNh>1+ym8qZrgigPYEIyve#c-wBZxme%VdE;VBE-YAWOD1l~u}k&r zB*G-@<+Y^UCIED5D}Q}U>G@EeObzr04N|If$VzIubog*0q!jk0kLqCTTGT%rsmPcX zNV~&9j5+z$-IagJ)|-=a+A?#VpOUQoC&sKRaPNe|6S>7U533YMQU}g*a8G8e($gS@ zqb;?BF(VDlamqt1XM`*6dMKB##VcBf%;v4;SEdmxC7Ptt^lN)Areg0JY&!IY8E)0h zS|AFtn@Bu1Kiqijxz%-x+jh^N%R_7wK%nD#;Fd`wo>|?uesOe>jviL%&_J5 zdb?N&*ld5Ju+a5_GtJWEG6Q}kRT7*VE}4DKrvt~>t+~Rqa-$GR#{7A|ejwZ2)5k=2 zBM7(QCjD(}0%%$?hSm|~lN^0)lO;dIzWHv@3~R`((?7_Nooqd)6jp`5&l@AWoykz?dX=+|{6I=upp z6Hh(%zV4(!2h%pk*W0AP{-X-w@Y`uOJ2Y87^vv_=hxFzQryZ$x8z3}e;tAsPYV@`2 zyA_jqbxxdnv^!<3_J7J2?wo!8Zs$(v_`%25)hytJr&q{BKl2Frpf52LQR)fI_r1K6 zmE(-kNdRftH^5+EUix+I%O-){$bVBzSc<41s)9@7H8wT>B`o*#4-5_s{}>q^8=sgQ z!Je6&n_pO5#9UcfTHjb&T|@35w=j1PH@A*X=l0JoFD_3}r~yKjUFrs}4HEhidyDi2 zXOer;A?^LtEjIVK{oduFtTALmX}SHfSPHW`qFLU7H9O$hUGY3$I+Nv#b9$15Y&WI? z;WO<4lGJ!wLihCsykv2iej-YATEk`lE71hItna}R`F71BZ`kDu=^LW%6UIQ_6u%gt z{16U&A^l!GUdnDY$wOIZFTRh`Lq zH9sNruT45xnjH{+J(@iI&3<_HgTJBp%y-AJRsG!Dni)Iish#f!+cnd+uKhn=&N5R= zI-suR&mJIX?JyNiXulsg#>CrRZ&T;IZ_5a&ao<-pn)f9)$eZ`0vio=4+uB0#Z{6F| z5u?RWp_PBsy@V;a9IK4B*Via(pT@7z$zq@z3@WO^9d}d>C|<^?T6AQ`XuEZMy^j@R zeBHg(?n(n_FFjY148doZN%zX}nUiglrE+oXW-4+4?#Ju7iH-`ljVRnvpNuerNUvKs zYc3JPtf+lfoGc$z6PD~)iB8r`AlHOZYN`R)FwZxP%@Cwtu%4Tf1ejnYPFTQ)fK3+O zAd_HTY>=!*2dYO ztV@+`JIUBXV~ch}qRXNRR!g`8weN-)Q+nrEaXmisgK;zdRNv)h!2HO=LyvpU3ifby z1DV@273Iv_Y^6e#-~8a>0@ixRxhucL$ZM0i)iTH|r(?R;%A);sf!HT7vWWLct+l03?^Ch4$*oBIR&RM&_^uI0%=oMmriJ-zV8GlqOC_7O zi#C}!F3($df)#lIMT^_sThtgjRecqNTGd@Ogms?1ZH39z+db@smgRC{65D8@~=G;Cp;=I*@3>BS`n+3AE(ckd)_N4Ri^`i~A z5fmH{_An%pGCGDlE}k?Ia637L1ehl6k$KC>EzcS30Hwf#6~TXLQi$?vO{%)4wywV6 z&mz-|eZ9T9E;0j{!^4B4V}n0N#;3<8F=rMgCKp$F=T0_YcO7j+cI% z9WGy9?`PH*nXJ_7z4~_PsM2ohHF@2_^-8*Ku3Cc0`AnwTQAL?;;g6mNQOU!9D>CX- zWP3V_ZrlegC4#ovN)CdP%bNC9bj2yF9+k-TcPxq-grTj^HzHVHhA0<`ot(Y6Az(C~{<#UP`PcR;en|~(yu)@>hR~TQa;-}dKS!+1W&1|ctW=G0 zKdTAFWwsDGGhWV%&owBhJTqB^0ug@OBIl;YrSsdU5Tf0ZPoqY(*aeDJWm}Www#XT+ zNSIj@%r#e)y8OtprQr^3ZuOLnZFe8P?5fzb?f3rCmxjzWzlsd_BeS8{%$`;I@?&@R z8j0hx@%7NU8#CGt4t|D?e_A%I6Y1xEw`}~ThyPJzuJ!Q$k0K)>SO0sFd9wZNy2#ws z{SqeDSpFqk40V$+%#7%|xq3zg`Wi0Jwayr-B*D5I{8stw>us#BznZHkDd~9EM-9sf z8cySw3E7&@RsaSn9yvEm3WN=k?p1&CBDLw2&rMMtGiFY~y_9Draf`!WOZ1~5FeLId z0p%qHvMCs4d8!cPrI{;luw*1j1c4F(24~sH;UmWDX&g@#3_!7VY{uZ2m5z;E?Xom* zYHBKg6$$ruY;_bKhN z!?Y+`2-7gBSgCb-Ss8xJnj10=k7TYM>%6cC*~@vtU3;|Q%pG#p%F0<|dUpz1hI^32 zQ~z_YKfmFNbTV_}SB2{A7E=|fqQ(cdF3|jG?ai<48UQJH-0Rfj{F`iq5%5kX$mM>= z6QCGh2a_fnZwTYkSaF-j3KeJP6O>El0QVr|3})qIIVwL)21Khr|#tFheEmX*T&xfyN=S$zD#dVdbIvLn$njv5$v;AHD8$#x7b3&dmOL` z-TY2QBLMc+$rqZf5+FHVG=D8i;~hz=TkErO+e+JKmBd3^KjKaR$*&^QYt-}zr@FF) zpY|0elD3@0d+Xs`FJzN$ZAP@41N%y}r{SKYSZ@o1yGwf!AF%qM>jEY9kNR@|y1wB2 zX$jl;vxyP=?=~@}>Ps&ThoO6HT`CC8IC}z;q}JEPB%yGy;-=lMYgp6DA+RQSc5Fw{ z^@X*I7rDEyAG29t5OIJ-n7ngj6iI|bT(D6nAi)z59+Q~PpP80T0DJ?=@reaN@-qsv z^5MnGxzLL83XIyCsyc8}b3<`EqP4EGsJpQ=uWzurqkr^AbNyJ?MBDUm2rRpId46@a zXDxkYYcqA11Ml$Y_~i8L{NnQGAHy3gt-<@(@YW8aYsCD0JN~%^gZzp5b$uE5EE7uo z-0qTGDoZ|`_BA+0&L+Dnj_X5Xh_MY*PlSM_O*iPCeru}GJFIEeZ+WjHWVlI{L?W4o zFqIQ!ltg~8bX;%8O{P2l-FAE=`h$Nft_Z?VE5+V&CA&h5ilU2n&K)t7-( znQ14)m&iKrV+m@PrHz)Rd$jJ!)q6H`eZCAw)YA?J?W4?wh1EZ8PP%6W{ddGrwrBmT zvbpwJHYal%FGeA8eNG~KQ-4{)KG7KhZ4U9rQk`2`1k-GBc@dB7ZkdqL+23>eNasKn z6i?^)5HL#TL<=UPciyfUee{i4!T!;AR&~Jz7w!?nf-5JR5QFCvN;UfT5X?V^w^H*j z|GnWY?pG6&16l!?fg>A}tQyA^lE1YI8>To+(95T~%yby0#9gwkrM)FGF-rBN0p}$v zacr;%i;J-t-^Y4ya%~ACOTCmOf?MgyqnnL^p4@st1`tdL>Lvi`q~G(9&XFjePj1O%iA6 zfJG3bq`~ikgQTaEjk64zQI!u~Vlw4|Z}*CFRcywoTV`j?R23k$2InlRmlxQ;WxIDd z3L3!l(1J!HL89#@99fs$=5)4dSW7%Oy{OU4<&{-CeYB!Y$Lg^syriZTfYlZ^cMflP zQbmQ;9o6n~-Na0qVfH#&i4}vN^KHT!Uit%`7RVwmi~Am6Ondi>-qR`_Aivg}hH>Pk zvDy;22<+O}L(D;A288v}6If~H#}md?;sR3!UBm)}O@7o^pzr&xr5IfW5hvNKr_{Og z8hwgvGt;Rxg1N5GQTB68nMB*=xB+#Ej1fFMV0iRnc z(>_JUwsDEBl*HfO*(xt4x`0-%%2#aH23mayQdxAUt2Ghw2LA-uzYhhx)*OHIjz%)DTVh@#s4LhT8Ji1I z+hRM0TN@zNW}UFn>E!V)g`WF;f&VCQ7qUYK!YHM&25o>}b_k zHC0DqlNHViI;<=`$Rdl-XtX}-q!1QF(WT&M+_lCWUN(%BWp)!f6irlFZV|v^FMF?R z!&s8|^ixsuStem~l!W_T0w>txfehC0&ZTiaf}#7LQo(_2A4qM0@5fk>%?~36w&2gbPSm{d=y@8Oy5t(g51FWi<_E3fFWE+Jq%NsRTIF{ z2>Ki&J!7<*;;;f*O?5eTOo{wP&&r%;3Kw2V^5hlHiwaa9XNe0ppJ$r1m|q&nIiES!0O`-WMMs?D1&A* zsp)1>I}-}B3GWs_ZWi~;uy2(NtD0_=j{REEP1zy05Oa4m+RB%r9;#NX#W`D4ZUTxd zsy1s0xhqwAOm}MDO+hTH&bE<-6|XPZVGn58+Dmn0Q>@||SBeJHt zXQ)}!sH>M;)clZn%9@haTeGQY!^{(o!@kpRqs~-v-4l`CoA>VK$9{64MnBj68#rtifBv&*Shfl3Ir#2f|MyN7s}%ko$;nOW;ZHG| z`#m3X^X*#AOgE1w@3x6slYM(_b~5;ONlQ>t0pI-foHF4HAq9DA?edpF?l1P+zMpb_ z=!itEiVH7U$f52pCu-CRuNWAmM$N_=YMxIz+tP@v=?8>iucsu@h;GQQx>hzL3bjP1 zE4ZgbrwlK)s_GiKU8MI2u7X_}+qera_j?$w#P$csBwhEIeK;^U*G2fMFx1_bk9MDY z5AQvhzrw_Bn#x4}+|VaXy)llD(AmDo4<{BNJ+!9`CatZje)Nz& zSuSX9Po`&`4}PWyR9hW1w*~9; z{Net;wl}yL?=SyY)Ir78p>%#Oo!uaHYR5F9^6aL_qw@Oswpyh3D5SFfSJgfse#BqUs|iXczz3x+&MS&JdS_-ORrK_oeR0qdYT!;POwHF zK}eAJDCz;PV|p}&bVYg$waQs~EZt|}jJU@(jv4W+1??G8#8GFDBJTi%=@NM0tPFss zU`NK}XO+TP38Cqui`QlIm;1l-WH8N#^x9$ZoBKaR;995u<^Io#QT^5GO=T#v0QQ@V zbEmAZO!5-Locd^Ua)SDAgUcviLcp~I5D>hVz~nyG5*S%feJzX?(q1+oVO8hnn6P^{ zQHmTzt;!xyoKCI_XyK3ydwxNW!W(mnA>|}<%ozjG7l;-&XS0eGX?C27u^b3z<$4$) zclm+aLyO}5GNf6}_>8GpZ3T)gziMaWAvf_RuOh6jb|GRHhBIUet03ufHg6`Xd$ZR} z#@)?bd-E36Ud1REAx|^Ijs|ZLv*FZECr2T>P3PUFYSS*-T+;)XaewkYtwcD{w|<;k zN{0>hR9hC5qd73X$4dUYPZ{58@bEKy_-MsX|LGpA^r5IIXZ{$^Vl~HjbA}dt+*nb( zY*N3AsCc4!kdt$=X(Aso^P~@EJDrJgJs|Mfp>~+Zf_ao<$=JgM1?>?*r1i4$%{`15nB9xNIWq2yIfkJWrb8tDzpd~NCGvKj4f>o_N< z^TGNmcCn4R;?(UuoENVy_S-~ts*Add_qGmdRV7=Gh71c`NvGI%ex3k=Cx1RI_M7z< zy9KlKy&$fi^|>VM5BK?rG1tc?PO?U8GsSc|(W)vSjMdrWfmuQ^-@jL%$8#eNAlKF-!uPH{KMNlXwrvrAee8Vg8rZ?0XcjEGIV8q1u@xmMqQ^G>X%;QjJW?CxEA zC;rpm`lufB_rX=K3F9`MNV433-iyEoe5%#tD5*@@U^2;|_wCkM9Z^g#GhVG*Kkf?Q z(oqRvz4x^l!1H_|8DyKQ6e2-;OjH@cG=M1+$V6N@%-r^?nx!cGZtMQ%;5ryVu|Aa99&Ow zw4;(Q{7}e>;_+YAOuMJD6gdiOaKqDbD$@%^*p8r*ofp>{s<5vlsH%6ZrrN$^m!?eF z?=|<4$y$p2v_AUB;3_z6eLS-w))uV#+DUk4?3YpWb=@_~^wzVAtXJC|<#IN8bt6NB`5{x{~tokqs@|39T)i2x8uexlC}u`7uE`y*umqD4j~?yx||} zdp>CKzuY?N3*)^1ZR_Z`OrvhM{uoo!jWs7$FO1b7(ZH!g24Gf3@gm78?93qfo5`=i zRn^fj^*bKj@7@V~MxqVkJ6=qbEa}wb>YWdQWI9=J!<;aTvjUYxo@GBa@-)r?*lghB zCYz{BfdC6q8yPtQohFdDRv23vOy!&n3Z8KS7vyA!7#EaOQkv!0@)B$UeLthrkvY{l zosG~St|}y~Tmpj39VAsWBJB54Fe|Q8SKKNY;DY3Hj47~h<_6Iq^DCF&?0HqIer%Ri z{8@yS)h8%h$dgx+3~~TG|?|2wi)8sluv8fZ+7#g$lNfI z9+YP2DZx;b)LI>S6D)N!{93l>>By_3e$zCysNL)_K?e3GH+2NfACGInsd?*DCiDs? zK2)Y;Pfs|Bp8)mjdCF$>33b6U(KIyzbLI@F(9GRXn)K?R+Z&NQ|9Cic#mYd;7MI z&mPI6y4A!xEVq0P2&K49>(sk04ysk(0r`6A61ww`r@bY`PaZh{T}M}$wQ2^CNkGgW zTftYDm+Qqkbrv*OOq`&L&qnFW#<X-ZL zd=78OYCW(h1g=4oYpI@-$ml;y^?%z3uG@J0z7MS6^LPyu^Cnn6ySLV#`8*g;sx!uD zAm@!WTd2Z!whwu#g}goBBbLzu={m3P=eE$%T!W?zCB+ez$yC$XmHX`W7+Mwfvn%?L zlE3zW{{b{1Dqo)|iSIF>siH7jEdZAK)rwS_OjQaf%6h zqg$qRK*~MUT&MBQRE@cGLHAV3XM9-)5g9H|&Ob7E2ofYPc#2YvF?dO`ku!Qf7g1yM zkyVh>^W~cuWpv}*IAL^`H&9#lduu23IOG%9;c>9y#DkQ;ufI!a71T0jW$P2CWr`RlY2bv+kSJPIbX!cCmyW=bpyf!f$%5(~u(JiU zH^X_WW_f{!3%*u){YUn&AUlXlCq=8qvkms$0>VPDX%ps!}S9 zv<<_XW54}44!YMto$JEhPFFkyrsVPFkn5qG4Job_*_pDWmBKEL(;-r!6#s5{?4;6mM%(J6d>zqA{^1Yrt`SRdUFy;iQ`;@xal<4fj0w*6 zO_MykzG~?i=t2(ygX5CZW7g#cN^susVXxqVU2(+LG~HTd-jaDE;q7gLa0CEr+24l7 zzOhn7!g4mUOQd2wR>wkmB}-$@F}+ZdL!<-{PlH@XtzMK{I16zuFK zk=32=wO19m;NKA3sqSxOX8)N9er~yS6lU;Rx@>CEZEt_XfA(zq2caqI?C9LX7;h)( zjwH^3?b|x+6L%3-yt8n1*2^nXtZ5k@sSx=d9Ngq*Sc0(nN@^Gm@%!Y-+ow`DNG&Yg zqjeW~9G(%_-S(nb(p`8_{_Iv*zt7{Te~gUT*CmYwL;jEL;}K7pJbQ5YSWofN+|o0> zijeS%bZAcM)@h@)0DGxDc7@h)%>x({RaubCeO^#8jMB&GaQ!`R);m+*%KE$I_j&5s z?Tj8Q@xA6W0O-drRmnf>b^Sg^UEFshZ!P1_>S^ceAY|k366_Z0;rJ}vCo(KHBG4|E3oX3B;mklT?4sC6nhaE}WKl zTK^`k-oI%(`g?*u@6kZbpt2sj*`L0eD^ zEk~5z$N%+)e}70-T)$o1-`+5}+MhJ!Sn6*_062a6bp(LI-(LLJ)urDAkN$ae&j0S} z?&Y=(Y&+Ld^Efcv4wj{1G;ZYKu33!`R#FZB_*tO*r*O88$(TrMT&W>p_M}=a^>!Y2 zEzw};G5&=W^YHGa=O9VF=25L;ZZ){lO0lDQv(!$eknP$ zkKYJ!WC;}T!Sa>(i%PDQl|lrl0$yAF`z8K<$^rUI`+v`u_V@qjfAdR=Pw?j<7lRn& ze{KiNi3^$Pf^q>TkU7pN4!o@QM2l50`GTvx=ZTZ9Dm2pM+rwRn){cYoU7B8`vx}DP``6^dJaL>NRAV9)J1_dRh3YBK?^qNwHPK8ue zSxt^z1E@)@NK(r=$y=mibqgh7D4Wf#xUY zac37O-(=KJLKZ99D$5xtl~3%O&PIFUOfl%9^5;^m2T8A7qESyeTKTCXU0&Q9?0Bhn zhd?R{{JNQ(0pwOUhy5N+axQ5s%(F%Y@r0fS=wQ%88Z9dB{vm zL*)2j{Z3MBw7wGPag*8y&!e%i`}$8zTw6b+OcY95`)t|Ry-<&_vM$Xwu`@5PS=*Sv z5aZra)z#9g#C`Z4s$=U@OxcR{L$|I|j{A!?*s*x1H#M`D;!h#*kJ0;IJL79lN>7rV z=WM+<;f|Ji`QBW!JgrWu%i;cF&#IUpO_IlNjAmQv=X0yE$);fD{%O(Ojm04yZp&H> zr=#`pB==i7)h;_wByv_#{0fD-T0cTidf@mmr5S8q)^o zMUBrVst17#;*Ci0b0Rf**A0@L6&!M{SPD9rQok+SG)(eV$2Uq*s{N#%=Cy*K9SC_w zxo#O9m$2v;-;hO8@U!0#}vz% zV3h>wn5F_sJ=i@`lyfG$3hZYFAG`A~zsMfk2@M`iRo^IOF>qchrnS-dY{xn^L0>+t zT*YC}kN}~pTm(O4sMu1u;HstyddO8pUyfv`eYlatUH5RxiLsnS{bNDV4ap=P$0N#0 zsit;`YFIPD8!Bka9l<1P@Ttudcay0BkGAh3e!Ptp*44SSGgGiX+<|SV8(y9B`H@lg ze2>{&k0kb}4W8&1D>zJmFy+wlIZ_ioz{^1WbV!k`zvL!A*4#l80ll#Fh=#3J+Nj!z zQReXH@ci{r1Jh8u35=*3%rVQR8sHS0oT;FTgO1qFj7y=G_lyVa&-r^kWHZHcJd6e9 zcCND*_VY!|!X);~k`iHOl`%~QjuT1F&}W`KXAq3_jzkiSjb>1qWMZRUy0@`(R?ME zuSD~eXucB7S6&|yf#xgGd?lK%MDvwsz7ow>qWMZRUy0@`(R}6q&-1|0d?lK%MDvws zz7ow>{&g@Any*Cjm1w>a%~$@PIjRiJSN;(Vgyt*Jd?lK%MDvw@CKmriAfow7G+&8^ zg8x@T!DznnI<#mV%~zuNN;F@I<}1;BB|5(nonML0uSDlpqVp@!`IYGWN_2iDI=>Q~ zUy07IMCVtc^DEK$mFWCRbbh5D%R&I--_pnb7NdgBuSDlpqVp@!`IYGWN_2iDI=>Q~ zUy07IMCVtc^DEK$mFWD+A&3q-zY?8aiO#P?=U1ZhE7AFt==@4_ekBG+B*s6|c+vTl z==@4_ekD4;5}jX};0XwiNlfR@Ov@$!z5(U<{4bEw(0nDDuSDlpqVp@!`IYGWN|pb) U`IWf0egzn!^DF;-ex>OD1F>S?IsgCw literal 0 HcmV?d00001 diff --git a/web/templates/index/index.html b/web/templates/index/index.html index 3bd67cdb..583d591b 100644 --- a/web/templates/index/index.html +++ b/web/templates/index/index.html @@ -86,13 +86,14 @@
    {{_('Total Plots Size')}}
    - +

    {{farms[blockchain].wallet_balance }}

    {{ farms[blockchain].currency_symbol }} {{_('Balance')}}
    +

    Date: Mon, 6 Jun 2022 18:01:14 -0600 Subject: [PATCH 32/79] Fixes for charts. --- .github/workflows/test-btcgreen.yaml | 1 + .github/workflows/test-cactus.yaml | 1 + .github/workflows/test-chia.yaml | 1 + .github/workflows/test-chives.yaml | 1 + .github/workflows/test-cryptodoge.yaml | 1 + .github/workflows/test-flax.yaml | 1 + .github/workflows/test-flora.yaml | 1 + .github/workflows/test-hddcoin.yaml | 1 + .github/workflows/test-maize.yaml | 1 + .github/workflows/test-nchain.yaml | 1 + .github/workflows/test-shibgreen.yaml | 1 + .github/workflows/test-silicoin.yaml | 1 + .github/workflows/test-staicoin.yaml | 1 + .github/workflows/test-stor.yaml | 1 + api/gunicorn.conf.py | 1 + api/models/chia.py | 17 +++++------ scripts/madmax_setup.sh | 4 +-- web/actions/stats.py | 40 ++++++++++++++------------ web/templates/index/index.html | 2 +- 19 files changed, 48 insertions(+), 30 deletions(-) diff --git a/.github/workflows/test-btcgreen.yaml b/.github/workflows/test-btcgreen.yaml index ed5a0613..9f620071 100644 --- a/.github/workflows/test-btcgreen.yaml +++ b/.github/workflows/test-btcgreen.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "BTCGREEN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-btcgreen:test diff --git a/.github/workflows/test-cactus.yaml b/.github/workflows/test-cactus.yaml index 80503312..9fe4a7cb 100644 --- a/.github/workflows/test-cactus.yaml +++ b/.github/workflows/test-cactus.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "CACTUS_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-cactus:test diff --git a/.github/workflows/test-chia.yaml b/.github/workflows/test-chia.yaml index 53cd6fee..5e2f1398 100644 --- a/.github/workflows/test-chia.yaml +++ b/.github/workflows/test-chia.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "CHIA_BRANCH=latest" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris:test diff --git a/.github/workflows/test-chives.yaml b/.github/workflows/test-chives.yaml index c4a55756..65a746d8 100644 --- a/.github/workflows/test-chives.yaml +++ b/.github/workflows/test-chives.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "CHIVES_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-chives:test diff --git a/.github/workflows/test-cryptodoge.yaml b/.github/workflows/test-cryptodoge.yaml index b3456aec..4a61152b 100644 --- a/.github/workflows/test-cryptodoge.yaml +++ b/.github/workflows/test-cryptodoge.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "CRYPTODOGE_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-cryptodoge:test diff --git a/.github/workflows/test-flax.yaml b/.github/workflows/test-flax.yaml index c8889264..0192e6bd 100644 --- a/.github/workflows/test-flax.yaml +++ b/.github/workflows/test-flax.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "FLAX_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-flax:test diff --git a/.github/workflows/test-flora.yaml b/.github/workflows/test-flora.yaml index 4e447deb..7f1d1ade 100644 --- a/.github/workflows/test-flora.yaml +++ b/.github/workflows/test-flora.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "FLORA_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-flora:test diff --git a/.github/workflows/test-hddcoin.yaml b/.github/workflows/test-hddcoin.yaml index 8bd7d9ca..cde549b8 100644 --- a/.github/workflows/test-hddcoin.yaml +++ b/.github/workflows/test-hddcoin.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "HDDCOIN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-hddcoin:test diff --git a/.github/workflows/test-maize.yaml b/.github/workflows/test-maize.yaml index 0975021d..d962bfb4 100644 --- a/.github/workflows/test-maize.yaml +++ b/.github/workflows/test-maize.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "MAIZE_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-maize:test diff --git a/.github/workflows/test-nchain.yaml b/.github/workflows/test-nchain.yaml index 7b01482c..7b41a0f7 100644 --- a/.github/workflows/test-nchain.yaml +++ b/.github/workflows/test-nchain.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "NCHAIN_BRANCH=net9.dev" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-nchain:test diff --git a/.github/workflows/test-shibgreen.yaml b/.github/workflows/test-shibgreen.yaml index 33ec46f3..3f49f7cd 100644 --- a/.github/workflows/test-shibgreen.yaml +++ b/.github/workflows/test-shibgreen.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "SHIBGREEN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-shibgreen:test diff --git a/.github/workflows/test-silicoin.yaml b/.github/workflows/test-silicoin.yaml index 3d630fc5..c76b9532 100644 --- a/.github/workflows/test-silicoin.yaml +++ b/.github/workflows/test-silicoin.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "SILICOIN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-silicoin:test diff --git a/.github/workflows/test-staicoin.yaml b/.github/workflows/test-staicoin.yaml index d9b90ec3..6b85777a 100644 --- a/.github/workflows/test-staicoin.yaml +++ b/.github/workflows/test-staicoin.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "STAICOIN_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-staicoin:test diff --git a/.github/workflows/test-stor.yaml b/.github/workflows/test-stor.yaml index fbce9f3c..e0fe9475 100644 --- a/.github/workflows/test-stor.yaml +++ b/.github/workflows/test-stor.yaml @@ -41,6 +41,7 @@ jobs: push: true build-args: | "MACHINARIS_STREAM=test" + "CHIADOG_BRANCH=dev" "STOR_BRANCH=master" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris-stor:test diff --git a/api/gunicorn.conf.py b/api/gunicorn.conf.py index 7e19bf0b..519df518 100644 --- a/api/gunicorn.conf.py +++ b/api/gunicorn.conf.py @@ -78,6 +78,7 @@ def on_starting(server): scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='cron', minute=0) # Hourly # Testing only + #scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='interval', seconds=10) # Test immediately #scheduler.add_job(func=stats_effort.calculate, name="stats_effort", trigger='interval', seconds=10) # Test immediately app.logger.debug("Starting background scheduler...") diff --git a/api/models/chia.py b/api/models/chia.py index 64a76b78..f4f6ea6c 100644 --- a/api/models/chia.py +++ b/api/models/chia.py @@ -90,11 +90,14 @@ def __init__(self, wallets, cold_wallet_addresses={}): total_balance = float(hot_balance) + float(cold_balance) except: total_balance = hot_balance - self.rows.append({ - 'hostname': wallet.hostname, - 'blockchain': wallet.blockchain, - 'total_balance': total_balance, - 'updated_at': wallet.updated_at }) + if hot_balance: + self.rows.append({ + 'hostname': wallet.hostname, + 'blockchain': wallet.blockchain, + 'total_balance': total_balance, + 'updated_at': wallet.updated_at }) + else: + app.logger.info("Skipping blockchain {0}".format(wallet.blockchain)) def exclude_cat_wallets(self, wallet_details): details = [] @@ -116,9 +119,7 @@ def sum_chia_wallet_balance(self, hostname, blockchain, include_cold_balance=Tru rx = re.compile(numeric_const_pattern, re.VERBOSE) sum = 0 for wallet in self.wallets: - if not 'Sync status: Synced' in wallet.details: - raise Exception('{0} wallet is not synced, so balance is unknown.') - elif wallet.hostname == hostname and wallet.blockchain == blockchain: + if wallet.hostname == hostname and wallet.blockchain == blockchain and wallet.is_synced(): try: for balance in rx.findall(self.exclude_cat_wallets(wallet.details)): #app.logger.info("Found balance of {0} for for {1} - {2}".format(balance, diff --git a/scripts/madmax_setup.sh b/scripts/madmax_setup.sh index 43ea5ea0..f1427840 100644 --- a/scripts/madmax_setup.sh +++ b/scripts/madmax_setup.sh @@ -4,8 +4,8 @@ # See https://github.com/madMAx43v3r/chia-plotter # -# As of 2022-05-18 -HASH=514c51610e70991bfb8160782b12a08bd62259a1 +# As of 2022-06-06 +HASH=ced900e9ea72a5d0e5db785f34be37d98bcda6a9 MADMAX_BRANCH=master if [[ (${mode} == 'fullnode' || ${mode} =~ "plotter") && (${blockchains} == 'chia' || ${blockchains} == 'chives' || ${blockchains} == 'mmx') ]]; then diff --git a/web/actions/stats.py b/web/actions/stats.py index f1209b53..80fe9ddd 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -53,7 +53,7 @@ def plot_count_diff(since, blockchain): #app.logger.info(latest.value) before = db.session.query(StatPlotCount).filter(StatPlotCount.blockchain==blockchain, StatPlotCount.created_at <= since).order_by(StatPlotCount.created_at.desc()).limit(1).first() #app.logger.info(before.value) - if (latest.value - before.value) != 0: + if (latest and before) and (latest.value - before.value) != 0: result = ("%+0g " % (latest.value - before.value)) + _('in last day.') except Exception as ex: app.logger.debug("Failed to query for day diff of plot_count because {0}".format(str(ex))) @@ -67,14 +67,15 @@ def plots_size_diff(since, blockchain): #app.logger.info(latest.value) before = db.session.query(StatPlotsSize).filter(StatPlotsSize.blockchain==blockchain, StatPlotsSize.created_at <= since).order_by(StatPlotsSize.created_at.desc()).limit(1).first() #app.logger.info(before.value) - gibs = (latest.value - before.value) - fmtted = converters.gib_to_fmt(gibs) - if fmtted == "0 B": - result = "" - elif not fmtted.startswith('-'): - result = "+{0} in last day.".format(fmtted) - else: - result = fmtted + if (latest and before): + gibs = (latest.value - before.value) + fmtted = converters.gib_to_fmt(gibs) + if fmtted == "0 B": + result = "" + elif not fmtted.startswith('-'): + result = "+{0} in last day.".format(fmtted) + else: + result = fmtted except Exception as ex: app.logger.debug("Failed to query for day diff of plots_size because {0}".format(str(ex))) #app.logger.info("Result is: {0}".format(result)) @@ -87,7 +88,7 @@ def total_coin_diff(since, blockchain): #app.logger.info(latest.value) before = db.session.query(StatTotalCoins).filter(StatTotalCoins.blockchain==blockchain, StatTotalCoins.created_at <= since).order_by(StatTotalCoins.created_at.desc()).limit(1).first() #app.logger.info(before.value) - if (latest.value - before.value) != 0: + if (latest and before) and (latest.value - before.value) != 0: result = ("%+6g " % (latest.value - before.value)) + _('in last day.') #app.logger.info("Total coins daily diff: {0}".format(result)) except Exception as ex: @@ -104,7 +105,7 @@ def wallet_balance_diff(since, blockchain): before = db.session.query(StatWalletBalances).filter(StatWalletBalances.blockchain==blockchain, StatWalletBalances.created_at <= since).order_by(StatWalletBalances.created_at.desc()).limit(1).first() #if blockchain == 'cactus': # app.logger.info(before.value) - if (latest.value - before.value) != 0: + if (latest and before) and (latest.value - before.value) != 0: result = ("%+6g " % (latest.value - before.value)) + _('in last day.') #app.logger.info("Total coins daily diff: {0}".format(result)) except Exception as ex: @@ -120,14 +121,15 @@ def netspace_size_diff(since, blockchain): #app.logger.info(latest.value) before = db.session.query(StatNetspaceSize).filter(StatNetspaceSize.blockchain==blockchain, StatNetspaceSize.created_at <= since).order_by(StatNetspaceSize.created_at.desc()).limit(1).first() #app.logger.info(before.value) - gibs = (latest.value - before.value) - fmtted = converters.gib_to_fmt(gibs) - if fmtted == "0 B": - result = "" - elif not fmtted.startswith('-'): - result = ("+{0} ".format(fmtted)) + _('in last day.') - else: - result = ("{0} ".format(fmtted)) + _('in last day.') + if (latest and before): + gibs = (latest.value - before.value) + fmtted = converters.gib_to_fmt(gibs) + if fmtted == "0 B": + result = "" + elif not fmtted.startswith('-'): + result = ("+{0} ".format(fmtted)) + _('in last day.') + else: + result = ("{0} ".format(fmtted)) + _('in last day.') except Exception as ex: app.logger.debug("Failed to query for day diff of netspace_size because {0}".format(str(ex))) #app.logger.debug("Result is: {0}".format(result)) diff --git a/web/templates/index/index.html b/web/templates/index/index.html index 583d591b..90801732 100644 --- a/web/templates/index/index.html +++ b/web/templates/index/index.html @@ -93,7 +93,7 @@

    {{ farms[blockchain].currency_symbol }} {{_('B
    - +

    Date: Mon, 6 Jun 2022 19:22:22 -0600 Subject: [PATCH 33/79] Run Chia main on test branch now. --- .github/workflows/test-chia.yaml | 2 +- api/gunicorn.conf.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-chia.yaml b/.github/workflows/test-chia.yaml index 5e2f1398..2003cebd 100644 --- a/.github/workflows/test-chia.yaml +++ b/.github/workflows/test-chia.yaml @@ -42,7 +42,7 @@ jobs: build-args: | "MACHINARIS_STREAM=test" "CHIADOG_BRANCH=dev" - "CHIA_BRANCH=latest" + "CHIA_BRANCH=main" tags: | ${{ secrets.DOCKERHUB_USERNAME }}/machinaris:test ghcr.io/${{ secrets.DOCKERHUB_USERNAME }}/machinaris:test diff --git a/api/gunicorn.conf.py b/api/gunicorn.conf.py index 519df518..3f1f30d0 100644 --- a/api/gunicorn.conf.py +++ b/api/gunicorn.conf.py @@ -78,6 +78,7 @@ def on_starting(server): scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='cron', minute=0) # Hourly # Testing only + #scheduler.add_job(func=restart_stuck_farmer.execute, name="restart_farmer_if_stuck", trigger='interval', seconds=10) # Test immediately #scheduler.add_job(func=stats_balances.collect, name="stats_balances", trigger='interval', seconds=10) # Test immediately #scheduler.add_job(func=stats_effort.calculate, name="stats_effort", trigger='interval', seconds=10) # Test immediately From e74daf49013bba21daa9ace9e18127ca8e2e0ea8 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Mon, 6 Jun 2022 20:51:07 -0600 Subject: [PATCH 34/79] Extract messages. --- .../de_DE/LC_MESSAGES/messages.po | 2 +- .../fr_FR/LC_MESSAGES/messages.po | 2 +- .../it_IT/LC_MESSAGES/messages.po | 2 +- .../nl_NL/LC_MESSAGES/messages.po | 2 +- .../pt_PT/LC_MESSAGES/messages.po | 2 +- api/translations/zh/LC_MESSAGES/messages.po | 2 +- web/templates/index/chart_balances.html | 1 + .../de_DE/LC_MESSAGES/messages.po | 392 ++++++++++------- .../fr_FR/LC_MESSAGES/messages.po | 396 +++++++++++------- .../it_IT/LC_MESSAGES/messages.po | 395 ++++++++++------- .../nl_NL/LC_MESSAGES/messages.po | 396 +++++++++++------- .../pt_PT/LC_MESSAGES/messages.po | 396 +++++++++++------- web/translations/zh/LC_MESSAGES/messages.po | 387 ++++++++++------- 13 files changed, 1405 insertions(+), 970 deletions(-) diff --git a/api/translations/de_DE/LC_MESSAGES/messages.po b/api/translations/de_DE/LC_MESSAGES/messages.po index 0aa19d6c..9a81e82a 100644 --- a/api/translations/de_DE/LC_MESSAGES/messages.po +++ b/api/translations/de_DE/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: ApfelBirneKreis\n" "Language: de\n" diff --git a/api/translations/fr_FR/LC_MESSAGES/messages.po b/api/translations/fr_FR/LC_MESSAGES/messages.po index 59b29781..a63d5ee7 100644 --- a/api/translations/fr_FR/LC_MESSAGES/messages.po +++ b/api/translations/fr_FR/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: Guy Davis\n" "Language: fr\n" diff --git a/api/translations/it_IT/LC_MESSAGES/messages.po b/api/translations/it_IT/LC_MESSAGES/messages.po index 946ad856..7c5c6d4f 100644 --- a/api/translations/it_IT/LC_MESSAGES/messages.po +++ b/api/translations/it_IT/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: Fabrizio Cacicia\n" "Language: it\n" diff --git a/api/translations/nl_NL/LC_MESSAGES/messages.po b/api/translations/nl_NL/LC_MESSAGES/messages.po index 2dfb1d07..7c50daac 100644 --- a/api/translations/nl_NL/LC_MESSAGES/messages.po +++ b/api/translations/nl_NL/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris/issuesPOT-" "Creation-Date: 2022-03-13 10:30-0600\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-03-13 10:29-0600\n" "Last-Translator: Bernie Deprez\n" "Language: nl_NL\n" diff --git a/api/translations/pt_PT/LC_MESSAGES/messages.po b/api/translations/pt_PT/LC_MESSAGES/messages.po index bcdfd04f..cb303b8b 100644 --- a/api/translations/pt_PT/LC_MESSAGES/messages.po +++ b/api/translations/pt_PT/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-13 13:45-0700\n" "Last-Translator: Antonio Casqueiro\n" "Language: pt\n" diff --git a/api/translations/zh/LC_MESSAGES/messages.po b/api/translations/zh/LC_MESSAGES/messages.po index 2445242e..73e243c1 100644 --- a/api/translations/zh/LC_MESSAGES/messages.po +++ b/api/translations/zh/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: Guy Davis\n" "Language: zh\n" diff --git a/web/templates/index/chart_balances.html b/web/templates/index/chart_balances.html index b1177849..d45f265e 100644 --- a/web/templates/index/chart_balances.html +++ b/web/templates/index/chart_balances.html @@ -77,6 +77,7 @@ x: { type: 'time', time: { + unit: 'day', tooltipFormat: 'DD T' }, title: { diff --git a/web/translations/de_DE/LC_MESSAGES/messages.po b/web/translations/de_DE/LC_MESSAGES/messages.po index c940ae28..8c62ac10 100644 --- a/web/translations/de_DE/LC_MESSAGES/messages.po +++ b/web/translations/de_DE/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-13 13:45-0700\n" "Last-Translator: ApfelBirneKreisLanguage: de\n" "Language: de_DE\n" @@ -18,31 +18,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.1\n" -#: routes.py:90 routes.py:233 +#: routes.py:113 routes.py:256 msgid "Saved local currency setting." msgstr "Lokale Währungseinstellung gespeichert" -#: routes.py:110 +#: routes.py:133 msgid "Blockchain download" msgstr "Blockchain herunterladen" -#: routes.py:142 +#: routes.py:165 msgid "Unknown plotting form" msgstr "Unbekannte Plotting Configuration" -#: routes.py:192 +#: routes.py:215 msgid "Error! Please see logs." msgstr "FEHLER! Bitte prüfe die Logs" -#: routes.py:218 +#: routes.py:241 msgid "Unknown alerts form" msgstr "Unbekannte Alarm Configuration" -#: routes.py:238 +#: routes.py:261 msgid "Saved cold wallet addresses." msgstr "Cold Wallet Adressen gespeichert" -#: routes.py:306 +#: routes.py:329 msgid "" "Saved mapping settings. Please allow 10 minutes to generate location " "information for the map." @@ -50,11 +50,11 @@ msgstr "" "Kartendaten gespeichert. Bitte warte bis zu 10 min bis diekartendaten " "generiert wurden" -#: routes.py:314 +#: routes.py:337 msgid "Unknown form action" msgstr "Unbekannte Aktions konfiguration" -#: routes.py:420 +#: routes.py:443 #, python-format msgid "" "No worker at %(worker)s for blockchain %(blockchain)s. Please select " @@ -63,35 +63,35 @@ msgstr "" "Kein passender Worker für %(blockchain)s auf %(worker)s gefundenBitte " "andere Blockchain wählen" -#: routes.py:426 +#: routes.py:449 #, python-format msgid "" "For Alerts config, found no responding fullnode found for %(blockchain)s." " Please check your workers." msgstr "Keine Fullnode für %(blockchain)s Alerts gefundenBitte Worker überprüfen" -#: routes.py:431 +#: routes.py:454 #, python-format msgid "" "For Farming config, found no responding fullnode found for " "%(blockchain)s. Please check your workers." msgstr "Keine Fullnode für %(blockchain)s Farming gefundenBitte Worker überprüfen" -#: routes.py:438 +#: routes.py:461 #, python-format msgid "" "For Plotting config, found no responding fullnode found for " "%(blockchain)s. Please check your workers." msgstr "Keine Fullnode für %(blockchain)s Plotting gefundenBitte Worker überprüfen" -#: routes.py:443 +#: routes.py:466 #, python-format msgid "" "No responding fullnode found for %(blockchain)s. Please check your " "workers." msgstr "Keine Fullnode für %(blockchain)s gefundenBitte Worker überprüfen" -#: routes.py:462 +#: routes.py:485 msgid "Unsupported log type" msgstr "Nicht unterstützter Log Typ" @@ -120,7 +120,8 @@ msgid "Idle" msgstr "Untätig" #: actions/plotman.py:47 actions/plotman.py:48 models/chia.py:211 -#: models/plotman.py:67 templates/index.html:42 templates/index.html:52 +#: models/plotman.py:67 templates/index/index.html:42 +#: templates/index/index.html:52 msgid "Active" msgstr "Aktiv" @@ -128,19 +129,45 @@ msgstr "Aktiv" msgid "Suspended" msgstr "Beendet" -#: actions/stats.py:56 actions/stats.py:90 actions/stats.py:108 -#: actions/stats.py:110 +#: actions/stats.py:57 actions/stats.py:92 actions/stats.py:109 +#: actions/stats.py:130 actions/stats.py:132 msgid "in last day." msgstr "währen des letzten tags" -#: actions/stats.py:338 +#: actions/stats.py:360 msgid "secs" msgstr "Sekunden" -#: actions/stats.py:348 models/chia.py:251 +#: actions/stats.py:370 models/chia.py:251 msgid "hour" msgstr "Stunde" +#: actions/stats.py:399 templates/views/index_script_block.js:51 +msgid "Farmed Coins" +msgstr "" + +#: actions/stats.py:416 +#, fuzzy +msgid "Wallet Balances" +msgstr "Wallet Bilanz" + +#: actions/stats.py:433 templates/index/index.html:105 +msgid "Netspace Size" +msgstr "" + +#: actions/stats.py:434 actions/stats.py:492 +msgid "Size" +msgstr "" + +#: actions/stats.py:472 +msgid "Plot Counts" +msgstr "" + +#: actions/stats.py:491 templates/index/index.html:78 +#, fuzzy +msgid "Plots Size" +msgstr "Gesamte Plot Größe" + #: actions/warnings.py:56 msgid "Dismiss Warning" msgstr "Warnung entfernen" @@ -189,11 +216,11 @@ msgstr "" msgid "days" msgstr "Tage" -#: models/chia.py:213 templates/summary.html:100 templates/wallet.html:128 +#: models/chia.py:213 templates/summary.html:105 templates/wallet.html:129 msgid "Syncing" msgstr "Synchronisierung" -#: models/chia.py:215 templates/index.html:54 +#: models/chia.py:215 templates/index/index.html:54 msgid "Not available" msgstr "Nicht erreichbar" @@ -201,9 +228,10 @@ msgstr "Nicht erreichbar" msgid "Not synced" msgstr "Nicht Syncronisiert" -#: models/chia.py:220 templates/index.html:54 templates/plotting/jobs.html:114 -#: templates/plotting/workers.html:116 templates/summary.html:96 -#: templates/wallet.html:124 templates/worker.html:78 templates/workers.html:72 +#: models/chia.py:220 templates/index/index.html:54 +#: templates/plotting/jobs.html:114 templates/plotting/workers.html:116 +#: templates/summary.html:101 templates/wallet.html:125 +#: templates/worker.html:78 templates/workers.html:72 msgid "Offline" msgstr "Offline" @@ -264,16 +292,16 @@ msgid "Alerts: Recent Notifications" msgstr "Alerts: Kürzliche Nachrichten" #: templates/alerts.html:72 templates/drives.html:86 -#: templates/settings/alerts.html:36 templates/settings/farming.html:37 -#: templates/settings/plotting.html:37 templates/settings/tools.html:36 -#: templates/worker.html:14 +#: templates/index/chart_farmed.html:52 templates/settings/alerts.html:36 +#: templates/settings/farming.html:37 templates/settings/plotting.html:37 +#: templates/settings/tools.html:36 templates/worker.html:14 msgid "Worker" msgstr "Worker" -#: templates/alerts.html:73 templates/blockchains.html:31 +#: templates/alerts.html:73 templates/blockchains.html:35 #: templates/settings/alerts.html:45 templates/settings/farming.html:46 #: templates/settings/plotting.html:46 templates/settings/tools.html:45 -#: templates/summary.html:73 templates/wallet.html:108 templates/worker.html:47 +#: templates/summary.html:77 templates/wallet.html:108 templates/worker.html:47 #: templates/workers.html:43 msgid "Blockchain" msgstr "Blockchain" @@ -341,17 +369,17 @@ msgstr "Machinaris" msgid "Summary" msgstr "Zusammenfassung" -#: templates/base.html:38 templates/base.html:113 templates/index.html:41 +#: templates/base.html:38 templates/base.html:113 templates/index/index.html:41 #: templates/plotting/jobs.html:101 templates/settings/plotting.html:14 msgid "Plotting" msgstr "" -#: templates/base.html:44 templates/base.html:107 templates/index.html:50 +#: templates/base.html:44 templates/base.html:107 templates/index/index.html:50 #: templates/settings/farming.html:15 msgid "Farming" msgstr "" -#: templates/base.html:50 +#: templates/base.html:50 templates/index/index.html:126 msgid "Wallets" msgstr "" @@ -378,7 +406,7 @@ msgstr "" #: templates/base.html:86 templates/farming/plots.html:69 #: templates/farming/workers.html:28 templates/plotting/jobs.html:94 -#: templates/plotting/workers.html:96 templates/summary.html:77 +#: templates/plotting/workers.html:96 templates/summary.html:81 #: templates/workers.html:14 msgid "Workers" msgstr "" @@ -438,48 +466,52 @@ msgstr "" msgid "Plotman" msgstr "" -#: templates/blockchains.html:23 +#: templates/blockchains.html:27 msgid "Blockchain Summary" msgstr "Blockchain Zusammenfassung" -#: templates/blockchains.html:32 templates/drives.html:91 -#: templates/summary.html:74 templates/wallet.html:109 +#: templates/blockchains.html:36 templates/drives.html:91 +#: templates/summary.html:78 templates/wallet.html:109 msgid "Status" msgstr "" -#: templates/blockchains.html:33 +#: templates/blockchains.html:37 msgid "Peak Height" msgstr "" -#: templates/blockchains.html:34 +#: templates/blockchains.html:38 msgid "Peak Time" msgstr "" -#: templates/blockchains.html:35 templates/drives.html:93 +#: templates/blockchains.html:39 templates/drives.html:93 #: templates/wallet.html:114 msgid "Updated At" msgstr "" -#: templates/blockchains.html:36 templates/summary.html:87 -#: templates/workers.html:49 -msgid "Logs" +#: templates/blockchains.html:63 +msgid "View Blockchain Details" msgstr "" -#: templates/blockchains.html:66 +#: templates/blockchains.html:65 templates/blockchains.html:79 msgid "Blockchain Details" msgstr "" -#: templates/blockchains.html:91 +#: templates/blockchains.html:69 templates/summary.html:126 +#, fuzzy +msgid "View Blockchain Log" +msgstr "Blockchain herunterladen" + +#: templates/blockchains.html:104 msgid "No blockchains found from any farmers. Not added?" msgstr "" "Es konnten keine Blockchains gefunden werden. Wurden Blockchains " "hinzugefügt?" -#: templates/blockchains.html:92 +#: templates/blockchains.html:105 msgid "Try running \"chia show --state\" on your farmers to verify." msgstr "Versuche \"chia show --state\" " -#: templates/blockchains.html:106 templates/summary.html:143 +#: templates/blockchains.html:119 templates/summary.html:152 msgid "Fullnode Log for " msgstr "Fullnode Log für" @@ -650,46 +682,6 @@ msgstr "" "Für mehr, schau dir das Machinaris " "%(wiki_link_open)swiki%(wiki_link_close)s an" -#: templates/index.html:30 -msgid "Expected Time to Win" -msgstr "Erwartete TTW" - -#: templates/index.html:72 -msgid "Total Plots" -msgstr "Gesamte Plots" - -#: templates/index.html:79 -msgid "Total Plots Size" -msgstr "Gesamte Plot Größe" - -#: templates/index.html:89 templates/wallet.html:113 -msgid "Balance" -msgstr "Bilanz" - -#: templates/index.html:96 -msgid "Farmed" -msgstr "Erfarmt" - -#: templates/index.html:105 -msgid "Netspace" -msgstr "" - -#: templates/index.html:120 -msgid "Challenges from Harvesters" -msgstr "Challenges der Harvester" - -#: templates/index.html:136 -msgid "Partial Proofs for Pools" -msgstr "Partial Proofs der Pools" - -#: templates/farming/workers.html:80 templates/index.html:147 -msgid "Previous" -msgstr "Vorherige" - -#: templates/farming/workers.html:84 templates/index.html:151 -msgid "Next" -msgstr "Nächste" - #: templates/keys.html:43 msgid "NOTE: Machinaris will never display your private key here." msgstr "ACHTUNG: Machinaris wird hier nie deinen privaten Key anzeigen" @@ -849,50 +841,55 @@ msgstr "" msgid "Local Currency:" msgstr "Lokale Währung" -#: templates/summary.html:75 +#: templates/summary.html:79 msgid "Height" msgstr "Höhe" #: templates/farming/plots.html:66 templates/farming/workers.html:25 -#: templates/summary.html:76 +#: templates/summary.html:80 msgid "Plots" msgstr "" -#: templates/summary.html:78 +#: templates/summary.html:82 msgid "Max Resp." msgstr "Max. Antwortdauer" -#: templates/summary.html:79 +#: templates/summary.html:83 msgid "Partials" msgstr "" -#: templates/summary.html:80 +#: templates/summary.html:84 msgid "ETW" msgstr "" -#: templates/summary.html:82 +#: templates/summary.html:86 msgid "Wallet" msgstr "" -#: templates/summary.html:83 templates/summary.html:84 +#: templates/summary.html:87 templates/summary.html:88 msgid "EDV" msgstr "" -#: templates/summary.html:98 templates/wallet.html:126 +#: templates/summary.html:103 templates/wallet.html:127 msgid "Synced" msgstr "Synchronisiert" -#: templates/summary.html:102 templates/wallet.html:130 +#: templates/summary.html:107 templates/wallet.html:131 msgid "Not Synced" msgstr "Nicht Synchronisiert" -#: templates/summary.html:128 +#: templates/summary.html:123 templates/wallet.html:142 +#, fuzzy +msgid "Chart Wallet" +msgstr "Wallet editieren" + +#: templates/summary.html:137 msgid "No blockchains found from any farmers. Just starting up?" msgstr "" "Es konnte keine Blockchain gefunden werden. Wurde gerade erst neu " "gestartet?" -#: templates/summary.html:129 +#: templates/summary.html:138 msgid "Please allow at least 15 minutes for blockchains to get started." msgstr "Bitte warte 15 min damit die Blockchain statrten kann" @@ -908,7 +905,7 @@ msgstr "Cold Wallet Adresse:" msgid "Wallet Summary" msgstr "Wallet Zusammenfassung" -#: templates/wallet.html:110 +#: templates/index/index.html:89 templates/wallet.html:110 msgid "Wallet Balance" msgstr "Wallet Bilanz" @@ -916,19 +913,23 @@ msgstr "Wallet Bilanz" msgid "Cold Wallet Balance" msgstr "Cold Wallet Bilanz" -#: templates/wallet.html:112 +#: templates/views/index_script_block.js:56 templates/wallet.html:112 msgid "Total Balance" msgstr "Totale Bilanz" -#: templates/wallet.html:140 +#: templates/index/index.html:92 templates/wallet.html:113 +msgid "Balance" +msgstr "Bilanz" + +#: templates/wallet.html:144 msgid "Edit Wallet" msgstr "Wallet editieren" -#: templates/wallet.html:151 +#: templates/wallet.html:155 msgid "Wallet Details" msgstr "" -#: templates/wallet.html:175 +#: templates/wallet.html:179 msgid "" "No wallet status received. Perhaps just starting? Please allow at least" " 10 minutes to update." @@ -936,7 +937,7 @@ msgstr "" "Es wurde keine Wallet gefunden. Wurde gerade erst gestartet? Es kann bis " "zu 10 min dauern" -#: templates/wallet.html:176 +#: templates/wallet.html:180 msgid "" "You can also try running \"chia wallet show\" on your fullnode's in-" "container shell to verify." @@ -1022,45 +1023,45 @@ msgstr "" msgid "Disk Space Free (GB)" msgstr "" -#: templates/worker_launch.html:50 templates/worker_launch.html:640 -#: templates/worker_launch.html:669 +#: templates/worker_launch.html:50 templates/worker_launch.html:642 +#: templates/worker_launch.html:671 msgid "Host Path" msgstr "Host Pfad" -#: templates/worker_launch.html:55 templates/worker_launch.html:645 -#: templates/worker_launch.html:674 +#: templates/worker_launch.html:55 templates/worker_launch.html:647 +#: templates/worker_launch.html:676 msgid "Container Path" msgstr "Container Pfad" -#: templates/worker_launch.html:60 templates/worker_launch.html:650 -#: templates/worker_launch.html:679 +#: templates/worker_launch.html:60 templates/worker_launch.html:652 +#: templates/worker_launch.html:681 msgid "Used for:" msgstr "Benutzt für:" -#: templates/worker_launch.html:63 templates/worker_launch.html:653 -#: templates/worker_launch.html:682 +#: templates/worker_launch.html:63 templates/worker_launch.html:655 +#: templates/worker_launch.html:684 msgid "Final Plots" msgstr "Finale Plots" -#: templates/worker_launch.html:64 templates/worker_launch.html:654 -#: templates/worker_launch.html:683 +#: templates/worker_launch.html:64 templates/worker_launch.html:656 +#: templates/worker_launch.html:685 msgid "Plotting Temp" msgstr "" -#: templates/worker_launch.html:65 templates/worker_launch.html:655 -#: templates/worker_launch.html:684 +#: templates/worker_launch.html:65 templates/worker_launch.html:657 +#: templates/worker_launch.html:686 msgid "Other" msgstr "Andere" -#: templates/worker_launch.html:69 templates/worker_launch.html:659 +#: templates/worker_launch.html:69 templates/worker_launch.html:661 msgid "Location" msgstr "Ort" -#: templates/worker_launch.html:72 templates/worker_launch.html:662 +#: templates/worker_launch.html:72 templates/worker_launch.html:664 msgid "Local" msgstr "" -#: templates/worker_launch.html:73 templates/worker_launch.html:663 +#: templates/worker_launch.html:73 templates/worker_launch.html:665 msgid "Remote" msgstr "" @@ -1068,51 +1069,51 @@ msgstr "" msgid "Unknown blockchain fork of selected:" msgstr "Unbekannter Blockschain Fork der ausgewählten:" -#: templates/worker_launch.html:284 +#: templates/worker_launch.html:285 msgid "" "Missing worker hostname. Please provide a short name to identify your " "worker." msgstr "Der Worker Hostname fehlt. Bitte einen kurzen Namen vergeben" -#: templates/worker_launch.html:304 +#: templates/worker_launch.html:305 msgid "" "Invalid host path ending with colon. Try adding a slash to the end like " "this" msgstr "Der Host pfad endet mit einem Komma. Versuche es mit Slash wie hier" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Empty host path provided for volume at " msgstr "Leerer Host Pfad für Volumen " -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Please provide a host path." msgstr "Bitte Hostpfad angeben" -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Empty container path provided for volume at " msgstr "Leerer container Pfad für Volumen " -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Please provide a container path." msgstr "Bitte Containerpfad angeben" -#: templates/worker_launch.html:355 +#: templates/worker_launch.html:356 msgid "Neither Harvester or Plottter mode selected. Please choose one or both." msgstr "" "Weder Harvester noch Plotter Modus ausgewählt. Bitte einen oder beide " "wählen" -#: templates/worker_launch.html:361 +#: templates/worker_launch.html:362 msgid "" "Missing worker IP address. Please provide the IP the controller will " "connect to for commands." msgstr "Worker IP Adresse fehlt" -#: templates/worker_launch.html:411 +#: templates/worker_launch.html:413 msgid "Machinaris Worker - Launch Config" msgstr "Machinaris Worker - Configuration starten" -#: templates/worker_launch.html:412 +#: templates/worker_launch.html:414 msgid "" "Complete the form below to run new harvesters/plotters on other computers" " across your network. Save the generated docker-compose.yml file to a " @@ -1122,95 +1123,95 @@ msgstr "" "Um die Harvester/Plotter auf einem anderen System laufen zu lassen,bitte " "folgendes ausfüllen" -#: templates/worker_launch.html:416 +#: templates/worker_launch.html:418 msgid "Operating System" msgstr "Betriebssystem" -#: templates/worker_launch.html:422 +#: templates/worker_launch.html:424 msgid "Linux" msgstr "" -#: templates/worker_launch.html:429 +#: templates/worker_launch.html:431 msgid "Macintosh" msgstr "" -#: templates/worker_launch.html:436 +#: templates/worker_launch.html:438 msgid "Windows" msgstr "" -#: templates/worker_launch.html:442 +#: templates/worker_launch.html:444 msgid "Machinaris Mode" msgstr "Machinaris Modus" -#: templates/worker_launch.html:448 +#: templates/worker_launch.html:450 msgid "Harvester" msgstr "" -#: templates/worker_launch.html:455 +#: templates/worker_launch.html:457 msgid "Plotter" msgstr "" -#: templates/worker_launch.html:463 +#: templates/worker_launch.html:465 msgid "Farmer Public Key" msgstr "" -#: templates/worker_launch.html:468 +#: templates/worker_launch.html:470 msgid "Pool Public Key" msgstr "" -#: templates/worker_launch.html:473 +#: templates/worker_launch.html:475 msgid "Pool Contract Address" msgstr "" -#: templates/worker_launch.html:478 +#: templates/worker_launch.html:480 msgid "Plot on Startup" msgstr "" -#: templates/worker_launch.html:484 +#: templates/worker_launch.html:486 msgid "True" msgstr "" -#: templates/worker_launch.html:491 +#: templates/worker_launch.html:493 msgid "False" msgstr "" -#: templates/worker_launch.html:499 +#: templates/worker_launch.html:501 msgid "Controller IP Address" msgstr "" -#: templates/worker_launch.html:504 +#: templates/worker_launch.html:506 msgid "Controller API Port" msgstr "" -#: templates/worker_launch.html:511 +#: templates/worker_launch.html:513 msgid "Worker Hostname" msgstr "" -#: templates/worker_launch.html:516 +#: templates/worker_launch.html:518 msgid "Worker IP Address" msgstr "Worker IP Adresse" -#: templates/worker_launch.html:523 +#: templates/worker_launch.html:525 msgid "Blockchains to Farm" msgstr "Gefarmte Blockchains" -#: templates/worker_launch.html:636 +#: templates/worker_launch.html:638 msgid "Volume Mounts" msgstr "" -#: templates/worker_launch.html:693 +#: templates/worker_launch.html:695 msgid "Add New Volume" msgstr "Neues Volumen hinzufügen" -#: templates/worker_launch.html:695 +#: templates/worker_launch.html:697 msgid "Remove Last Volume" msgstr "Letztes Volumen entfernen" -#: templates/worker_launch.html:702 +#: templates/worker_launch.html:704 msgid "Copy" msgstr "Kopieren" -#: templates/worker_launch.html:706 +#: templates/worker_launch.html:708 msgid "Docker Compose" msgstr "" @@ -1226,6 +1227,10 @@ msgstr "Letzter Ping" msgid "Last Successful Ping" msgstr "Letzter erfolgreicher Ping" +#: templates/workers.html:49 +msgid "Logs" +msgstr "" + #: templates/workers.html:94 msgid "Prune Selected" msgstr "Entferne ausgewählte" @@ -1294,6 +1299,14 @@ msgstr "" "Bitte überprüfe ob der Container der entsprechenden Blockchain " "läuft.Überprüfe auch die Einstellung der Benachrichtigungen" +#: templates/farming/workers.html:80 templates/index/index.html:176 +msgid "Previous" +msgstr "Vorherige" + +#: templates/farming/workers.html:84 templates/index/index.html:180 +msgid "Next" +msgstr "Nächste" + #: templates/farming/workers.html:94 #, python-format msgid "" @@ -1303,6 +1316,69 @@ msgid "" "worker is reporting into the controller on the Workers page." msgstr "" +#: templates/index/chart_balances.html:85 templates/index/chart_farmed.html:131 +#: templates/index/chart_netspace.html:91 +#: templates/index/chart_plot_count.html:84 +#: templates/index/chart_plots_size.html:84 templates/plotting/jobs.html:285 +#: templates/views/index_script_block.js:90 +msgid "Date" +msgstr "" + +#: templates/index/chart_balances.html:102 +#: templates/index/chart_farmed.html:148 +#: templates/views/index_script_block.js:107 +msgid "Coins" +msgstr "" + +#: templates/index/chart_farmed.html:48 templates/index/index.html:97 +msgid "Farmed Blocks" +msgstr "" + +#: templates/index/chart_farmed.html:53 +msgid "Plot File" +msgstr "" + +#: templates/index/chart_farmed.html:54 +msgid "Farmed Block" +msgstr "" + +#: templates/index/chart_farmed.html:55 +#, fuzzy +msgid "Farmed At" +msgstr "Erfarmt" + +#: templates/index/chart_plot_count.html:101 templates/index/index.html:70 +msgid "Plot Count" +msgstr "" + +#: templates/index/index.html:30 +msgid "Expected Time to Win" +msgstr "Erwartete TTW" + +#: templates/index/index.html:73 +msgid "Total Plots" +msgstr "Gesamte Plots" + +#: templates/index/index.html:81 +msgid "Total Plots Size" +msgstr "Gesamte Plot Größe" + +#: templates/index/index.html:101 +msgid "Farmed" +msgstr "Erfarmt" + +#: templates/index/index.html:111 +msgid "Netspace" +msgstr "" + +#: templates/index/index.html:144 +msgid "Challenges from Harvesters" +msgstr "Challenges der Harvester" + +#: templates/index/index.html:162 +msgid "Partial Proofs for Pools" +msgstr "Partial Proofs der Pools" + #: templates/plotting/jobs.html:9 msgid "Confirm Kill" msgstr "Bestätige Abbruch" @@ -1396,10 +1472,6 @@ msgstr "ausgewählte wiederaufnehmen" msgid "Plotting Speed - k%(k_size)s Plots" msgstr "" -#: templates/plotting/jobs.html:285 -msgid "Date" -msgstr "" - #: templates/plotting/jobs.html:302 msgid "Time (minutes)" msgstr "" @@ -1455,7 +1527,7 @@ msgid "Archiving is disabled. See Settings | Plotting page." msgstr "Archivierung ist ausgeschaltet" #: templates/plotting/workers.html:256 -#: templates/views/index_script_block.js:152 +#: templates/views/index_script_block.js:232 msgid "Time - Last 24 Hours" msgstr "" @@ -1543,15 +1615,15 @@ msgstr "Speichern..." msgid "PlotNFT Log on " msgstr "PlotNFT Login" -#: templates/views/index_script_block.js:85 +#: templates/views/index_script_block.js:163 msgid "Time - Recent" msgstr "" -#: templates/views/index_script_block.js:102 +#: templates/views/index_script_block.js:180 msgid "Time Taken (seconds)" msgstr "" -#: templates/views/index_script_block.js:169 +#: templates/views/index_script_block.js:249 msgid "Partials Submitted" msgstr "" diff --git a/web/translations/fr_FR/LC_MESSAGES/messages.po b/web/translations/fr_FR/LC_MESSAGES/messages.po index b5c84544..1575d98f 100644 --- a/web/translations/fr_FR/LC_MESSAGES/messages.po +++ b/web/translations/fr_FR/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-13 13:45-0700\n" "Last-Translator: FULL NAME\n" "Language: fr\n" @@ -18,31 +18,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.1\n" -#: routes.py:90 routes.py:233 +#: routes.py:113 routes.py:256 msgid "Saved local currency setting." msgstr "Paramètre de devise locale enregistré." -#: routes.py:110 +#: routes.py:133 msgid "Blockchain download" msgstr "Télécharger le blockchain" -#: routes.py:142 +#: routes.py:165 msgid "Unknown plotting form" msgstr "Forme inconnue" -#: routes.py:192 +#: routes.py:215 msgid "Error! Please see logs." msgstr "Erreur! Veuillez consulter les journaux." -#: routes.py:218 +#: routes.py:241 msgid "Unknown alerts form" msgstr "Forme inconnue" -#: routes.py:238 +#: routes.py:261 msgid "Saved cold wallet addresses." msgstr "Adresses de portefeuille froid enregistrées." -#: routes.py:306 +#: routes.py:329 msgid "" "Saved mapping settings. Please allow 10 minutes to generate location " "information for the map." @@ -50,11 +50,11 @@ msgstr "" "Paramètres de cartographie enregistrés. Veuillez patienter 10 minutes " "pour générer l'emplacementinformations pour la carte." -#: routes.py:314 +#: routes.py:337 msgid "Unknown form action" msgstr "Action inconnue" -#: routes.py:420 +#: routes.py:443 #, python-format msgid "" "No worker at %(worker)s for blockchain %(blockchain)s. Please select " @@ -63,7 +63,7 @@ msgstr "" "Aucun travailleur %(worker)s pour la blockchain %(blockchain)s. Veuillez " "sélectionner une autre blockchain." -#: routes.py:426 +#: routes.py:449 #, python-format msgid "" "For Alerts config, found no responding fullnode found for %(blockchain)s." @@ -72,7 +72,7 @@ msgstr "" "Aucun fullnode répondant n'a été trouvé pour notifier %(blockchain)s. " "Veuillez vérifier vos travailleurs." -#: routes.py:431 +#: routes.py:454 #, python-format msgid "" "For Farming config, found no responding fullnode found for " @@ -81,7 +81,7 @@ msgstr "" "Aucun fullnode répondant n'a été trouvé pour cultiver %(blockchain)s. " "Veuillez vérifier vos travailleurs." -#: routes.py:438 +#: routes.py:461 #, python-format msgid "" "For Plotting config, found no responding fullnode found for " @@ -90,7 +90,7 @@ msgstr "" "Aucun fullnode répondant n'a été trouvé pour parceller %(blockchain)s. " "Veuillez vérifier vos travailleurs." -#: routes.py:443 +#: routes.py:466 #, python-format msgid "" "No responding fullnode found for %(blockchain)s. Please check your " @@ -99,7 +99,7 @@ msgstr "" "Aucun fullnode répondant n'a été trouvé pour %(blockchain)s. Veuillez " "vérifier vos travailleurs." -#: routes.py:462 +#: routes.py:485 msgid "Unsupported log type" msgstr "Type de journal non pris en charge" @@ -130,7 +130,8 @@ msgid "Idle" msgstr "Inactif" #: actions/plotman.py:47 actions/plotman.py:48 models/chia.py:211 -#: models/plotman.py:67 templates/index.html:42 templates/index.html:52 +#: models/plotman.py:67 templates/index/index.html:42 +#: templates/index/index.html:52 msgid "Active" msgstr "Sauvegarder" @@ -138,19 +139,46 @@ msgstr "Sauvegarder" msgid "Suspended" msgstr "Suspendu" -#: actions/stats.py:56 actions/stats.py:90 actions/stats.py:108 -#: actions/stats.py:110 +#: actions/stats.py:57 actions/stats.py:92 actions/stats.py:109 +#: actions/stats.py:130 actions/stats.py:132 msgid "in last day." msgstr "au dernier jour." -#: actions/stats.py:338 +#: actions/stats.py:360 msgid "secs" msgstr "secs" -#: actions/stats.py:348 models/chia.py:251 +#: actions/stats.py:370 models/chia.py:251 msgid "hour" msgstr "heure" +#: actions/stats.py:399 templates/views/index_script_block.js:51 +msgid "Farmed Coins" +msgstr "" + +#: actions/stats.py:416 +#, fuzzy +msgid "Wallet Balances" +msgstr "Solde du portefeuille" + +#: actions/stats.py:433 templates/index/index.html:105 +#, fuzzy +msgid "Netspace Size" +msgstr "Netspace" + +#: actions/stats.py:434 actions/stats.py:492 +msgid "Size" +msgstr "" + +#: actions/stats.py:472 +msgid "Plot Counts" +msgstr "" + +#: actions/stats.py:491 templates/index/index.html:78 +#, fuzzy +msgid "Plots Size" +msgstr "Taille totale des plots" + #: actions/warnings.py:56 msgid "Dismiss Warning" msgstr "Ignorer l'avertissement" @@ -201,11 +229,11 @@ msgstr "" msgid "days" msgstr "jours" -#: models/chia.py:213 templates/summary.html:100 templates/wallet.html:128 +#: models/chia.py:213 templates/summary.html:105 templates/wallet.html:129 msgid "Syncing" msgstr "Synchronisation" -#: models/chia.py:215 templates/index.html:54 +#: models/chia.py:215 templates/index/index.html:54 msgid "Not available" msgstr "Indisponible" @@ -213,9 +241,10 @@ msgstr "Indisponible" msgid "Not synced" msgstr "Non synchronisé" -#: models/chia.py:220 templates/index.html:54 templates/plotting/jobs.html:114 -#: templates/plotting/workers.html:116 templates/summary.html:96 -#: templates/wallet.html:124 templates/worker.html:78 templates/workers.html:72 +#: models/chia.py:220 templates/index/index.html:54 +#: templates/plotting/jobs.html:114 templates/plotting/workers.html:116 +#: templates/summary.html:101 templates/wallet.html:125 +#: templates/worker.html:78 templates/workers.html:72 msgid "Offline" msgstr "Hors ligne" @@ -276,16 +305,16 @@ msgid "Alerts: Recent Notifications" msgstr "Alertes: notifications récentes" #: templates/alerts.html:72 templates/drives.html:86 -#: templates/settings/alerts.html:36 templates/settings/farming.html:37 -#: templates/settings/plotting.html:37 templates/settings/tools.html:36 -#: templates/worker.html:14 +#: templates/index/chart_farmed.html:52 templates/settings/alerts.html:36 +#: templates/settings/farming.html:37 templates/settings/plotting.html:37 +#: templates/settings/tools.html:36 templates/worker.html:14 msgid "Worker" msgstr "Worker" -#: templates/alerts.html:73 templates/blockchains.html:31 +#: templates/alerts.html:73 templates/blockchains.html:35 #: templates/settings/alerts.html:45 templates/settings/farming.html:46 #: templates/settings/plotting.html:46 templates/settings/tools.html:45 -#: templates/summary.html:73 templates/wallet.html:108 templates/worker.html:47 +#: templates/summary.html:77 templates/wallet.html:108 templates/worker.html:47 #: templates/workers.html:43 msgid "Blockchain" msgstr "Blockchain" @@ -355,17 +384,17 @@ msgstr "Machinaris" msgid "Summary" msgstr "Résumé" -#: templates/base.html:38 templates/base.html:113 templates/index.html:41 +#: templates/base.html:38 templates/base.html:113 templates/index/index.html:41 #: templates/plotting/jobs.html:101 templates/settings/plotting.html:14 msgid "Plotting" msgstr "Plotting" -#: templates/base.html:44 templates/base.html:107 templates/index.html:50 +#: templates/base.html:44 templates/base.html:107 templates/index/index.html:50 #: templates/settings/farming.html:15 msgid "Farming" msgstr "Farming" -#: templates/base.html:50 +#: templates/base.html:50 templates/index/index.html:126 msgid "Wallets" msgstr "Portefeuilles" @@ -392,7 +421,7 @@ msgstr "Pools" #: templates/base.html:86 templates/farming/plots.html:69 #: templates/farming/workers.html:28 templates/plotting/jobs.html:94 -#: templates/plotting/workers.html:96 templates/summary.html:77 +#: templates/plotting/workers.html:96 templates/summary.html:81 #: templates/workers.html:14 msgid "Workers" msgstr "Workers" @@ -452,46 +481,51 @@ msgstr "Madmax" msgid "Plotman" msgstr "Plotman" -#: templates/blockchains.html:23 +#: templates/blockchains.html:27 msgid "Blockchain Summary" msgstr "Blockchain" -#: templates/blockchains.html:32 templates/drives.html:91 -#: templates/summary.html:74 templates/wallet.html:109 +#: templates/blockchains.html:36 templates/drives.html:91 +#: templates/summary.html:78 templates/wallet.html:109 msgid "Status" msgstr "Statut" -#: templates/blockchains.html:33 +#: templates/blockchains.html:37 msgid "Peak Height" msgstr "Hauteur maximale" -#: templates/blockchains.html:34 +#: templates/blockchains.html:38 msgid "Peak Time" msgstr "Heure de pointe" -#: templates/blockchains.html:35 templates/drives.html:93 +#: templates/blockchains.html:39 templates/drives.html:93 #: templates/wallet.html:114 msgid "Updated At" msgstr "Mis à jour à" -#: templates/blockchains.html:36 templates/summary.html:87 -#: templates/workers.html:49 -msgid "Logs" -msgstr "Journaux" +#: templates/blockchains.html:63 +#, fuzzy +msgid "View Blockchain Details" +msgstr "Détails de le blockchain" -#: templates/blockchains.html:66 +#: templates/blockchains.html:65 templates/blockchains.html:79 msgid "Blockchain Details" msgstr "Détails de le blockchain" -#: templates/blockchains.html:91 +#: templates/blockchains.html:69 templates/summary.html:126 +#, fuzzy +msgid "View Blockchain Log" +msgstr "Télécharger le blockchain" + +#: templates/blockchains.html:104 msgid "No blockchains found from any farmers. Not added?" msgstr "Aucune blockchain trouvée chez les farmers. Pas ajouté?" -#: templates/blockchains.html:92 +#: templates/blockchains.html:105 msgid "Try running \"chia show --state\" on your farmers to verify." msgstr "Essayez d'exécuter \"chia show --state\" sur vos farmers pour vérifier." -#: templates/blockchains.html:106 templates/summary.html:143 +#: templates/blockchains.html:119 templates/summary.html:152 msgid "Fullnode Log for " msgstr "" @@ -666,46 +700,6 @@ msgstr "" "Pour en savoir plus, consultez le " "%(wiki_link_open)swiki%(wiki_link_close)s Machinaris." -#: templates/index.html:30 -msgid "Expected Time to Win" -msgstr "Temps prévu pour gagner" - -#: templates/index.html:72 -msgid "Total Plots" -msgstr "Plots totales" - -#: templates/index.html:79 -msgid "Total Plots Size" -msgstr "Taille totale des plots" - -#: templates/index.html:89 templates/wallet.html:113 -msgid "Balance" -msgstr "Total" - -#: templates/index.html:96 -msgid "Farmed" -msgstr "Farmed" - -#: templates/index.html:105 -msgid "Netspace" -msgstr "Netspace" - -#: templates/index.html:120 -msgid "Challenges from Harvesters" -msgstr "Défis des moissonneurs" - -#: templates/index.html:136 -msgid "Partial Proofs for Pools" -msgstr "Preuves partielles pour les pools" - -#: templates/farming/workers.html:80 templates/index.html:147 -msgid "Previous" -msgstr "Précédent" - -#: templates/farming/workers.html:84 templates/index.html:151 -msgid "Next" -msgstr "Suivant" - #: templates/keys.html:43 msgid "NOTE: Machinaris will never display your private key here." msgstr "" @@ -876,48 +870,53 @@ msgstr "" msgid "Local Currency:" msgstr "Monnaie locale:" -#: templates/summary.html:75 +#: templates/summary.html:79 msgid "Height" msgstr "Hauteur" #: templates/farming/plots.html:66 templates/farming/workers.html:25 -#: templates/summary.html:76 +#: templates/summary.html:80 msgid "Plots" msgstr "Plots" -#: templates/summary.html:78 +#: templates/summary.html:82 msgid "Max Resp." msgstr "Resp. Max" -#: templates/summary.html:79 +#: templates/summary.html:83 msgid "Partials" msgstr "Partiels" -#: templates/summary.html:80 +#: templates/summary.html:84 msgid "ETW" msgstr "ETW" -#: templates/summary.html:82 +#: templates/summary.html:86 msgid "Wallet" msgstr "Portefeuille" -#: templates/summary.html:83 templates/summary.html:84 +#: templates/summary.html:87 templates/summary.html:88 msgid "EDV" msgstr "EDV" -#: templates/summary.html:98 templates/wallet.html:126 +#: templates/summary.html:103 templates/wallet.html:127 msgid "Synced" msgstr "Synchronisé" -#: templates/summary.html:102 templates/wallet.html:130 +#: templates/summary.html:107 templates/wallet.html:131 msgid "Not Synced" msgstr "Non synchronisé" -#: templates/summary.html:128 +#: templates/summary.html:123 templates/wallet.html:142 +#, fuzzy +msgid "Chart Wallet" +msgstr "Modifier le portefeuille" + +#: templates/summary.html:137 msgid "No blockchains found from any farmers. Just starting up?" msgstr "Aucune blockchain trouvée chez les farmers. Pas ajouté?" -#: templates/summary.html:129 +#: templates/summary.html:138 msgid "Please allow at least 15 minutes for blockchains to get started." msgstr "Veuillez prévoir au moins 15 minutes pour que les blockchains commencent." @@ -933,7 +932,7 @@ msgstr "Adresse du portefeuille froid:" msgid "Wallet Summary" msgstr "Résumé quotidien" -#: templates/wallet.html:110 +#: templates/index/index.html:89 templates/wallet.html:110 msgid "Wallet Balance" msgstr "Solde du portefeuille" @@ -941,19 +940,23 @@ msgstr "Solde du portefeuille" msgid "Cold Wallet Balance" msgstr "Solde de portefeuille froid" -#: templates/wallet.html:112 +#: templates/views/index_script_block.js:56 templates/wallet.html:112 msgid "Total Balance" msgstr "Solde total" -#: templates/wallet.html:140 +#: templates/index/index.html:92 templates/wallet.html:113 +msgid "Balance" +msgstr "Total" + +#: templates/wallet.html:144 msgid "Edit Wallet" msgstr "Modifier le portefeuille" -#: templates/wallet.html:151 +#: templates/wallet.html:155 msgid "Wallet Details" msgstr "Détails du portefeuille" -#: templates/wallet.html:175 +#: templates/wallet.html:179 msgid "" "No wallet status received. Perhaps just starting? Please allow at least" " 10 minutes to update." @@ -961,7 +964,7 @@ msgstr "" "Aucun statut de portefeuille reçu. Peut-être que vous venez juste de " "commencer? Veuillez autoriser au moins 10 minutes pour mettre à jour." -#: templates/wallet.html:176 +#: templates/wallet.html:180 msgid "" "You can also try running \"chia wallet show\" on your fullnode's in-" "container shell to verify." @@ -1047,45 +1050,45 @@ msgstr "Espace disque utilisé (GB)" msgid "Disk Space Free (GB)" msgstr "Espace disque libre (GB)" -#: templates/worker_launch.html:50 templates/worker_launch.html:640 -#: templates/worker_launch.html:669 +#: templates/worker_launch.html:50 templates/worker_launch.html:642 +#: templates/worker_launch.html:671 msgid "Host Path" msgstr "Chemin de l'hôte" -#: templates/worker_launch.html:55 templates/worker_launch.html:645 -#: templates/worker_launch.html:674 +#: templates/worker_launch.html:55 templates/worker_launch.html:647 +#: templates/worker_launch.html:676 msgid "Container Path" msgstr "Chemin du conteneur" -#: templates/worker_launch.html:60 templates/worker_launch.html:650 -#: templates/worker_launch.html:679 +#: templates/worker_launch.html:60 templates/worker_launch.html:652 +#: templates/worker_launch.html:681 msgid "Used for:" msgstr "Utilisé pour:" -#: templates/worker_launch.html:63 templates/worker_launch.html:653 -#: templates/worker_launch.html:682 +#: templates/worker_launch.html:63 templates/worker_launch.html:655 +#: templates/worker_launch.html:684 msgid "Final Plots" msgstr "Plots finale" -#: templates/worker_launch.html:64 templates/worker_launch.html:654 -#: templates/worker_launch.html:683 +#: templates/worker_launch.html:64 templates/worker_launch.html:656 +#: templates/worker_launch.html:685 msgid "Plotting Temp" msgstr "Plotting Temporaire" -#: templates/worker_launch.html:65 templates/worker_launch.html:655 -#: templates/worker_launch.html:684 +#: templates/worker_launch.html:65 templates/worker_launch.html:657 +#: templates/worker_launch.html:686 msgid "Other" msgstr "Autre" -#: templates/worker_launch.html:69 templates/worker_launch.html:659 +#: templates/worker_launch.html:69 templates/worker_launch.html:661 msgid "Location" msgstr "Location" -#: templates/worker_launch.html:72 templates/worker_launch.html:662 +#: templates/worker_launch.html:72 templates/worker_launch.html:664 msgid "Local" msgstr "Local" -#: templates/worker_launch.html:73 templates/worker_launch.html:663 +#: templates/worker_launch.html:73 templates/worker_launch.html:665 msgid "Remote" msgstr "À distance" @@ -1093,7 +1096,7 @@ msgstr "À distance" msgid "Unknown blockchain fork of selected:" msgstr "Blockchain inconnue de la sélection:" -#: templates/worker_launch.html:284 +#: templates/worker_launch.html:285 msgid "" "Missing worker hostname. Please provide a short name to identify your " "worker." @@ -1101,7 +1104,7 @@ msgstr "" "Nom d'hôte du worker de calcul manquant. Veuillez fournir un nom court " "pour identifier votre ouvrier." -#: templates/worker_launch.html:304 +#: templates/worker_launch.html:305 msgid "" "Invalid host path ending with colon. Try adding a slash to the end like " "this" @@ -1109,29 +1112,29 @@ msgstr "" "Chemin d'hôte non valide se terminant par deux-points. Essayez d'ajouter " "une barre oblique à la fin comme ce" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Empty host path provided for volume at " msgstr "Chemin d'hôte vide fourni pour le volume à" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Please provide a host path." msgstr "Veuillez fournir un chemin d'accès à l'hôte." -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Empty container path provided for volume at " msgstr "Chemin de conteneur vide fourni pour le volume à " -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Please provide a container path." msgstr "Veuillez fournir un chemin de conteneur." -#: templates/worker_launch.html:355 +#: templates/worker_launch.html:356 msgid "Neither Harvester or Plottter mode selected. Please choose one or both." msgstr "" "Aucun mode Harvester ou Plotter n'est sélectionné. Veuillez en choisir un" " ou les deux." -#: templates/worker_launch.html:361 +#: templates/worker_launch.html:362 msgid "" "Missing worker IP address. Please provide the IP the controller will " "connect to for commands." @@ -1139,11 +1142,11 @@ msgstr "" "Adresse IP du worker manquante. Veuillez fournir l'adresse IP que le " "contrôleur se connecter à pour les commandes." -#: templates/worker_launch.html:411 +#: templates/worker_launch.html:413 msgid "Machinaris Worker - Launch Config" msgstr "Machinaris Worker - Lancer la configuration" -#: templates/worker_launch.html:412 +#: templates/worker_launch.html:414 msgid "" "Complete the form below to run new harvesters/plotters on other computers" " across your network. Save the generated docker-compose.yml file to a " @@ -1156,95 +1159,95 @@ msgstr "" "\"machinaris\", puis exécutez \"docker-compose up\" à partir d'un " "coquille." -#: templates/worker_launch.html:416 +#: templates/worker_launch.html:418 msgid "Operating System" msgstr "Système opérateur" -#: templates/worker_launch.html:422 +#: templates/worker_launch.html:424 msgid "Linux" msgstr "Linux" -#: templates/worker_launch.html:429 +#: templates/worker_launch.html:431 msgid "Macintosh" msgstr "Macintosh" -#: templates/worker_launch.html:436 +#: templates/worker_launch.html:438 msgid "Windows" msgstr "Windows" -#: templates/worker_launch.html:442 +#: templates/worker_launch.html:444 msgid "Machinaris Mode" msgstr "Mode Machinaris" -#: templates/worker_launch.html:448 +#: templates/worker_launch.html:450 msgid "Harvester" msgstr "Harvester" -#: templates/worker_launch.html:455 +#: templates/worker_launch.html:457 msgid "Plotter" msgstr "Plotter" -#: templates/worker_launch.html:463 +#: templates/worker_launch.html:465 msgid "Farmer Public Key" msgstr "Clé publique de farmer" -#: templates/worker_launch.html:468 +#: templates/worker_launch.html:470 msgid "Pool Public Key" msgstr "Clé publique de pool" -#: templates/worker_launch.html:473 +#: templates/worker_launch.html:475 msgid "Pool Contract Address" msgstr "Adresse du contrat de pool" -#: templates/worker_launch.html:478 +#: templates/worker_launch.html:480 msgid "Plot on Startup" msgstr "Plot au démarrage" -#: templates/worker_launch.html:484 +#: templates/worker_launch.html:486 msgid "True" msgstr "Vrai" -#: templates/worker_launch.html:491 +#: templates/worker_launch.html:493 msgid "False" msgstr "Faux" -#: templates/worker_launch.html:499 +#: templates/worker_launch.html:501 msgid "Controller IP Address" msgstr "Adresse IP du contrôleur" -#: templates/worker_launch.html:504 +#: templates/worker_launch.html:506 msgid "Controller API Port" msgstr "Port API du contrôleur" -#: templates/worker_launch.html:511 +#: templates/worker_launch.html:513 msgid "Worker Hostname" msgstr "Nom d'hôte du worker" -#: templates/worker_launch.html:516 +#: templates/worker_launch.html:518 msgid "Worker IP Address" msgstr "Adresse IP du worker" -#: templates/worker_launch.html:523 +#: templates/worker_launch.html:525 msgid "Blockchains to Farm" msgstr "Blockchains a Farm" -#: templates/worker_launch.html:636 +#: templates/worker_launch.html:638 msgid "Volume Mounts" msgstr "Montages de volume" -#: templates/worker_launch.html:693 +#: templates/worker_launch.html:695 msgid "Add New Volume" msgstr "Ajouter un nouveau volume" -#: templates/worker_launch.html:695 +#: templates/worker_launch.html:697 msgid "Remove Last Volume" msgstr "Supprimer le dernier volume" -#: templates/worker_launch.html:702 +#: templates/worker_launch.html:704 msgid "Copy" msgstr "Copie" -#: templates/worker_launch.html:706 +#: templates/worker_launch.html:708 msgid "Docker Compose" msgstr "Docker Compose" @@ -1260,6 +1263,10 @@ msgstr "Dernier ping" msgid "Last Successful Ping" msgstr "Dernier ping réussi" +#: templates/workers.html:49 +msgid "Logs" +msgstr "Journaux" + #: templates/workers.html:94 msgid "Prune Selected" msgstr "Taille sélectionnée" @@ -1329,6 +1336,14 @@ msgstr "" "est en cours d'exécution. Veuillez également vérifier les paramètres sur " "la page Alertes." +#: templates/farming/workers.html:80 templates/index/index.html:176 +msgid "Previous" +msgstr "Précédent" + +#: templates/farming/workers.html:84 templates/index/index.html:180 +msgid "Next" +msgstr "Suivant" + #: templates/farming/workers.html:94 #, python-format msgid "" @@ -1343,6 +1358,69 @@ msgstr "" " Assurez-vous également que le worker Chia fait rapport au contrôleur sur" " la page Workers." +#: templates/index/chart_balances.html:85 templates/index/chart_farmed.html:131 +#: templates/index/chart_netspace.html:91 +#: templates/index/chart_plot_count.html:84 +#: templates/index/chart_plots_size.html:84 templates/plotting/jobs.html:285 +#: templates/views/index_script_block.js:90 +msgid "Date" +msgstr "Date" + +#: templates/index/chart_balances.html:102 +#: templates/index/chart_farmed.html:148 +#: templates/views/index_script_block.js:107 +msgid "Coins" +msgstr "" + +#: templates/index/chart_farmed.html:48 templates/index/index.html:97 +msgid "Farmed Blocks" +msgstr "" + +#: templates/index/chart_farmed.html:53 +msgid "Plot File" +msgstr "" + +#: templates/index/chart_farmed.html:54 +msgid "Farmed Block" +msgstr "" + +#: templates/index/chart_farmed.html:55 +#, fuzzy +msgid "Farmed At" +msgstr "Farmed" + +#: templates/index/chart_plot_count.html:101 templates/index/index.html:70 +msgid "Plot Count" +msgstr "" + +#: templates/index/index.html:30 +msgid "Expected Time to Win" +msgstr "Temps prévu pour gagner" + +#: templates/index/index.html:73 +msgid "Total Plots" +msgstr "Plots totales" + +#: templates/index/index.html:81 +msgid "Total Plots Size" +msgstr "Taille totale des plots" + +#: templates/index/index.html:101 +msgid "Farmed" +msgstr "Farmed" + +#: templates/index/index.html:111 +msgid "Netspace" +msgstr "Netspace" + +#: templates/index/index.html:144 +msgid "Challenges from Harvesters" +msgstr "Défis des moissonneurs" + +#: templates/index/index.html:162 +msgid "Partial Proofs for Pools" +msgstr "Preuves partielles pour les pools" + #: templates/plotting/jobs.html:9 msgid "Confirm Kill" msgstr "Confirmer tuer" @@ -1447,10 +1525,6 @@ msgstr "Continuer la sélection" msgid "Plotting Speed - k%(k_size)s Plots" msgstr "Vitesse de Plotting - k%(k_size)s Plots" -#: templates/plotting/jobs.html:285 -msgid "Date" -msgstr "Date" - #: templates/plotting/jobs.html:302 msgid "Time (minutes)" msgstr "Temps (minutes)" @@ -1515,7 +1589,7 @@ msgid "Archiving is disabled. See Settings | Plotting page." msgstr "L'archivage est désactivé. Voir page Paramètres | Traçage." #: templates/plotting/workers.html:256 -#: templates/views/index_script_block.js:152 +#: templates/views/index_script_block.js:232 msgid "Time - Last 24 Hours" msgstr "Heure - Dernières 24 heures" @@ -1609,15 +1683,15 @@ msgstr "Commencer..." msgid "PlotNFT Log on " msgstr "Journaux PlotNFT de" -#: templates/views/index_script_block.js:85 +#: templates/views/index_script_block.js:163 msgid "Time - Recent" msgstr "Heure - Récent" -#: templates/views/index_script_block.js:102 +#: templates/views/index_script_block.js:180 msgid "Time Taken (seconds)" msgstr "Temps pris (secondes)" -#: templates/views/index_script_block.js:169 +#: templates/views/index_script_block.js:249 msgid "Partials Submitted" msgstr "Partiels soumis" diff --git a/web/translations/it_IT/LC_MESSAGES/messages.po b/web/translations/it_IT/LC_MESSAGES/messages.po index 700fdf53..ef60cc2f 100644 --- a/web/translations/it_IT/LC_MESSAGES/messages.po +++ b/web/translations/it_IT/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-15 10:14-0700\n" "Last-Translator: Fabrizio Cacicia\n" "Language: it\n" @@ -18,31 +18,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.1\n" -#: routes.py:90 routes.py:233 +#: routes.py:113 routes.py:256 msgid "Saved local currency setting." msgstr "Impostazione valuta locale salvata." -#: routes.py:110 +#: routes.py:133 msgid "Blockchain download" msgstr "" -#: routes.py:142 +#: routes.py:165 msgid "Unknown plotting form" msgstr "Formato plotting sconosciuto" -#: routes.py:192 +#: routes.py:215 msgid "Error! Please see logs." msgstr "Errore! Controlla i logs." -#: routes.py:218 +#: routes.py:241 msgid "Unknown alerts form" msgstr "Formato avvisi sconosciuto" -#: routes.py:238 +#: routes.py:261 msgid "Saved cold wallet addresses." msgstr "Indirizzi cold wallet salvati." -#: routes.py:306 +#: routes.py:329 msgid "" "Saved mapping settings. Please allow 10 minutes to generate location " "information for the map." @@ -50,11 +50,11 @@ msgstr "" "Impostazioni salvate. Attendi 10 minuti affinché le informazioni vengano " "generate." -#: routes.py:314 +#: routes.py:337 msgid "Unknown form action" msgstr "Azione sconosciuta." -#: routes.py:420 +#: routes.py:443 #, python-format msgid "" "No worker at %(worker)s for blockchain %(blockchain)s. Please select " @@ -63,7 +63,7 @@ msgstr "" "Nessun worker in %(worker)s per la blockchain %(blockchain)s. Scegli " "un'altra blockchain." -#: routes.py:426 +#: routes.py:449 #, python-format msgid "" "For Alerts config, found no responding fullnode found for %(blockchain)s." @@ -72,7 +72,7 @@ msgstr "" "Per le configurazioni degli Avvisi, non è stato trovato alcun fullnode " "per %(blockchain)s. Controlla i tuoi worker." -#: routes.py:431 +#: routes.py:454 #, python-format msgid "" "For Farming config, found no responding fullnode found for " @@ -81,7 +81,7 @@ msgstr "" "Per le configurazioni del Farming, non è stato trovato alcun fullnode per" " %(blockchain)s. Controlla i tuoi worker." -#: routes.py:438 +#: routes.py:461 #, python-format msgid "" "For Plotting config, found no responding fullnode found for " @@ -90,7 +90,7 @@ msgstr "" "Per le configurazioni del Plotting, non è stato trovato alcun fullnode " "per %(blockchain)s. Controlla i tuoi worker." -#: routes.py:443 +#: routes.py:466 #, python-format msgid "" "No responding fullnode found for %(blockchain)s. Please check your " @@ -99,7 +99,7 @@ msgstr "" "Non è stato trovato alcun fullnode che risponden per %(blockchain)s. " "Controlla i tuoi workers." -#: routes.py:462 +#: routes.py:485 msgid "Unsupported log type" msgstr "Formato log non supportato" @@ -132,7 +132,8 @@ msgid "Idle" msgstr "Inattivo" #: actions/plotman.py:47 actions/plotman.py:48 models/chia.py:211 -#: models/plotman.py:67 templates/index.html:42 templates/index.html:52 +#: models/plotman.py:67 templates/index/index.html:42 +#: templates/index/index.html:52 msgid "Active" msgstr "Attivo" @@ -140,19 +141,46 @@ msgstr "Attivo" msgid "Suspended" msgstr "Sospeso" -#: actions/stats.py:56 actions/stats.py:90 actions/stats.py:108 -#: actions/stats.py:110 +#: actions/stats.py:57 actions/stats.py:92 actions/stats.py:109 +#: actions/stats.py:130 actions/stats.py:132 msgid "in last day." msgstr "nell'ultimo giorno." -#: actions/stats.py:338 +#: actions/stats.py:360 msgid "secs" msgstr "secondi" -#: actions/stats.py:348 models/chia.py:251 +#: actions/stats.py:370 models/chia.py:251 msgid "hour" msgstr "ora" +#: actions/stats.py:399 templates/views/index_script_block.js:51 +msgid "Farmed Coins" +msgstr "" + +#: actions/stats.py:416 +#, fuzzy +msgid "Wallet Balances" +msgstr "Saldo portafoglio" + +#: actions/stats.py:433 templates/index/index.html:105 +#, fuzzy +msgid "Netspace Size" +msgstr "Spazio Rete" + +#: actions/stats.py:434 actions/stats.py:492 +msgid "Size" +msgstr "" + +#: actions/stats.py:472 +msgid "Plot Counts" +msgstr "" + +#: actions/stats.py:491 templates/index/index.html:78 +#, fuzzy +msgid "Plots Size" +msgstr "Dimensione Totale PLots" + #: actions/warnings.py:56 msgid "Dismiss Warning" msgstr "Ignora Avvertenza" @@ -199,11 +227,11 @@ msgstr "Usa una versione di Machinaris coerente per evitare problemi." msgid "days" msgstr "giorni" -#: models/chia.py:213 templates/summary.html:100 templates/wallet.html:128 +#: models/chia.py:213 templates/summary.html:105 templates/wallet.html:129 msgid "Syncing" msgstr "Sincronizzazione" -#: models/chia.py:215 templates/index.html:54 +#: models/chia.py:215 templates/index/index.html:54 msgid "Not available" msgstr "Non disponibile" @@ -211,9 +239,10 @@ msgstr "Non disponibile" msgid "Not synced" msgstr "non sincronizzato" -#: models/chia.py:220 templates/index.html:54 templates/plotting/jobs.html:114 -#: templates/plotting/workers.html:116 templates/summary.html:96 -#: templates/wallet.html:124 templates/worker.html:78 templates/workers.html:72 +#: models/chia.py:220 templates/index/index.html:54 +#: templates/plotting/jobs.html:114 templates/plotting/workers.html:116 +#: templates/summary.html:101 templates/wallet.html:125 +#: templates/worker.html:78 templates/workers.html:72 msgid "Offline" msgstr "" @@ -274,16 +303,16 @@ msgid "Alerts: Recent Notifications" msgstr "Avvisi: Notifiche Recenti" #: templates/alerts.html:72 templates/drives.html:86 -#: templates/settings/alerts.html:36 templates/settings/farming.html:37 -#: templates/settings/plotting.html:37 templates/settings/tools.html:36 -#: templates/worker.html:14 +#: templates/index/chart_farmed.html:52 templates/settings/alerts.html:36 +#: templates/settings/farming.html:37 templates/settings/plotting.html:37 +#: templates/settings/tools.html:36 templates/worker.html:14 msgid "Worker" msgstr "" -#: templates/alerts.html:73 templates/blockchains.html:31 +#: templates/alerts.html:73 templates/blockchains.html:35 #: templates/settings/alerts.html:45 templates/settings/farming.html:46 #: templates/settings/plotting.html:46 templates/settings/tools.html:45 -#: templates/summary.html:73 templates/wallet.html:108 templates/worker.html:47 +#: templates/summary.html:77 templates/wallet.html:108 templates/worker.html:47 #: templates/workers.html:43 msgid "Blockchain" msgstr "" @@ -353,17 +382,17 @@ msgstr "" msgid "Summary" msgstr "Riepilogo" -#: templates/base.html:38 templates/base.html:113 templates/index.html:41 +#: templates/base.html:38 templates/base.html:113 templates/index/index.html:41 #: templates/plotting/jobs.html:101 templates/settings/plotting.html:14 msgid "Plotting" msgstr "" -#: templates/base.html:44 templates/base.html:107 templates/index.html:50 +#: templates/base.html:44 templates/base.html:107 templates/index/index.html:50 #: templates/settings/farming.html:15 msgid "Farming" msgstr "" -#: templates/base.html:50 +#: templates/base.html:50 templates/index/index.html:126 msgid "Wallets" msgstr "Portafogli" @@ -390,7 +419,7 @@ msgstr "" #: templates/base.html:86 templates/farming/plots.html:69 #: templates/farming/workers.html:28 templates/plotting/jobs.html:94 -#: templates/plotting/workers.html:96 templates/summary.html:77 +#: templates/plotting/workers.html:96 templates/summary.html:81 #: templates/workers.html:14 msgid "Workers" msgstr "" @@ -450,46 +479,50 @@ msgstr "" msgid "Plotman" msgstr "" -#: templates/blockchains.html:23 +#: templates/blockchains.html:27 msgid "Blockchain Summary" msgstr "Riepilogo Blockchain" -#: templates/blockchains.html:32 templates/drives.html:91 -#: templates/summary.html:74 templates/wallet.html:109 +#: templates/blockchains.html:36 templates/drives.html:91 +#: templates/summary.html:78 templates/wallet.html:109 msgid "Status" msgstr "Stato" -#: templates/blockchains.html:33 +#: templates/blockchains.html:37 msgid "Peak Height" msgstr "" -#: templates/blockchains.html:34 +#: templates/blockchains.html:38 msgid "Peak Time" msgstr "" -#: templates/blockchains.html:35 templates/drives.html:93 +#: templates/blockchains.html:39 templates/drives.html:93 #: templates/wallet.html:114 msgid "Updated At" msgstr "Aggiornato a" -#: templates/blockchains.html:36 templates/summary.html:87 -#: templates/workers.html:49 -msgid "Logs" -msgstr "" +#: templates/blockchains.html:63 +#, fuzzy +msgid "View Blockchain Details" +msgstr "Dettagli Blockchain" -#: templates/blockchains.html:66 +#: templates/blockchains.html:65 templates/blockchains.html:79 msgid "Blockchain Details" msgstr "Dettagli Blockchain" -#: templates/blockchains.html:91 +#: templates/blockchains.html:69 templates/summary.html:126 +msgid "View Blockchain Log" +msgstr "" + +#: templates/blockchains.html:104 msgid "No blockchains found from any farmers. Not added?" msgstr "Nessuna blockchain trovata da nessun farmer. Non ancora aggiunte?" -#: templates/blockchains.html:92 +#: templates/blockchains.html:105 msgid "Try running \"chia show --state\" on your farmers to verify." msgstr "Prova ad eseguire \"chia show --state\" sui tuoi farmer per verificare." -#: templates/blockchains.html:106 templates/summary.html:143 +#: templates/blockchains.html:119 templates/summary.html:152 msgid "Fullnode Log for " msgstr "" @@ -667,46 +700,6 @@ msgstr "" "Per maggiori informazioni, guarda " "%(wiki_link_open)swiki%(wiki_link_close)s." -#: templates/index.html:30 -msgid "Expected Time to Win" -msgstr "Tempo Previsto per Vincere" - -#: templates/index.html:72 -msgid "Total Plots" -msgstr "Plots Totali" - -#: templates/index.html:79 -msgid "Total Plots Size" -msgstr "Dimensione Totale PLots" - -#: templates/index.html:89 templates/wallet.html:113 -msgid "Balance" -msgstr "Saldo" - -#: templates/index.html:96 -msgid "Farmed" -msgstr "Farmati" - -#: templates/index.html:105 -msgid "Netspace" -msgstr "Spazio Rete" - -#: templates/index.html:120 -msgid "Challenges from Harvesters" -msgstr "Challenges per Harvester" - -#: templates/index.html:136 -msgid "Partial Proofs for Pools" -msgstr "Partial Proofs per Pool" - -#: templates/farming/workers.html:80 templates/index.html:147 -msgid "Previous" -msgstr "Precedente" - -#: templates/farming/workers.html:84 templates/index.html:151 -msgid "Next" -msgstr "Successivo" - #: templates/keys.html:43 msgid "NOTE: Machinaris will never display your private key here." msgstr "NOTA: Machinaris non mostrerà mai la tua chiave privata qui." @@ -876,48 +869,53 @@ msgstr "" msgid "Local Currency:" msgstr "Valuta Locale:" -#: templates/summary.html:75 +#: templates/summary.html:79 msgid "Height" msgstr "Altezza" #: templates/farming/plots.html:66 templates/farming/workers.html:25 -#: templates/summary.html:76 +#: templates/summary.html:80 msgid "Plots" msgstr "" -#: templates/summary.html:78 +#: templates/summary.html:82 msgid "Max Resp." msgstr "Max Risp." -#: templates/summary.html:79 +#: templates/summary.html:83 msgid "Partials" msgstr "Parziali" -#: templates/summary.html:80 +#: templates/summary.html:84 msgid "ETW" msgstr "" -#: templates/summary.html:82 +#: templates/summary.html:86 msgid "Wallet" msgstr "Portafogli" -#: templates/summary.html:83 templates/summary.html:84 +#: templates/summary.html:87 templates/summary.html:88 msgid "EDV" msgstr "" -#: templates/summary.html:98 templates/wallet.html:126 +#: templates/summary.html:103 templates/wallet.html:127 msgid "Synced" msgstr "Sincronizzato" -#: templates/summary.html:102 templates/wallet.html:130 +#: templates/summary.html:107 templates/wallet.html:131 msgid "Not Synced" msgstr "Non Sincronizzato" -#: templates/summary.html:128 +#: templates/summary.html:123 templates/wallet.html:142 +#, fuzzy +msgid "Chart Wallet" +msgstr "Modifica Portafoglio" + +#: templates/summary.html:137 msgid "No blockchains found from any farmers. Just starting up?" msgstr "Nessuna blockchain trovata da nessun farmer. Hai appena avviato?" -#: templates/summary.html:129 +#: templates/summary.html:138 msgid "Please allow at least 15 minutes for blockchains to get started." msgstr "Attendi almeno 15 minuti affinché le blockchain si avviino." @@ -933,7 +931,7 @@ msgstr "Indirizzo Cold Wallet:" msgid "Wallet Summary" msgstr "Riepilogo Portafoglio" -#: templates/wallet.html:110 +#: templates/index/index.html:89 templates/wallet.html:110 msgid "Wallet Balance" msgstr "Saldo portafoglio" @@ -941,19 +939,23 @@ msgstr "Saldo portafoglio" msgid "Cold Wallet Balance" msgstr "Saldo Cold Wallet" -#: templates/wallet.html:112 +#: templates/views/index_script_block.js:56 templates/wallet.html:112 msgid "Total Balance" msgstr "Saldo Totale" -#: templates/wallet.html:140 +#: templates/index/index.html:92 templates/wallet.html:113 +msgid "Balance" +msgstr "Saldo" + +#: templates/wallet.html:144 msgid "Edit Wallet" msgstr "Modifica Portafoglio" -#: templates/wallet.html:151 +#: templates/wallet.html:155 msgid "Wallet Details" msgstr "Dettagli Portafoglio" -#: templates/wallet.html:175 +#: templates/wallet.html:179 msgid "" "No wallet status received. Perhaps just starting? Please allow at least" " 10 minutes to update." @@ -961,7 +963,7 @@ msgstr "" "Stato del portafogli non ricevuto. Forse hai appena avviato? Attendi " "almeno 10 minuti affinché si aggiorni." -#: templates/wallet.html:176 +#: templates/wallet.html:180 msgid "" "You can also try running \"chia wallet show\" on your fullnode's in-" "container shell to verify." @@ -1049,46 +1051,46 @@ msgstr "Spazio Usato su Disco (GB)" msgid "Disk Space Free (GB)" msgstr "Spazio Libero su Disco (GB)" -#: templates/worker_launch.html:50 templates/worker_launch.html:640 -#: templates/worker_launch.html:669 +#: templates/worker_launch.html:50 templates/worker_launch.html:642 +#: templates/worker_launch.html:671 msgid "Host Path" msgstr "Percorso Host" -#: templates/worker_launch.html:55 templates/worker_launch.html:645 -#: templates/worker_launch.html:674 +#: templates/worker_launch.html:55 templates/worker_launch.html:647 +#: templates/worker_launch.html:676 msgid "Container Path" msgstr "Percorso Container" -#: templates/worker_launch.html:60 templates/worker_launch.html:650 -#: templates/worker_launch.html:679 +#: templates/worker_launch.html:60 templates/worker_launch.html:652 +#: templates/worker_launch.html:681 msgid "Used for:" msgstr "Usato per:" -#: templates/worker_launch.html:63 templates/worker_launch.html:653 -#: templates/worker_launch.html:682 +#: templates/worker_launch.html:63 templates/worker_launch.html:655 +#: templates/worker_launch.html:684 msgid "Final Plots" msgstr "Plots Completati" -#: templates/worker_launch.html:64 templates/worker_launch.html:654 -#: templates/worker_launch.html:683 +#: templates/worker_launch.html:64 templates/worker_launch.html:656 +#: templates/worker_launch.html:685 msgid "Plotting Temp" msgstr "Plotting" -#: templates/worker_launch.html:65 templates/worker_launch.html:655 -#: templates/worker_launch.html:684 +#: templates/worker_launch.html:65 templates/worker_launch.html:657 +#: templates/worker_launch.html:686 msgid "Other" msgstr "Altro" -#: templates/worker_launch.html:69 templates/worker_launch.html:659 +#: templates/worker_launch.html:69 templates/worker_launch.html:661 #, fuzzy msgid "Location" msgstr "Notifica" -#: templates/worker_launch.html:72 templates/worker_launch.html:662 +#: templates/worker_launch.html:72 templates/worker_launch.html:664 msgid "Local" msgstr "" -#: templates/worker_launch.html:73 templates/worker_launch.html:663 +#: templates/worker_launch.html:73 templates/worker_launch.html:665 msgid "Remote" msgstr "" @@ -1096,7 +1098,7 @@ msgstr "" msgid "Unknown blockchain fork of selected:" msgstr "Fork sconosciuto per:" -#: templates/worker_launch.html:284 +#: templates/worker_launch.html:285 msgid "" "Missing worker hostname. Please provide a short name to identify your " "worker." @@ -1104,7 +1106,7 @@ msgstr "" "Nome host del worker mancante. Fornisci un nome breve per identificare il" " tuo worker." -#: templates/worker_launch.html:304 +#: templates/worker_launch.html:305 msgid "" "Invalid host path ending with colon. Try adding a slash to the end like " "this" @@ -1112,29 +1114,29 @@ msgstr "" "Percorso host non valido, non può finire con i due punti. Prova ad " "aggiungere uno slash alla fine, in questo modo" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Empty host path provided for volume at " msgstr "Hai fornito un percorso host vuoto per il volume a " -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Please provide a host path." msgstr "Fornisci un percorso host." -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Empty container path provided for volume at " msgstr "Hai fornito un percorso container vuoto per il volume a " -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Please provide a container path." msgstr "Fornisci un percorso container." -#: templates/worker_launch.html:355 +#: templates/worker_launch.html:356 msgid "Neither Harvester or Plottter mode selected. Please choose one or both." msgstr "" "Non hai selezionato né modalità Harvester né plotter. Scegline una o " "entrambe." -#: templates/worker_launch.html:361 +#: templates/worker_launch.html:362 msgid "" "Missing worker IP address. Please provide the IP the controller will " "connect to for commands." @@ -1142,11 +1144,11 @@ msgstr "" "Indirizzo IP worker mancante. Fornisci l'indirizzo IP a cui il controller" " si connetterà per i comandi." -#: templates/worker_launch.html:411 +#: templates/worker_launch.html:413 msgid "Machinaris Worker - Launch Config" msgstr "Machinaris Worker - Avvia Configurazione" -#: templates/worker_launch.html:412 +#: templates/worker_launch.html:414 msgid "" "Complete the form below to run new harvesters/plotters on other computers" " across your network. Save the generated docker-compose.yml file to a " @@ -1158,95 +1160,95 @@ msgstr "" "cartella chiamata \"machinaris\", ed esegui il comando \"docker-compose " "up\" dalla shell." -#: templates/worker_launch.html:416 +#: templates/worker_launch.html:418 msgid "Operating System" msgstr "Sistema Operativo" -#: templates/worker_launch.html:422 +#: templates/worker_launch.html:424 msgid "Linux" msgstr "" -#: templates/worker_launch.html:429 +#: templates/worker_launch.html:431 msgid "Macintosh" msgstr "" -#: templates/worker_launch.html:436 +#: templates/worker_launch.html:438 msgid "Windows" msgstr "" -#: templates/worker_launch.html:442 +#: templates/worker_launch.html:444 msgid "Machinaris Mode" msgstr "Modalità" -#: templates/worker_launch.html:448 +#: templates/worker_launch.html:450 msgid "Harvester" msgstr "" -#: templates/worker_launch.html:455 +#: templates/worker_launch.html:457 msgid "Plotter" msgstr "" -#: templates/worker_launch.html:463 +#: templates/worker_launch.html:465 msgid "Farmer Public Key" msgstr "Chiave Pubblica Farmer" -#: templates/worker_launch.html:468 +#: templates/worker_launch.html:470 msgid "Pool Public Key" msgstr "Chiave Pubblica Pool" -#: templates/worker_launch.html:473 +#: templates/worker_launch.html:475 msgid "Pool Contract Address" msgstr "" -#: templates/worker_launch.html:478 +#: templates/worker_launch.html:480 msgid "Plot on Startup" msgstr "Plotta all'avvio" -#: templates/worker_launch.html:484 +#: templates/worker_launch.html:486 msgid "True" msgstr "Vero" -#: templates/worker_launch.html:491 +#: templates/worker_launch.html:493 msgid "False" msgstr "Falso" -#: templates/worker_launch.html:499 +#: templates/worker_launch.html:501 msgid "Controller IP Address" msgstr "Indirizzo IP Controller" -#: templates/worker_launch.html:504 +#: templates/worker_launch.html:506 msgid "Controller API Port" msgstr "Porta API Controller" -#: templates/worker_launch.html:511 +#: templates/worker_launch.html:513 msgid "Worker Hostname" msgstr "Nome host Worker" -#: templates/worker_launch.html:516 +#: templates/worker_launch.html:518 msgid "Worker IP Address" msgstr "Indirizzo IP Worker" -#: templates/worker_launch.html:523 +#: templates/worker_launch.html:525 msgid "Blockchains to Farm" msgstr "Blockchains da Farmare" -#: templates/worker_launch.html:636 +#: templates/worker_launch.html:638 msgid "Volume Mounts" msgstr "Volumi da Montare" -#: templates/worker_launch.html:693 +#: templates/worker_launch.html:695 msgid "Add New Volume" msgstr "Aggiungi Nuovo Volume" -#: templates/worker_launch.html:695 +#: templates/worker_launch.html:697 msgid "Remove Last Volume" msgstr "Rimuovi Ultimo Volume" -#: templates/worker_launch.html:702 +#: templates/worker_launch.html:704 msgid "Copy" msgstr "Copia" -#: templates/worker_launch.html:706 +#: templates/worker_launch.html:708 msgid "Docker Compose" msgstr "" @@ -1262,6 +1264,10 @@ msgstr "Ultimo Ping" msgid "Last Successful Ping" msgstr "Ultimo Ping con successo" +#: templates/workers.html:49 +msgid "Logs" +msgstr "" + #: templates/workers.html:94 msgid "Prune Selected" msgstr "Togli Selezionati" @@ -1332,6 +1338,14 @@ msgstr "" "Controlla che il Machinaris container per questa blockchain sia in " "esecuzione. Verifica inoltre le impostazioni nella pagina Avvisi." +#: templates/farming/workers.html:80 templates/index/index.html:176 +msgid "Previous" +msgstr "Precedente" + +#: templates/farming/workers.html:84 templates/index/index.html:180 +msgid "Next" +msgstr "Successivo" + #: templates/farming/workers.html:94 #, python-format msgid "" @@ -1346,6 +1360,69 @@ msgstr "" "Assicurati inoltre che il worker di Chia stia rispondendo nel controller " "dalla pagina Workers." +#: templates/index/chart_balances.html:85 templates/index/chart_farmed.html:131 +#: templates/index/chart_netspace.html:91 +#: templates/index/chart_plot_count.html:84 +#: templates/index/chart_plots_size.html:84 templates/plotting/jobs.html:285 +#: templates/views/index_script_block.js:90 +msgid "Date" +msgstr "" + +#: templates/index/chart_balances.html:102 +#: templates/index/chart_farmed.html:148 +#: templates/views/index_script_block.js:107 +msgid "Coins" +msgstr "" + +#: templates/index/chart_farmed.html:48 templates/index/index.html:97 +msgid "Farmed Blocks" +msgstr "" + +#: templates/index/chart_farmed.html:53 +msgid "Plot File" +msgstr "" + +#: templates/index/chart_farmed.html:54 +msgid "Farmed Block" +msgstr "" + +#: templates/index/chart_farmed.html:55 +#, fuzzy +msgid "Farmed At" +msgstr "Farmati" + +#: templates/index/chart_plot_count.html:101 templates/index/index.html:70 +msgid "Plot Count" +msgstr "" + +#: templates/index/index.html:30 +msgid "Expected Time to Win" +msgstr "Tempo Previsto per Vincere" + +#: templates/index/index.html:73 +msgid "Total Plots" +msgstr "Plots Totali" + +#: templates/index/index.html:81 +msgid "Total Plots Size" +msgstr "Dimensione Totale PLots" + +#: templates/index/index.html:101 +msgid "Farmed" +msgstr "Farmati" + +#: templates/index/index.html:111 +msgid "Netspace" +msgstr "Spazio Rete" + +#: templates/index/index.html:144 +msgid "Challenges from Harvesters" +msgstr "Challenges per Harvester" + +#: templates/index/index.html:162 +msgid "Partial Proofs for Pools" +msgstr "Partial Proofs per Pool" + #: templates/plotting/jobs.html:9 msgid "Confirm Kill" msgstr "Conferma Terminazione" @@ -1451,10 +1528,6 @@ msgstr "Riprendi Selezionati" msgid "Plotting Speed - k%(k_size)s Plots" msgstr "Velocità di Plotting - k%(k_size)s Plots" -#: templates/plotting/jobs.html:285 -msgid "Date" -msgstr "" - #: templates/plotting/jobs.html:302 msgid "Time (minutes)" msgstr "" @@ -1522,7 +1595,7 @@ msgstr "" "Plotting\"." #: templates/plotting/workers.html:256 -#: templates/views/index_script_block.js:152 +#: templates/views/index_script_block.js:232 msgid "Time - Last 24 Hours" msgstr "" @@ -1616,15 +1689,15 @@ msgstr "Salvataggio in corso..." msgid "PlotNFT Log on " msgstr "" -#: templates/views/index_script_block.js:85 +#: templates/views/index_script_block.js:163 msgid "Time - Recent" msgstr "" -#: templates/views/index_script_block.js:102 +#: templates/views/index_script_block.js:180 msgid "Time Taken (seconds)" msgstr "" -#: templates/views/index_script_block.js:169 +#: templates/views/index_script_block.js:249 msgid "Partials Submitted" msgstr "" diff --git a/web/translations/nl_NL/LC_MESSAGES/messages.po b/web/translations/nl_NL/LC_MESSAGES/messages.po index 75b827cc..d2d56e14 100644 --- a/web/translations/nl_NL/LC_MESSAGES/messages.po +++ b/web/translations/nl_NL/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris/issuesPOT-" "Creation-Date: 2022-03-13 10:29-0600\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-03-13 10:29-0600\n" "Last-Translator: Bernie Deprez\n" "Language: nl_NL\n" @@ -18,31 +18,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.1\n" -#: routes.py:90 routes.py:233 +#: routes.py:113 routes.py:256 msgid "Saved local currency setting." msgstr "Lokale munt instelling opgeslagen." -#: routes.py:110 +#: routes.py:133 msgid "Blockchain download" msgstr "Blockchain download" -#: routes.py:142 +#: routes.py:165 msgid "Unknown plotting form" msgstr "Ongekend plottingformaat" -#: routes.py:192 +#: routes.py:215 msgid "Error! Please see logs." msgstr "Error! Controleer de logs." -#: routes.py:218 +#: routes.py:241 msgid "Unknown alerts form" msgstr "Ongekend waarschuwingsformaat" -#: routes.py:238 +#: routes.py:261 msgid "Saved cold wallet addresses." msgstr "Adres koude portefeuille opgeslagen." -#: routes.py:306 +#: routes.py:329 msgid "" "Saved mapping settings. Please allow 10 minutes to generate location " "information for the map." @@ -50,11 +50,11 @@ msgstr "" "Kaart instellingen opgeslagen. Wacht 10 minuten terwijl lokatie " "informatie voor de kaart wordt gegenereerd." -#: routes.py:314 +#: routes.py:337 msgid "Unknown form action" msgstr "Ongekende formulier actie" -#: routes.py:420 +#: routes.py:443 #, python-format msgid "" "No worker at %(worker)s for blockchain %(blockchain)s. Please select " @@ -63,7 +63,7 @@ msgstr "" "Geen werker op %(worker)s voor blockchain %(blockchain)s. Gelieve een " "ander blockchain te kiezen." -#: routes.py:426 +#: routes.py:449 #, python-format msgid "" "For Alerts config, found no responding fullnode found for %(blockchain)s." @@ -72,7 +72,7 @@ msgstr "" "Voor Waarschuwingsconfiguratie, geen reagerende fullnode voor " "%(blockchain)s gevonden. Gelieve uw werkers te controleren." -#: routes.py:431 +#: routes.py:454 #, python-format msgid "" "For Farming config, found no responding fullnode found for " @@ -81,7 +81,7 @@ msgstr "" "Voor Farming configuratie, geen reagerende fullnode voor %(blockchain)s " "gevonden. Gelieve uw werkers te controleren." -#: routes.py:438 +#: routes.py:461 #, python-format msgid "" "For Plotting config, found no responding fullnode found for " @@ -90,7 +90,7 @@ msgstr "" "Voor Plotting configuratie, geen reagerende fullnode gevonden voor " "%(blockchain)s. Gelieve uw werkers te controleren." -#: routes.py:443 +#: routes.py:466 #, python-format msgid "" "No responding fullnode found for %(blockchain)s. Please check your " @@ -99,7 +99,7 @@ msgstr "" "Geen reagerende fullnode gevonden voor %(blockchain)s. Gelieve uw werkers" " te controleren." -#: routes.py:462 +#: routes.py:485 msgid "Unsupported log type" msgstr "Log type niet ondersteund" @@ -130,7 +130,8 @@ msgid "Idle" msgstr "Inactief" #: actions/plotman.py:47 actions/plotman.py:48 models/chia.py:211 -#: models/plotman.py:67 templates/index.html:42 templates/index.html:52 +#: models/plotman.py:67 templates/index/index.html:42 +#: templates/index/index.html:52 msgid "Active" msgstr "Actief" @@ -138,19 +139,46 @@ msgstr "Actief" msgid "Suspended" msgstr "Opgeschort" -#: actions/stats.py:56 actions/stats.py:90 actions/stats.py:108 -#: actions/stats.py:110 +#: actions/stats.py:57 actions/stats.py:92 actions/stats.py:109 +#: actions/stats.py:130 actions/stats.py:132 msgid "in last day." msgstr "in voorbije dag." -#: actions/stats.py:338 +#: actions/stats.py:360 msgid "secs" msgstr "seconden" -#: actions/stats.py:348 models/chia.py:251 +#: actions/stats.py:370 models/chia.py:251 msgid "hour" msgstr "uur" +#: actions/stats.py:399 templates/views/index_script_block.js:51 +msgid "Farmed Coins" +msgstr "" + +#: actions/stats.py:416 +#, fuzzy +msgid "Wallet Balances" +msgstr "Saldo Portefeuille" + +#: actions/stats.py:433 templates/index/index.html:105 +#, fuzzy +msgid "Netspace Size" +msgstr "Netgrootte" + +#: actions/stats.py:434 actions/stats.py:492 +msgid "Size" +msgstr "" + +#: actions/stats.py:472 +msgid "Plot Counts" +msgstr "" + +#: actions/stats.py:491 templates/index/index.html:78 +#, fuzzy +msgid "Plots Size" +msgstr "Totale Omvang Plots" + #: actions/warnings.py:56 msgid "Dismiss Warning" msgstr "Verwerp waarschuwing" @@ -197,11 +225,11 @@ msgstr "Om problemen te voorkomen gebruik een consistente Machinaris versie." msgid "days" msgstr "dagen" -#: models/chia.py:213 templates/summary.html:100 templates/wallet.html:128 +#: models/chia.py:213 templates/summary.html:105 templates/wallet.html:129 msgid "Syncing" msgstr "Synchronisatie" -#: models/chia.py:215 templates/index.html:54 +#: models/chia.py:215 templates/index/index.html:54 msgid "Not available" msgstr "Niet beschikbaar" @@ -209,9 +237,10 @@ msgstr "Niet beschikbaar" msgid "Not synced" msgstr "Niet gesynchroniseerd" -#: models/chia.py:220 templates/index.html:54 templates/plotting/jobs.html:114 -#: templates/plotting/workers.html:116 templates/summary.html:96 -#: templates/wallet.html:124 templates/worker.html:78 templates/workers.html:72 +#: models/chia.py:220 templates/index/index.html:54 +#: templates/plotting/jobs.html:114 templates/plotting/workers.html:116 +#: templates/summary.html:101 templates/wallet.html:125 +#: templates/worker.html:78 templates/workers.html:72 msgid "Offline" msgstr "Offline" @@ -272,16 +301,16 @@ msgid "Alerts: Recent Notifications" msgstr "Waarschuwingen: Recente notificaties" #: templates/alerts.html:72 templates/drives.html:86 -#: templates/settings/alerts.html:36 templates/settings/farming.html:37 -#: templates/settings/plotting.html:37 templates/settings/tools.html:36 -#: templates/worker.html:14 +#: templates/index/chart_farmed.html:52 templates/settings/alerts.html:36 +#: templates/settings/farming.html:37 templates/settings/plotting.html:37 +#: templates/settings/tools.html:36 templates/worker.html:14 msgid "Worker" msgstr "Werker" -#: templates/alerts.html:73 templates/blockchains.html:31 +#: templates/alerts.html:73 templates/blockchains.html:35 #: templates/settings/alerts.html:45 templates/settings/farming.html:46 #: templates/settings/plotting.html:46 templates/settings/tools.html:45 -#: templates/summary.html:73 templates/wallet.html:108 templates/worker.html:47 +#: templates/summary.html:77 templates/wallet.html:108 templates/worker.html:47 #: templates/workers.html:43 msgid "Blockchain" msgstr "Blockchain" @@ -351,17 +380,17 @@ msgstr "Marchinaris" msgid "Summary" msgstr "Samenvatting" -#: templates/base.html:38 templates/base.html:113 templates/index.html:41 +#: templates/base.html:38 templates/base.html:113 templates/index/index.html:41 #: templates/plotting/jobs.html:101 templates/settings/plotting.html:14 msgid "Plotting" msgstr "Plotting" -#: templates/base.html:44 templates/base.html:107 templates/index.html:50 +#: templates/base.html:44 templates/base.html:107 templates/index/index.html:50 #: templates/settings/farming.html:15 msgid "Farming" msgstr "Farming" -#: templates/base.html:50 +#: templates/base.html:50 templates/index/index.html:126 msgid "Wallets" msgstr "Portefeuilles" @@ -388,7 +417,7 @@ msgstr "Pools" #: templates/base.html:86 templates/farming/plots.html:69 #: templates/farming/workers.html:28 templates/plotting/jobs.html:94 -#: templates/plotting/workers.html:96 templates/summary.html:77 +#: templates/plotting/workers.html:96 templates/summary.html:81 #: templates/workers.html:14 msgid "Workers" msgstr "Werkers" @@ -448,48 +477,53 @@ msgstr "Madmax" msgid "Plotman" msgstr "Plotman" -#: templates/blockchains.html:23 +#: templates/blockchains.html:27 msgid "Blockchain Summary" msgstr "Blockchain Samenvatting" -#: templates/blockchains.html:32 templates/drives.html:91 -#: templates/summary.html:74 templates/wallet.html:109 +#: templates/blockchains.html:36 templates/drives.html:91 +#: templates/summary.html:78 templates/wallet.html:109 msgid "Status" msgstr "Status" -#: templates/blockchains.html:33 +#: templates/blockchains.html:37 msgid "Peak Height" msgstr "Piek Hoogte" -#: templates/blockchains.html:34 +#: templates/blockchains.html:38 msgid "Peak Time" msgstr "Piek Tijd" -#: templates/blockchains.html:35 templates/drives.html:93 +#: templates/blockchains.html:39 templates/drives.html:93 #: templates/wallet.html:114 msgid "Updated At" msgstr "Bijgewerkt om" -#: templates/blockchains.html:36 templates/summary.html:87 -#: templates/workers.html:49 -msgid "Logs" -msgstr "Logs" +#: templates/blockchains.html:63 +#, fuzzy +msgid "View Blockchain Details" +msgstr "Blockchain Details" -#: templates/blockchains.html:66 +#: templates/blockchains.html:65 templates/blockchains.html:79 msgid "Blockchain Details" msgstr "Blockchain Details" -#: templates/blockchains.html:91 +#: templates/blockchains.html:69 templates/summary.html:126 +#, fuzzy +msgid "View Blockchain Log" +msgstr "Blockchain download" + +#: templates/blockchains.html:104 msgid "No blockchains found from any farmers. Not added?" msgstr "Geen blockchains gevonden in uw farmers. Niet toegevoegd?" -#: templates/blockchains.html:92 +#: templates/blockchains.html:105 msgid "Try running \"chia show --state\" on your farmers to verify." msgstr "" "Probeer \"chia show --state\" uit te voeren op uw farmers om te " "controleren." -#: templates/blockchains.html:106 templates/summary.html:143 +#: templates/blockchains.html:119 templates/summary.html:152 msgid "Fullnode Log for " msgstr "" @@ -663,46 +697,6 @@ msgstr "" "Voor meer info, zie de Machinaris " "%(wiki_link_open)swiki%(wiki_link_close)s." -#: templates/index.html:30 -msgid "Expected Time to Win" -msgstr "Verwachte Tijd om te Winnen" - -#: templates/index.html:72 -msgid "Total Plots" -msgstr "Totaal Aantal Plots" - -#: templates/index.html:79 -msgid "Total Plots Size" -msgstr "Totale Omvang Plots" - -#: templates/index.html:89 templates/wallet.html:113 -msgid "Balance" -msgstr "Saldo" - -#: templates/index.html:96 -msgid "Farmed" -msgstr "Farmed" - -#: templates/index.html:105 -msgid "Netspace" -msgstr "Netgrootte" - -#: templates/index.html:120 -msgid "Challenges from Harvesters" -msgstr "Uitdagingen van Harvesters" - -#: templates/index.html:136 -msgid "Partial Proofs for Pools" -msgstr "Gedeeltelijke bewijzen voor Pools" - -#: templates/farming/workers.html:80 templates/index.html:147 -msgid "Previous" -msgstr "Vorige" - -#: templates/farming/workers.html:84 templates/index.html:151 -msgid "Next" -msgstr "Volgende" - #: templates/keys.html:43 msgid "NOTE: Machinaris will never display your private key here." msgstr "NOTA: Machinaris zal hier nooit uw private sleutels tonen." @@ -874,48 +868,53 @@ msgstr "" msgid "Local Currency:" msgstr "Lokale Munt:" -#: templates/summary.html:75 +#: templates/summary.html:79 msgid "Height" msgstr "Hoogte" #: templates/farming/plots.html:66 templates/farming/workers.html:25 -#: templates/summary.html:76 +#: templates/summary.html:80 msgid "Plots" msgstr "Plots" -#: templates/summary.html:78 +#: templates/summary.html:82 msgid "Max Resp." msgstr "Max Resp." -#: templates/summary.html:79 +#: templates/summary.html:83 msgid "Partials" msgstr "Partials" -#: templates/summary.html:80 +#: templates/summary.html:84 msgid "ETW" msgstr "ETW" -#: templates/summary.html:82 +#: templates/summary.html:86 msgid "Wallet" msgstr "Portefeuille" -#: templates/summary.html:83 templates/summary.html:84 +#: templates/summary.html:87 templates/summary.html:88 msgid "EDV" msgstr "EDV" -#: templates/summary.html:98 templates/wallet.html:126 +#: templates/summary.html:103 templates/wallet.html:127 msgid "Synced" msgstr "Gesynchroniseerd" -#: templates/summary.html:102 templates/wallet.html:130 +#: templates/summary.html:107 templates/wallet.html:131 msgid "Not Synced" msgstr "Niet Gesynchroniseerd" -#: templates/summary.html:128 +#: templates/summary.html:123 templates/wallet.html:142 +#, fuzzy +msgid "Chart Wallet" +msgstr "Wijzig Portefeuille" + +#: templates/summary.html:137 msgid "No blockchains found from any farmers. Just starting up?" msgstr "Geen blockchains gevonden in uw farmers. Nog aan het opstarten?" -#: templates/summary.html:129 +#: templates/summary.html:138 msgid "Please allow at least 15 minutes for blockchains to get started." msgstr "Wacht minstens 15 minuten terwijl de blockchains opstarten." @@ -931,7 +930,7 @@ msgstr "Adres Koude Portefeuille" msgid "Wallet Summary" msgstr "Portefeuille Samenvatting" -#: templates/wallet.html:110 +#: templates/index/index.html:89 templates/wallet.html:110 msgid "Wallet Balance" msgstr "Saldo Portefeuille" @@ -939,19 +938,23 @@ msgstr "Saldo Portefeuille" msgid "Cold Wallet Balance" msgstr "Saldo Koude Portefeuille" -#: templates/wallet.html:112 +#: templates/views/index_script_block.js:56 templates/wallet.html:112 msgid "Total Balance" msgstr "Totale Saldo" -#: templates/wallet.html:140 +#: templates/index/index.html:92 templates/wallet.html:113 +msgid "Balance" +msgstr "Saldo" + +#: templates/wallet.html:144 msgid "Edit Wallet" msgstr "Wijzig Portefeuille" -#: templates/wallet.html:151 +#: templates/wallet.html:155 msgid "Wallet Details" msgstr "Portefeuille Details" -#: templates/wallet.html:175 +#: templates/wallet.html:179 msgid "" "No wallet status received. Perhaps just starting? Please allow at least" " 10 minutes to update." @@ -959,7 +962,7 @@ msgstr "" "Geen portefeuille status ontvangen. Nog aan het opstarten? Wacht minstens" " 10 minuten voor updates." -#: templates/wallet.html:176 +#: templates/wallet.html:180 msgid "" "You can also try running \"chia wallet show\" on your fullnode's in-" "container shell to verify." @@ -1047,45 +1050,45 @@ msgstr "Gebruikte Schijfruimte (GB)" msgid "Disk Space Free (GB)" msgstr "Vrije Schijfruimte (GB)" -#: templates/worker_launch.html:50 templates/worker_launch.html:640 -#: templates/worker_launch.html:669 +#: templates/worker_launch.html:50 templates/worker_launch.html:642 +#: templates/worker_launch.html:671 msgid "Host Path" msgstr "Host Pad" -#: templates/worker_launch.html:55 templates/worker_launch.html:645 -#: templates/worker_launch.html:674 +#: templates/worker_launch.html:55 templates/worker_launch.html:647 +#: templates/worker_launch.html:676 msgid "Container Path" msgstr "Container Pad" -#: templates/worker_launch.html:60 templates/worker_launch.html:650 -#: templates/worker_launch.html:679 +#: templates/worker_launch.html:60 templates/worker_launch.html:652 +#: templates/worker_launch.html:681 msgid "Used for:" msgstr "Gebruikt voor:" -#: templates/worker_launch.html:63 templates/worker_launch.html:653 -#: templates/worker_launch.html:682 +#: templates/worker_launch.html:63 templates/worker_launch.html:655 +#: templates/worker_launch.html:684 msgid "Final Plots" msgstr "Finale Plots" -#: templates/worker_launch.html:64 templates/worker_launch.html:654 -#: templates/worker_launch.html:683 +#: templates/worker_launch.html:64 templates/worker_launch.html:656 +#: templates/worker_launch.html:685 msgid "Plotting Temp" msgstr "Plotting Temp" -#: templates/worker_launch.html:65 templates/worker_launch.html:655 -#: templates/worker_launch.html:684 +#: templates/worker_launch.html:65 templates/worker_launch.html:657 +#: templates/worker_launch.html:686 msgid "Other" msgstr "Andere" -#: templates/worker_launch.html:69 templates/worker_launch.html:659 +#: templates/worker_launch.html:69 templates/worker_launch.html:661 msgid "Location" msgstr "Locatie" -#: templates/worker_launch.html:72 templates/worker_launch.html:662 +#: templates/worker_launch.html:72 templates/worker_launch.html:664 msgid "Local" msgstr "Lokaal" -#: templates/worker_launch.html:73 templates/worker_launch.html:663 +#: templates/worker_launch.html:73 templates/worker_launch.html:665 msgid "Remote" msgstr "Extern" @@ -1093,7 +1096,7 @@ msgstr "Extern" msgid "Unknown blockchain fork of selected:" msgstr "Ongekende blockchain fork geselecteerd:" -#: templates/worker_launch.html:284 +#: templates/worker_launch.html:285 msgid "" "Missing worker hostname. Please provide a short name to identify your " "worker." @@ -1101,7 +1104,7 @@ msgstr "" "Ontbrekende werker hostname. Geef een korte naam om uw werker mee te " "identificeren." -#: templates/worker_launch.html:304 +#: templates/worker_launch.html:305 msgid "" "Invalid host path ending with colon. Try adding a slash to the end like " "this" @@ -1109,27 +1112,27 @@ msgstr "" "Ongeldig pad eindigend met een dubbele punt. Probeer een slash toe te " "voegen aan het einde, als volgt" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Empty host path provided for volume at " msgstr "Ongeldige host pad opgegeven voor volume op " -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Please provide a host path." msgstr "Gelieve een host pad op te geven." -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Empty container path provided for volume at " msgstr "Leeg container pad opgegeven voor volume op " -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Please provide a container path." msgstr "Gelieve een container pad op te geven." -#: templates/worker_launch.html:355 +#: templates/worker_launch.html:356 msgid "Neither Harvester or Plottter mode selected. Please choose one or both." msgstr "Noch Harvester noch Plotter modus geselecteerd. Kies een of beide." -#: templates/worker_launch.html:361 +#: templates/worker_launch.html:362 msgid "" "Missing worker IP address. Please provide the IP the controller will " "connect to for commands." @@ -1137,11 +1140,11 @@ msgstr "" "Werker IP adres ontbreekt. Gelieve een IP op te geven waarmee de " "controller zal verbinden voor commandos." -#: templates/worker_launch.html:411 +#: templates/worker_launch.html:413 msgid "Machinaris Worker - Launch Config" msgstr "Machinaris werker - Lanceer Configuratie" -#: templates/worker_launch.html:412 +#: templates/worker_launch.html:414 msgid "" "Complete the form below to run new harvesters/plotters on other computers" " across your network. Save the generated docker-compose.yml file to a " @@ -1153,95 +1156,95 @@ msgstr "" "compose.yml bestand op in een map genaamd \"machinaris\", en voer dan het" " commando \"docker-compose up\" uit via de commandoprompt." -#: templates/worker_launch.html:416 +#: templates/worker_launch.html:418 msgid "Operating System" msgstr "Besturingssysteem" -#: templates/worker_launch.html:422 +#: templates/worker_launch.html:424 msgid "Linux" msgstr "Linux" -#: templates/worker_launch.html:429 +#: templates/worker_launch.html:431 msgid "Macintosh" msgstr "Macintosh" -#: templates/worker_launch.html:436 +#: templates/worker_launch.html:438 msgid "Windows" msgstr "Windows" -#: templates/worker_launch.html:442 +#: templates/worker_launch.html:444 msgid "Machinaris Mode" msgstr "Machinaris Modus" -#: templates/worker_launch.html:448 +#: templates/worker_launch.html:450 msgid "Harvester" msgstr "Harvester" -#: templates/worker_launch.html:455 +#: templates/worker_launch.html:457 msgid "Plotter" msgstr "Plotter" -#: templates/worker_launch.html:463 +#: templates/worker_launch.html:465 msgid "Farmer Public Key" msgstr "Farmer publieke sleutel" -#: templates/worker_launch.html:468 +#: templates/worker_launch.html:470 msgid "Pool Public Key" msgstr "Pool publieke sleutel" -#: templates/worker_launch.html:473 +#: templates/worker_launch.html:475 msgid "Pool Contract Address" msgstr "Pool contract adres" -#: templates/worker_launch.html:478 +#: templates/worker_launch.html:480 msgid "Plot on Startup" msgstr "Plot on Startup" -#: templates/worker_launch.html:484 +#: templates/worker_launch.html:486 msgid "True" msgstr "True" -#: templates/worker_launch.html:491 +#: templates/worker_launch.html:493 msgid "False" msgstr "False" -#: templates/worker_launch.html:499 +#: templates/worker_launch.html:501 msgid "Controller IP Address" msgstr "Controller IP adres" -#: templates/worker_launch.html:504 +#: templates/worker_launch.html:506 msgid "Controller API Port" msgstr "Controller API poort" -#: templates/worker_launch.html:511 +#: templates/worker_launch.html:513 msgid "Worker Hostname" msgstr "Werker hostname" -#: templates/worker_launch.html:516 +#: templates/worker_launch.html:518 msgid "Worker IP Address" msgstr "Werker IP adres" -#: templates/worker_launch.html:523 +#: templates/worker_launch.html:525 msgid "Blockchains to Farm" msgstr "Blockchains to Farm" -#: templates/worker_launch.html:636 +#: templates/worker_launch.html:638 msgid "Volume Mounts" msgstr "Volume Mounts" -#: templates/worker_launch.html:693 +#: templates/worker_launch.html:695 msgid "Add New Volume" msgstr "Voeg nieuw volume toe" -#: templates/worker_launch.html:695 +#: templates/worker_launch.html:697 msgid "Remove Last Volume" msgstr "Verwijder laatste volume" -#: templates/worker_launch.html:702 +#: templates/worker_launch.html:704 msgid "Copy" msgstr "Kopieer" -#: templates/worker_launch.html:706 +#: templates/worker_launch.html:708 msgid "Docker Compose" msgstr "Docker Compose" @@ -1257,6 +1260,10 @@ msgstr "Laatste ping" msgid "Last Successful Ping" msgstr "Laatste succesvolle ping" +#: templates/workers.html:49 +msgid "Logs" +msgstr "Logs" + #: templates/workers.html:94 msgid "Prune Selected" msgstr "Verwijder geselecteerde" @@ -1325,6 +1332,14 @@ msgstr "" "Gelieve na te zien of uw Machinaris container voor deze blockchain actief" " is. Verifieer ook de instellingen op de pagina Waarschuwingen." +#: templates/farming/workers.html:80 templates/index/index.html:176 +msgid "Previous" +msgstr "Vorige" + +#: templates/farming/workers.html:84 templates/index/index.html:180 +msgid "Next" +msgstr "Volgende" + #: templates/farming/workers.html:94 #, python-format msgid "" @@ -1338,6 +1353,69 @@ msgstr "" "%(wiki_link_open)s geconfigureerd %(wiki_link_close)s. Verifieer ook op " "de Werkers pagina of de Chia werker rapporteert naar de controller." +#: templates/index/chart_balances.html:85 templates/index/chart_farmed.html:131 +#: templates/index/chart_netspace.html:91 +#: templates/index/chart_plot_count.html:84 +#: templates/index/chart_plots_size.html:84 templates/plotting/jobs.html:285 +#: templates/views/index_script_block.js:90 +msgid "Date" +msgstr "" + +#: templates/index/chart_balances.html:102 +#: templates/index/chart_farmed.html:148 +#: templates/views/index_script_block.js:107 +msgid "Coins" +msgstr "" + +#: templates/index/chart_farmed.html:48 templates/index/index.html:97 +msgid "Farmed Blocks" +msgstr "" + +#: templates/index/chart_farmed.html:53 +msgid "Plot File" +msgstr "" + +#: templates/index/chart_farmed.html:54 +msgid "Farmed Block" +msgstr "" + +#: templates/index/chart_farmed.html:55 +#, fuzzy +msgid "Farmed At" +msgstr "Farmed" + +#: templates/index/chart_plot_count.html:101 templates/index/index.html:70 +msgid "Plot Count" +msgstr "" + +#: templates/index/index.html:30 +msgid "Expected Time to Win" +msgstr "Verwachte Tijd om te Winnen" + +#: templates/index/index.html:73 +msgid "Total Plots" +msgstr "Totaal Aantal Plots" + +#: templates/index/index.html:81 +msgid "Total Plots Size" +msgstr "Totale Omvang Plots" + +#: templates/index/index.html:101 +msgid "Farmed" +msgstr "Farmed" + +#: templates/index/index.html:111 +msgid "Netspace" +msgstr "Netgrootte" + +#: templates/index/index.html:144 +msgid "Challenges from Harvesters" +msgstr "Uitdagingen van Harvesters" + +#: templates/index/index.html:162 +msgid "Partial Proofs for Pools" +msgstr "Gedeeltelijke bewijzen voor Pools" + #: templates/plotting/jobs.html:9 msgid "Confirm Kill" msgstr "Bevestig Kill" @@ -1441,10 +1519,6 @@ msgstr "Geselecteerde herstarten" msgid "Plotting Speed - k%(k_size)s Plots" msgstr "Plotting snelheid - k%(k_size)s Plots" -#: templates/plotting/jobs.html:285 -msgid "Date" -msgstr "" - #: templates/plotting/jobs.html:302 msgid "Time (minutes)" msgstr "" @@ -1509,7 +1583,7 @@ msgid "Archiving is disabled. See Settings | Plotting page." msgstr "Archivering is uitgeschakeld. Zie pagina Instellingen | Plotting." #: templates/plotting/workers.html:256 -#: templates/views/index_script_block.js:152 +#: templates/views/index_script_block.js:232 msgid "Time - Last 24 Hours" msgstr "" @@ -1602,15 +1676,15 @@ msgstr "Opslaan..." msgid "PlotNFT Log on " msgstr "PlotNFS log op " -#: templates/views/index_script_block.js:85 +#: templates/views/index_script_block.js:163 msgid "Time - Recent" msgstr "" -#: templates/views/index_script_block.js:102 +#: templates/views/index_script_block.js:180 msgid "Time Taken (seconds)" msgstr "" -#: templates/views/index_script_block.js:169 +#: templates/views/index_script_block.js:249 msgid "Partials Submitted" msgstr "" diff --git a/web/translations/pt_PT/LC_MESSAGES/messages.po b/web/translations/pt_PT/LC_MESSAGES/messages.po index d17d6dd9..30799a27 100644 --- a/web/translations/pt_PT/LC_MESSAGES/messages.po +++ b/web/translations/pt_PT/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-13 13:45-0700\n" "Last-Translator: Antonio Casqueiro\n" "Language: pt\n" @@ -18,31 +18,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.1\n" -#: routes.py:90 routes.py:233 +#: routes.py:113 routes.py:256 msgid "Saved local currency setting." msgstr "Gravar definições da moeda local" -#: routes.py:110 +#: routes.py:133 msgid "Blockchain download" msgstr "Descarregando o Blockchain" -#: routes.py:142 +#: routes.py:165 msgid "Unknown plotting form" msgstr "Plotting form desconhecido" -#: routes.py:192 +#: routes.py:215 msgid "Error! Please see logs." msgstr "Erro! Por favor consulte os logs." -#: routes.py:218 +#: routes.py:241 msgid "Unknown alerts form" msgstr "Alerts form desconhecido" -#: routes.py:238 +#: routes.py:261 msgid "Saved cold wallet addresses." msgstr "O endereço da Cold Wallet foi gravado." -#: routes.py:306 +#: routes.py:329 msgid "" "Saved mapping settings. Please allow 10 minutes to generate location " "information for the map." @@ -50,11 +50,11 @@ msgstr "" "A definições do mapa foram gravadas. Por favor aguarde 10 minutos para " "que o mapa seja actualizado com a geolocalização." -#: routes.py:314 +#: routes.py:337 msgid "Unknown form action" msgstr "Form action desconhecida" -#: routes.py:420 +#: routes.py:443 #, fuzzy, python-format msgid "" "No worker at %(worker)s for blockchain %(blockchain)s. Please select " @@ -63,7 +63,7 @@ msgstr "" "Não existe worker no %(worker)s para o blockchain %(blockchain)s. Por " "favor seleccione outro blockchain." -#: routes.py:426 +#: routes.py:449 #, fuzzy, python-format msgid "" "For Alerts config, found no responding fullnode found for %(blockchain)s." @@ -72,7 +72,7 @@ msgstr "" "Na configuração dos Alertas, foi encontrado um fullnode que não responde " "para o %(blockchain)s. Por favor verifica os teus workers." -#: routes.py:431 +#: routes.py:454 #, fuzzy, python-format msgid "" "For Farming config, found no responding fullnode found for " @@ -81,7 +81,7 @@ msgstr "" "Na configuração de Farming, foi encontrado um fullnode que não responde " "para o %(blockchain)s. Por favor verifica os teus workers." -#: routes.py:438 +#: routes.py:461 #, fuzzy, python-format msgid "" "For Plotting config, found no responding fullnode found for " @@ -90,7 +90,7 @@ msgstr "" "Na configuração de Plotting, foi encontrado um fullnode que não responde " "para o %(blockchain)s. Por favor verifica os teus workers." -#: routes.py:443 +#: routes.py:466 #, fuzzy, python-format msgid "" "No responding fullnode found for %(blockchain)s. Please check your " @@ -99,7 +99,7 @@ msgstr "" "Foi encontrado um fullnode que não responde para o %(blockchain)s. Por " "favor verifica os teus workers." -#: routes.py:462 +#: routes.py:485 msgid "Unsupported log type" msgstr "Tipo de log não suportado" @@ -128,7 +128,8 @@ msgid "Idle" msgstr "" #: actions/plotman.py:47 actions/plotman.py:48 models/chia.py:211 -#: models/plotman.py:67 templates/index.html:42 templates/index.html:52 +#: models/plotman.py:67 templates/index/index.html:42 +#: templates/index/index.html:52 #, fuzzy msgid "Active" msgstr "Gravar" @@ -138,19 +139,46 @@ msgstr "Gravar" msgid "Suspended" msgstr "Suspender os seleccionados" -#: actions/stats.py:56 actions/stats.py:90 actions/stats.py:108 -#: actions/stats.py:110 +#: actions/stats.py:57 actions/stats.py:92 actions/stats.py:109 +#: actions/stats.py:130 actions/stats.py:132 msgid "in last day." msgstr "no último dia." -#: actions/stats.py:338 +#: actions/stats.py:360 msgid "secs" msgstr "segs" -#: actions/stats.py:348 models/chia.py:251 +#: actions/stats.py:370 models/chia.py:251 msgid "hour" msgstr "hora" +#: actions/stats.py:399 templates/views/index_script_block.js:51 +msgid "Farmed Coins" +msgstr "" + +#: actions/stats.py:416 +#, fuzzy +msgid "Wallet Balances" +msgstr "Wallet: Saldo" + +#: actions/stats.py:433 templates/index/index.html:105 +#, fuzzy +msgid "Netspace Size" +msgstr "Netspace" + +#: actions/stats.py:434 actions/stats.py:492 +msgid "Size" +msgstr "" + +#: actions/stats.py:472 +msgid "Plot Counts" +msgstr "" + +#: actions/stats.py:491 templates/index/index.html:78 +#, fuzzy +msgid "Plots Size" +msgstr "Plots: Total de espaço ocupado" + #: actions/warnings.py:56 msgid "Dismiss Warning" msgstr "" @@ -200,11 +228,11 @@ msgstr "" msgid "days" msgstr "dias" -#: models/chia.py:213 templates/summary.html:100 templates/wallet.html:128 +#: models/chia.py:213 templates/summary.html:105 templates/wallet.html:129 msgid "Syncing" msgstr "A sincronizar" -#: models/chia.py:215 templates/index.html:54 +#: models/chia.py:215 templates/index/index.html:54 msgid "Not available" msgstr "" @@ -213,9 +241,10 @@ msgstr "" msgid "Not synced" msgstr "Não sincronizado" -#: models/chia.py:220 templates/index.html:54 templates/plotting/jobs.html:114 -#: templates/plotting/workers.html:116 templates/summary.html:96 -#: templates/wallet.html:124 templates/worker.html:78 templates/workers.html:72 +#: models/chia.py:220 templates/index/index.html:54 +#: templates/plotting/jobs.html:114 templates/plotting/workers.html:116 +#: templates/summary.html:101 templates/wallet.html:125 +#: templates/worker.html:78 templates/workers.html:72 msgid "Offline" msgstr "Offline" @@ -276,16 +305,16 @@ msgid "Alerts: Recent Notifications" msgstr "Alertas: Notificações recentes" #: templates/alerts.html:72 templates/drives.html:86 -#: templates/settings/alerts.html:36 templates/settings/farming.html:37 -#: templates/settings/plotting.html:37 templates/settings/tools.html:36 -#: templates/worker.html:14 +#: templates/index/chart_farmed.html:52 templates/settings/alerts.html:36 +#: templates/settings/farming.html:37 templates/settings/plotting.html:37 +#: templates/settings/tools.html:36 templates/worker.html:14 msgid "Worker" msgstr "Worker" -#: templates/alerts.html:73 templates/blockchains.html:31 +#: templates/alerts.html:73 templates/blockchains.html:35 #: templates/settings/alerts.html:45 templates/settings/farming.html:46 #: templates/settings/plotting.html:46 templates/settings/tools.html:45 -#: templates/summary.html:73 templates/wallet.html:108 templates/worker.html:47 +#: templates/summary.html:77 templates/wallet.html:108 templates/worker.html:47 #: templates/workers.html:43 msgid "Blockchain" msgstr "Blockchain" @@ -357,17 +386,17 @@ msgstr "Machinaris" msgid "Summary" msgstr "Sumário" -#: templates/base.html:38 templates/base.html:113 templates/index.html:41 +#: templates/base.html:38 templates/base.html:113 templates/index/index.html:41 #: templates/plotting/jobs.html:101 templates/settings/plotting.html:14 msgid "Plotting" msgstr "Plotting" -#: templates/base.html:44 templates/base.html:107 templates/index.html:50 +#: templates/base.html:44 templates/base.html:107 templates/index/index.html:50 #: templates/settings/farming.html:15 msgid "Farming" msgstr "Farming" -#: templates/base.html:50 +#: templates/base.html:50 templates/index/index.html:126 msgid "Wallets" msgstr "Wallets" @@ -394,7 +423,7 @@ msgstr "Pools" #: templates/base.html:86 templates/farming/plots.html:69 #: templates/farming/workers.html:28 templates/plotting/jobs.html:94 -#: templates/plotting/workers.html:96 templates/summary.html:77 +#: templates/plotting/workers.html:96 templates/summary.html:81 #: templates/workers.html:14 msgid "Workers" msgstr "Workers" @@ -454,48 +483,53 @@ msgstr "Madmax" msgid "Plotman" msgstr "Plotman" -#: templates/blockchains.html:23 +#: templates/blockchains.html:27 msgid "Blockchain Summary" msgstr "Blockchain sumário" -#: templates/blockchains.html:32 templates/drives.html:91 -#: templates/summary.html:74 templates/wallet.html:109 +#: templates/blockchains.html:36 templates/drives.html:91 +#: templates/summary.html:78 templates/wallet.html:109 msgid "Status" msgstr "Estado" -#: templates/blockchains.html:33 +#: templates/blockchains.html:37 msgid "Peak Height" msgstr "Peak Height\"" -#: templates/blockchains.html:34 +#: templates/blockchains.html:38 msgid "Peak Time" msgstr "Peak Time" -#: templates/blockchains.html:35 templates/drives.html:93 +#: templates/blockchains.html:39 templates/drives.html:93 #: templates/wallet.html:114 msgid "Updated At" msgstr "Actualizado em" -#: templates/blockchains.html:36 templates/summary.html:87 -#: templates/workers.html:49 -msgid "Logs" -msgstr "Logs" +#: templates/blockchains.html:63 +#, fuzzy +msgid "View Blockchain Details" +msgstr "Blockchain: Detalhes" -#: templates/blockchains.html:66 +#: templates/blockchains.html:65 templates/blockchains.html:79 msgid "Blockchain Details" msgstr "Blockchain: Detalhes" -#: templates/blockchains.html:91 +#: templates/blockchains.html:69 templates/summary.html:126 +#, fuzzy +msgid "View Blockchain Log" +msgstr "Descarregando o Blockchain" + +#: templates/blockchains.html:104 msgid "No blockchains found from any farmers. Not added?" msgstr "" "Não foi encontrado nenhum blockchain para os farmers. Não foram " "adicionados?" -#: templates/blockchains.html:92 +#: templates/blockchains.html:105 msgid "Try running \"chia show --state\" on your farmers to verify." msgstr "Tente correr \"chia show --state\" nos seus farmers para verificar." -#: templates/blockchains.html:106 templates/summary.html:143 +#: templates/blockchains.html:119 templates/summary.html:152 msgid "Fullnode Log for " msgstr "" @@ -671,46 +705,6 @@ msgstr "" "Para mais informação, veja o Machinaris " "%(wiki_link_open)swiki%(wiki_link_close)s." -#: templates/index.html:30 -msgid "Expected Time to Win" -msgstr "Tempo expectável para ganhar" - -#: templates/index.html:72 -msgid "Total Plots" -msgstr "Plots: Total" - -#: templates/index.html:79 -msgid "Total Plots Size" -msgstr "Plots: Total de espaço ocupado" - -#: templates/index.html:89 templates/wallet.html:113 -msgid "Balance" -msgstr "Saldo" - -#: templates/index.html:96 -msgid "Farmed" -msgstr "Farmed" - -#: templates/index.html:105 -msgid "Netspace" -msgstr "Netspace" - -#: templates/index.html:120 -msgid "Challenges from Harvesters" -msgstr "Challenges das Harvesters" - -#: templates/index.html:136 -msgid "Partial Proofs for Pools" -msgstr "Partial Proofs das Pools" - -#: templates/farming/workers.html:80 templates/index.html:147 -msgid "Previous" -msgstr "Anterior" - -#: templates/farming/workers.html:84 templates/index.html:151 -msgid "Next" -msgstr "Seguinte" - #: templates/keys.html:43 msgid "NOTE: Machinaris will never display your private key here." msgstr "NOTA: Machinaris nunca irá mostrar a tua chave privada aqui." @@ -882,50 +876,55 @@ msgstr "" msgid "Local Currency:" msgstr "Moeda local:" -#: templates/summary.html:75 +#: templates/summary.html:79 msgid "Height" msgstr "Height" #: templates/farming/plots.html:66 templates/farming/workers.html:25 -#: templates/summary.html:76 +#: templates/summary.html:80 msgid "Plots" msgstr "Plots" -#: templates/summary.html:78 +#: templates/summary.html:82 msgid "Max Resp." msgstr "Max Resp." -#: templates/summary.html:79 +#: templates/summary.html:83 msgid "Partials" msgstr "Partials" -#: templates/summary.html:80 +#: templates/summary.html:84 msgid "ETW" msgstr "ETW" -#: templates/summary.html:82 +#: templates/summary.html:86 msgid "Wallet" msgstr "Wallet" -#: templates/summary.html:83 templates/summary.html:84 +#: templates/summary.html:87 templates/summary.html:88 msgid "EDV" msgstr "EDV" -#: templates/summary.html:98 templates/wallet.html:126 +#: templates/summary.html:103 templates/wallet.html:127 msgid "Synced" msgstr "Sincronizado" -#: templates/summary.html:102 templates/wallet.html:130 +#: templates/summary.html:107 templates/wallet.html:131 msgid "Not Synced" msgstr "Não sincronizado" -#: templates/summary.html:128 +#: templates/summary.html:123 templates/wallet.html:142 +#, fuzzy +msgid "Chart Wallet" +msgstr "Editar wallet" + +#: templates/summary.html:137 msgid "No blockchains found from any farmers. Just starting up?" msgstr "" "Não foram encontrados blockchains para nenhum dos farmers. Acabaste de " "arrancar o sistema?" -#: templates/summary.html:129 +#: templates/summary.html:138 msgid "Please allow at least 15 minutes for blockchains to get started." msgstr "Por favor aguarde pelo menos 15 minutos para os blockchains iniciarem." @@ -941,7 +940,7 @@ msgstr "Endereço da Cold Wallet:" msgid "Wallet Summary" msgstr "Wallet: Sumário" -#: templates/wallet.html:110 +#: templates/index/index.html:89 templates/wallet.html:110 msgid "Wallet Balance" msgstr "Wallet: Saldo" @@ -949,19 +948,23 @@ msgstr "Wallet: Saldo" msgid "Cold Wallet Balance" msgstr "Cold Wallet: Saldo" -#: templates/wallet.html:112 +#: templates/views/index_script_block.js:56 templates/wallet.html:112 msgid "Total Balance" msgstr "Saldo" -#: templates/wallet.html:140 +#: templates/index/index.html:92 templates/wallet.html:113 +msgid "Balance" +msgstr "Saldo" + +#: templates/wallet.html:144 msgid "Edit Wallet" msgstr "Editar wallet" -#: templates/wallet.html:151 +#: templates/wallet.html:155 msgid "Wallet Details" msgstr "Detalhes da Wallet" -#: templates/wallet.html:175 +#: templates/wallet.html:179 msgid "" "No wallet status received. Perhaps just starting? Please allow at least" " 10 minutes to update." @@ -969,7 +972,7 @@ msgstr "" "O estado da Wallet ainda não foi recebido. Acabaste de arrancar o " "sistema? Por favor aguarda pelo menos 10 minutos para a actualização." -#: templates/wallet.html:176 +#: templates/wallet.html:180 msgid "" "You can also try running \"chia wallet show\" on your fullnode's in-" "container shell to verify." @@ -1057,46 +1060,46 @@ msgstr "Espaço em disco usado (GB)" msgid "Disk Space Free (GB)" msgstr "Espaço em disco livre (GB)" -#: templates/worker_launch.html:50 templates/worker_launch.html:640 -#: templates/worker_launch.html:669 +#: templates/worker_launch.html:50 templates/worker_launch.html:642 +#: templates/worker_launch.html:671 msgid "Host Path" msgstr "Host path" -#: templates/worker_launch.html:55 templates/worker_launch.html:645 -#: templates/worker_launch.html:674 +#: templates/worker_launch.html:55 templates/worker_launch.html:647 +#: templates/worker_launch.html:676 msgid "Container Path" msgstr "Container path" -#: templates/worker_launch.html:60 templates/worker_launch.html:650 -#: templates/worker_launch.html:679 +#: templates/worker_launch.html:60 templates/worker_launch.html:652 +#: templates/worker_launch.html:681 msgid "Used for:" msgstr "Usado para:" -#: templates/worker_launch.html:63 templates/worker_launch.html:653 -#: templates/worker_launch.html:682 +#: templates/worker_launch.html:63 templates/worker_launch.html:655 +#: templates/worker_launch.html:684 msgid "Final Plots" msgstr "Plots finais" -#: templates/worker_launch.html:64 templates/worker_launch.html:654 -#: templates/worker_launch.html:683 +#: templates/worker_launch.html:64 templates/worker_launch.html:656 +#: templates/worker_launch.html:685 msgid "Plotting Temp" msgstr "Plotting temp" -#: templates/worker_launch.html:65 templates/worker_launch.html:655 -#: templates/worker_launch.html:684 +#: templates/worker_launch.html:65 templates/worker_launch.html:657 +#: templates/worker_launch.html:686 msgid "Other" msgstr "Outros" -#: templates/worker_launch.html:69 templates/worker_launch.html:659 +#: templates/worker_launch.html:69 templates/worker_launch.html:661 #, fuzzy msgid "Location" msgstr "Notifcação" -#: templates/worker_launch.html:72 templates/worker_launch.html:662 +#: templates/worker_launch.html:72 templates/worker_launch.html:664 msgid "Local" msgstr "" -#: templates/worker_launch.html:73 templates/worker_launch.html:663 +#: templates/worker_launch.html:73 templates/worker_launch.html:665 msgid "Remote" msgstr "" @@ -1104,7 +1107,7 @@ msgstr "" msgid "Unknown blockchain fork of selected:" msgstr "Unknown blockchain fork of selected:" -#: templates/worker_launch.html:284 +#: templates/worker_launch.html:285 msgid "" "Missing worker hostname. Please provide a short name to identify your " "worker." @@ -1112,7 +1115,7 @@ msgstr "" "Falta o hostname do Worker. Por favor indique um nome cursto para " "identificar o Worker." -#: templates/worker_launch.html:304 +#: templates/worker_launch.html:305 msgid "" "Invalid host path ending with colon. Try adding a slash to the end like " "this" @@ -1120,29 +1123,29 @@ msgstr "" "Host path inválido terminado com dois pontos. Tente adicionar o caracter " "'/' no final assim" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Empty host path provided for volume at " msgstr "Foi indicado um host path vazio para o volume em " -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Please provide a host path." msgstr "Por favor indique um host path." -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Empty container path provided for volume at " msgstr "Foi indicado um container path vazio para o volume em " -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Please provide a container path." msgstr "Por favor indique um container path." -#: templates/worker_launch.html:355 +#: templates/worker_launch.html:356 msgid "Neither Harvester or Plottter mode selected. Please choose one or both." msgstr "" "Não foi seleccionado o modo Harvester nem o modo Plottter. Por favor " "escolha um ou ambos." -#: templates/worker_launch.html:361 +#: templates/worker_launch.html:362 msgid "" "Missing worker IP address. Please provide the IP the controller will " "connect to for commands." @@ -1150,11 +1153,11 @@ msgstr "" "Falta o endereço IP do Worker. Por favor indique o endereço IP que o " "controlador irá ligar-se para comandos." -#: templates/worker_launch.html:411 +#: templates/worker_launch.html:413 msgid "Machinaris Worker - Launch Config" msgstr "Machinaris Worker - Configuração de arranque" -#: templates/worker_launch.html:412 +#: templates/worker_launch.html:414 msgid "" "Complete the form below to run new harvesters/plotters on other computers" " across your network. Save the generated docker-compose.yml file to a " @@ -1166,95 +1169,95 @@ msgstr "" "numa pasta chamada \"machinaris\", depois executa \"docker-compose up\" a" " partir da linha de comandos." -#: templates/worker_launch.html:416 +#: templates/worker_launch.html:418 msgid "Operating System" msgstr "Sistema operativo" -#: templates/worker_launch.html:422 +#: templates/worker_launch.html:424 msgid "Linux" msgstr "Linux" -#: templates/worker_launch.html:429 +#: templates/worker_launch.html:431 msgid "Macintosh" msgstr "Macintosh" -#: templates/worker_launch.html:436 +#: templates/worker_launch.html:438 msgid "Windows" msgstr "Windows" -#: templates/worker_launch.html:442 +#: templates/worker_launch.html:444 msgid "Machinaris Mode" msgstr "Modo do Machinaris" -#: templates/worker_launch.html:448 +#: templates/worker_launch.html:450 msgid "Harvester" msgstr "Harvester" -#: templates/worker_launch.html:455 +#: templates/worker_launch.html:457 msgid "Plotter" msgstr "Plotter" -#: templates/worker_launch.html:463 +#: templates/worker_launch.html:465 msgid "Farmer Public Key" msgstr "Farmer chave pública" -#: templates/worker_launch.html:468 +#: templates/worker_launch.html:470 msgid "Pool Public Key" msgstr "Pool chave pública" -#: templates/worker_launch.html:473 +#: templates/worker_launch.html:475 msgid "Pool Contract Address" msgstr "Pool endereço do contrato" -#: templates/worker_launch.html:478 +#: templates/worker_launch.html:480 msgid "Plot on Startup" msgstr "Iniciar plotting ao arrancar" -#: templates/worker_launch.html:484 +#: templates/worker_launch.html:486 msgid "True" msgstr "Verdadeiro" -#: templates/worker_launch.html:491 +#: templates/worker_launch.html:493 msgid "False" msgstr "False" -#: templates/worker_launch.html:499 +#: templates/worker_launch.html:501 msgid "Controller IP Address" msgstr "Controlador: Endereço IP" -#: templates/worker_launch.html:504 +#: templates/worker_launch.html:506 msgid "Controller API Port" msgstr "Controlador: Porto da API" -#: templates/worker_launch.html:511 +#: templates/worker_launch.html:513 msgid "Worker Hostname" msgstr "Worker: Hostname" -#: templates/worker_launch.html:516 +#: templates/worker_launch.html:518 msgid "Worker IP Address" msgstr "Worker: Endereço IP" -#: templates/worker_launch.html:523 +#: templates/worker_launch.html:525 msgid "Blockchains to Farm" msgstr "Blockchains to Farm" -#: templates/worker_launch.html:636 +#: templates/worker_launch.html:638 msgid "Volume Mounts" msgstr "Volumes montados" -#: templates/worker_launch.html:693 +#: templates/worker_launch.html:695 msgid "Add New Volume" msgstr "Adicionar um novo volume" -#: templates/worker_launch.html:695 +#: templates/worker_launch.html:697 msgid "Remove Last Volume" msgstr "Remover o último volume" -#: templates/worker_launch.html:702 +#: templates/worker_launch.html:704 msgid "Copy" msgstr "Copiar" -#: templates/worker_launch.html:706 +#: templates/worker_launch.html:708 msgid "Docker Compose" msgstr "Docker Compose" @@ -1270,6 +1273,10 @@ msgstr "Último ping" msgid "Last Successful Ping" msgstr "Último ping com sucesso" +#: templates/workers.html:49 +msgid "Logs" +msgstr "Logs" + #: templates/workers.html:94 msgid "Prune Selected" msgstr "Eliminar os seleccionados" @@ -1340,6 +1347,14 @@ msgstr "" "Por favor verifique que o container Machinaris para este blockchain está " "a correr. Por favor verifique também as definições na página de Alertas." +#: templates/farming/workers.html:80 templates/index/index.html:176 +msgid "Previous" +msgstr "Anterior" + +#: templates/farming/workers.html:84 templates/index/index.html:180 +msgid "Next" +msgstr "Seguinte" + #: templates/farming/workers.html:94 #, python-format msgid "" @@ -1354,6 +1369,69 @@ msgstr "" "%(wiki_link_close)s. Verifique ainda que o Chia worker está a reportar " "para o Conttrolador na página dos Workers." +#: templates/index/chart_balances.html:85 templates/index/chart_farmed.html:131 +#: templates/index/chart_netspace.html:91 +#: templates/index/chart_plot_count.html:84 +#: templates/index/chart_plots_size.html:84 templates/plotting/jobs.html:285 +#: templates/views/index_script_block.js:90 +msgid "Date" +msgstr "" + +#: templates/index/chart_balances.html:102 +#: templates/index/chart_farmed.html:148 +#: templates/views/index_script_block.js:107 +msgid "Coins" +msgstr "" + +#: templates/index/chart_farmed.html:48 templates/index/index.html:97 +msgid "Farmed Blocks" +msgstr "" + +#: templates/index/chart_farmed.html:53 +msgid "Plot File" +msgstr "" + +#: templates/index/chart_farmed.html:54 +msgid "Farmed Block" +msgstr "" + +#: templates/index/chart_farmed.html:55 +#, fuzzy +msgid "Farmed At" +msgstr "Farmed" + +#: templates/index/chart_plot_count.html:101 templates/index/index.html:70 +msgid "Plot Count" +msgstr "" + +#: templates/index/index.html:30 +msgid "Expected Time to Win" +msgstr "Tempo expectável para ganhar" + +#: templates/index/index.html:73 +msgid "Total Plots" +msgstr "Plots: Total" + +#: templates/index/index.html:81 +msgid "Total Plots Size" +msgstr "Plots: Total de espaço ocupado" + +#: templates/index/index.html:101 +msgid "Farmed" +msgstr "Farmed" + +#: templates/index/index.html:111 +msgid "Netspace" +msgstr "Netspace" + +#: templates/index/index.html:144 +msgid "Challenges from Harvesters" +msgstr "Challenges das Harvesters" + +#: templates/index/index.html:162 +msgid "Partial Proofs for Pools" +msgstr "Partial Proofs das Pools" + #: templates/plotting/jobs.html:9 msgid "Confirm Kill" msgstr "Confirmar que é para matar" @@ -1457,10 +1535,6 @@ msgstr "Retomar os seleccionados" msgid "Plotting Speed - k%(k_size)s Plots" msgstr "Velocidade de Plotting - k%(k_size)s Plots" -#: templates/plotting/jobs.html:285 -msgid "Date" -msgstr "" - #: templates/plotting/jobs.html:302 msgid "Time (minutes)" msgstr "" @@ -1526,7 +1600,7 @@ msgid "Archiving is disabled. See Settings | Plotting page." msgstr "Arquivar: Desactivado. Veja a página Definições | Plotting." #: templates/plotting/workers.html:256 -#: templates/views/index_script_block.js:152 +#: templates/views/index_script_block.js:232 msgid "Time - Last 24 Hours" msgstr "" @@ -1622,15 +1696,15 @@ msgstr "Gravando..." msgid "PlotNFT Log on " msgstr "PlotNFT Log de " -#: templates/views/index_script_block.js:85 +#: templates/views/index_script_block.js:163 msgid "Time - Recent" msgstr "" -#: templates/views/index_script_block.js:102 +#: templates/views/index_script_block.js:180 msgid "Time Taken (seconds)" msgstr "" -#: templates/views/index_script_block.js:169 +#: templates/views/index_script_block.js:249 msgid "Partials Submitted" msgstr "" diff --git a/web/translations/zh/LC_MESSAGES/messages.po b/web/translations/zh/LC_MESSAGES/messages.po index a96e3747..32d98f30 100644 --- a/web/translations/zh/LC_MESSAGES/messages.po +++ b/web/translations/zh/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-04-23 11:14-0600\n" +"POT-Creation-Date: 2022-06-06 20:47-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: Guy Davis\n" "Language: zh\n" @@ -19,76 +19,76 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.10.1\n" -#: routes.py:90 routes.py:233 +#: routes.py:113 routes.py:256 msgid "Saved local currency setting." msgstr "" -#: routes.py:110 +#: routes.py:133 msgid "Blockchain download" msgstr "" -#: routes.py:142 +#: routes.py:165 msgid "Unknown plotting form" msgstr "" -#: routes.py:192 +#: routes.py:215 msgid "Error! Please see logs." msgstr "" -#: routes.py:218 +#: routes.py:241 msgid "Unknown alerts form" msgstr "" -#: routes.py:238 +#: routes.py:261 msgid "Saved cold wallet addresses." msgstr "" -#: routes.py:306 +#: routes.py:329 msgid "" "Saved mapping settings. Please allow 10 minutes to generate location " "information for the map." msgstr "" -#: routes.py:314 +#: routes.py:337 msgid "Unknown form action" msgstr "" -#: routes.py:420 +#: routes.py:443 #, python-format msgid "" "No worker at %(worker)s for blockchain %(blockchain)s. Please select " "another blockchain." msgstr "" -#: routes.py:426 +#: routes.py:449 #, python-format msgid "" "For Alerts config, found no responding fullnode found for %(blockchain)s." " Please check your workers." msgstr "" -#: routes.py:431 +#: routes.py:454 #, python-format msgid "" "For Farming config, found no responding fullnode found for " "%(blockchain)s. Please check your workers." msgstr "" -#: routes.py:438 +#: routes.py:461 #, python-format msgid "" "For Plotting config, found no responding fullnode found for " "%(blockchain)s. Please check your workers." msgstr "" -#: routes.py:443 +#: routes.py:466 #, python-format msgid "" "No responding fullnode found for %(blockchain)s. Please check your " "workers." msgstr "" -#: routes.py:462 +#: routes.py:485 msgid "Unsupported log type" msgstr "" @@ -116,7 +116,8 @@ msgid "Idle" msgstr "" #: actions/plotman.py:47 actions/plotman.py:48 models/chia.py:211 -#: models/plotman.py:67 templates/index.html:42 templates/index.html:52 +#: models/plotman.py:67 templates/index/index.html:42 +#: templates/index/index.html:52 msgid "Active" msgstr "" @@ -124,19 +125,43 @@ msgstr "" msgid "Suspended" msgstr "" -#: actions/stats.py:56 actions/stats.py:90 actions/stats.py:108 -#: actions/stats.py:110 +#: actions/stats.py:57 actions/stats.py:92 actions/stats.py:109 +#: actions/stats.py:130 actions/stats.py:132 msgid "in last day." msgstr "" -#: actions/stats.py:338 +#: actions/stats.py:360 msgid "secs" msgstr "" -#: actions/stats.py:348 models/chia.py:251 +#: actions/stats.py:370 models/chia.py:251 msgid "hour" msgstr "" +#: actions/stats.py:399 templates/views/index_script_block.js:51 +msgid "Farmed Coins" +msgstr "" + +#: actions/stats.py:416 +msgid "Wallet Balances" +msgstr "" + +#: actions/stats.py:433 templates/index/index.html:105 +msgid "Netspace Size" +msgstr "" + +#: actions/stats.py:434 actions/stats.py:492 +msgid "Size" +msgstr "" + +#: actions/stats.py:472 +msgid "Plot Counts" +msgstr "" + +#: actions/stats.py:491 templates/index/index.html:78 +msgid "Plots Size" +msgstr "" + #: actions/warnings.py:56 msgid "Dismiss Warning" msgstr "" @@ -178,11 +203,11 @@ msgstr "" msgid "days" msgstr "" -#: models/chia.py:213 templates/summary.html:100 templates/wallet.html:128 +#: models/chia.py:213 templates/summary.html:105 templates/wallet.html:129 msgid "Syncing" msgstr "" -#: models/chia.py:215 templates/index.html:54 +#: models/chia.py:215 templates/index/index.html:54 msgid "Not available" msgstr "" @@ -190,9 +215,10 @@ msgstr "" msgid "Not synced" msgstr "" -#: models/chia.py:220 templates/index.html:54 templates/plotting/jobs.html:114 -#: templates/plotting/workers.html:116 templates/summary.html:96 -#: templates/wallet.html:124 templates/worker.html:78 templates/workers.html:72 +#: models/chia.py:220 templates/index/index.html:54 +#: templates/plotting/jobs.html:114 templates/plotting/workers.html:116 +#: templates/summary.html:101 templates/wallet.html:125 +#: templates/worker.html:78 templates/workers.html:72 msgid "Offline" msgstr "" @@ -253,16 +279,16 @@ msgid "Alerts: Recent Notifications" msgstr "" #: templates/alerts.html:72 templates/drives.html:86 -#: templates/settings/alerts.html:36 templates/settings/farming.html:37 -#: templates/settings/plotting.html:37 templates/settings/tools.html:36 -#: templates/worker.html:14 +#: templates/index/chart_farmed.html:52 templates/settings/alerts.html:36 +#: templates/settings/farming.html:37 templates/settings/plotting.html:37 +#: templates/settings/tools.html:36 templates/worker.html:14 msgid "Worker" msgstr "" -#: templates/alerts.html:73 templates/blockchains.html:31 +#: templates/alerts.html:73 templates/blockchains.html:35 #: templates/settings/alerts.html:45 templates/settings/farming.html:46 #: templates/settings/plotting.html:46 templates/settings/tools.html:45 -#: templates/summary.html:73 templates/wallet.html:108 templates/worker.html:47 +#: templates/summary.html:77 templates/wallet.html:108 templates/worker.html:47 #: templates/workers.html:43 msgid "Blockchain" msgstr "" @@ -330,17 +356,17 @@ msgstr "" msgid "Summary" msgstr "" -#: templates/base.html:38 templates/base.html:113 templates/index.html:41 +#: templates/base.html:38 templates/base.html:113 templates/index/index.html:41 #: templates/plotting/jobs.html:101 templates/settings/plotting.html:14 msgid "Plotting" msgstr "" -#: templates/base.html:44 templates/base.html:107 templates/index.html:50 +#: templates/base.html:44 templates/base.html:107 templates/index/index.html:50 #: templates/settings/farming.html:15 msgid "Farming" msgstr "" -#: templates/base.html:50 +#: templates/base.html:50 templates/index/index.html:126 msgid "Wallets" msgstr "" @@ -367,7 +393,7 @@ msgstr "" #: templates/base.html:86 templates/farming/plots.html:69 #: templates/farming/workers.html:28 templates/plotting/jobs.html:94 -#: templates/plotting/workers.html:96 templates/summary.html:77 +#: templates/plotting/workers.html:96 templates/summary.html:81 #: templates/workers.html:14 msgid "Workers" msgstr "" @@ -427,46 +453,49 @@ msgstr "" msgid "Plotman" msgstr "" -#: templates/blockchains.html:23 +#: templates/blockchains.html:27 msgid "Blockchain Summary" msgstr "" -#: templates/blockchains.html:32 templates/drives.html:91 -#: templates/summary.html:74 templates/wallet.html:109 +#: templates/blockchains.html:36 templates/drives.html:91 +#: templates/summary.html:78 templates/wallet.html:109 msgid "Status" msgstr "" -#: templates/blockchains.html:33 +#: templates/blockchains.html:37 msgid "Peak Height" msgstr "" -#: templates/blockchains.html:34 +#: templates/blockchains.html:38 msgid "Peak Time" msgstr "" -#: templates/blockchains.html:35 templates/drives.html:93 +#: templates/blockchains.html:39 templates/drives.html:93 #: templates/wallet.html:114 msgid "Updated At" msgstr "" -#: templates/blockchains.html:36 templates/summary.html:87 -#: templates/workers.html:49 -msgid "Logs" +#: templates/blockchains.html:63 +msgid "View Blockchain Details" msgstr "" -#: templates/blockchains.html:66 +#: templates/blockchains.html:65 templates/blockchains.html:79 msgid "Blockchain Details" msgstr "" -#: templates/blockchains.html:91 +#: templates/blockchains.html:69 templates/summary.html:126 +msgid "View Blockchain Log" +msgstr "" + +#: templates/blockchains.html:104 msgid "No blockchains found from any farmers. Not added?" msgstr "" -#: templates/blockchains.html:92 +#: templates/blockchains.html:105 msgid "Try running \"chia show --state\" on your farmers to verify." msgstr "" -#: templates/blockchains.html:106 templates/summary.html:143 +#: templates/blockchains.html:119 templates/summary.html:152 msgid "Fullnode Log for " msgstr "" @@ -633,46 +662,6 @@ msgstr "" msgid "For more, see the Machinaris %(wiki_link_open)swiki%(wiki_link_close)s." msgstr "" -#: templates/index.html:30 -msgid "Expected Time to Win" -msgstr "" - -#: templates/index.html:72 -msgid "Total Plots" -msgstr "" - -#: templates/index.html:79 -msgid "Total Plots Size" -msgstr "" - -#: templates/index.html:89 templates/wallet.html:113 -msgid "Balance" -msgstr "" - -#: templates/index.html:96 -msgid "Farmed" -msgstr "" - -#: templates/index.html:105 -msgid "Netspace" -msgstr "" - -#: templates/index.html:120 -msgid "Challenges from Harvesters" -msgstr "" - -#: templates/index.html:136 -msgid "Partial Proofs for Pools" -msgstr "" - -#: templates/farming/workers.html:80 templates/index.html:147 -msgid "Previous" -msgstr "" - -#: templates/farming/workers.html:84 templates/index.html:151 -msgid "Next" -msgstr "" - #: templates/keys.html:43 msgid "NOTE: Machinaris will never display your private key here." msgstr "" @@ -821,48 +810,52 @@ msgstr "" msgid "Local Currency:" msgstr "" -#: templates/summary.html:75 +#: templates/summary.html:79 msgid "Height" msgstr "" #: templates/farming/plots.html:66 templates/farming/workers.html:25 -#: templates/summary.html:76 +#: templates/summary.html:80 msgid "Plots" msgstr "" -#: templates/summary.html:78 +#: templates/summary.html:82 msgid "Max Resp." msgstr "" -#: templates/summary.html:79 +#: templates/summary.html:83 msgid "Partials" msgstr "" -#: templates/summary.html:80 +#: templates/summary.html:84 msgid "ETW" msgstr "" -#: templates/summary.html:82 +#: templates/summary.html:86 msgid "Wallet" msgstr "" -#: templates/summary.html:83 templates/summary.html:84 +#: templates/summary.html:87 templates/summary.html:88 msgid "EDV" msgstr "" -#: templates/summary.html:98 templates/wallet.html:126 +#: templates/summary.html:103 templates/wallet.html:127 msgid "Synced" msgstr "" -#: templates/summary.html:102 templates/wallet.html:130 +#: templates/summary.html:107 templates/wallet.html:131 msgid "Not Synced" msgstr "" -#: templates/summary.html:128 +#: templates/summary.html:123 templates/wallet.html:142 +msgid "Chart Wallet" +msgstr "" + +#: templates/summary.html:137 msgid "No blockchains found from any farmers. Just starting up?" msgstr "" -#: templates/summary.html:129 +#: templates/summary.html:138 msgid "Please allow at least 15 minutes for blockchains to get started." msgstr "" @@ -878,7 +871,7 @@ msgstr "" msgid "Wallet Summary" msgstr "" -#: templates/wallet.html:110 +#: templates/index/index.html:89 templates/wallet.html:110 msgid "Wallet Balance" msgstr "" @@ -886,25 +879,29 @@ msgstr "" msgid "Cold Wallet Balance" msgstr "" -#: templates/wallet.html:112 +#: templates/views/index_script_block.js:56 templates/wallet.html:112 msgid "Total Balance" msgstr "" -#: templates/wallet.html:140 +#: templates/index/index.html:92 templates/wallet.html:113 +msgid "Balance" +msgstr "" + +#: templates/wallet.html:144 msgid "Edit Wallet" msgstr "" -#: templates/wallet.html:151 +#: templates/wallet.html:155 msgid "Wallet Details" msgstr "" -#: templates/wallet.html:175 +#: templates/wallet.html:179 msgid "" "No wallet status received. Perhaps just starting? Please allow at least" " 10 minutes to update." msgstr "" -#: templates/wallet.html:176 +#: templates/wallet.html:180 msgid "" "You can also try running \"chia wallet show\" on your fullnode's in-" "container shell to verify." @@ -990,45 +987,45 @@ msgstr "" msgid "Disk Space Free (GB)" msgstr "" -#: templates/worker_launch.html:50 templates/worker_launch.html:640 -#: templates/worker_launch.html:669 +#: templates/worker_launch.html:50 templates/worker_launch.html:642 +#: templates/worker_launch.html:671 msgid "Host Path" msgstr "" -#: templates/worker_launch.html:55 templates/worker_launch.html:645 -#: templates/worker_launch.html:674 +#: templates/worker_launch.html:55 templates/worker_launch.html:647 +#: templates/worker_launch.html:676 msgid "Container Path" msgstr "" -#: templates/worker_launch.html:60 templates/worker_launch.html:650 -#: templates/worker_launch.html:679 +#: templates/worker_launch.html:60 templates/worker_launch.html:652 +#: templates/worker_launch.html:681 msgid "Used for:" msgstr "" -#: templates/worker_launch.html:63 templates/worker_launch.html:653 -#: templates/worker_launch.html:682 +#: templates/worker_launch.html:63 templates/worker_launch.html:655 +#: templates/worker_launch.html:684 msgid "Final Plots" msgstr "" -#: templates/worker_launch.html:64 templates/worker_launch.html:654 -#: templates/worker_launch.html:683 +#: templates/worker_launch.html:64 templates/worker_launch.html:656 +#: templates/worker_launch.html:685 msgid "Plotting Temp" msgstr "" -#: templates/worker_launch.html:65 templates/worker_launch.html:655 -#: templates/worker_launch.html:684 +#: templates/worker_launch.html:65 templates/worker_launch.html:657 +#: templates/worker_launch.html:686 msgid "Other" msgstr "" -#: templates/worker_launch.html:69 templates/worker_launch.html:659 +#: templates/worker_launch.html:69 templates/worker_launch.html:661 msgid "Location" msgstr "" -#: templates/worker_launch.html:72 templates/worker_launch.html:662 +#: templates/worker_launch.html:72 templates/worker_launch.html:664 msgid "Local" msgstr "" -#: templates/worker_launch.html:73 templates/worker_launch.html:663 +#: templates/worker_launch.html:73 templates/worker_launch.html:665 msgid "Remote" msgstr "" @@ -1036,49 +1033,49 @@ msgstr "" msgid "Unknown blockchain fork of selected:" msgstr "" -#: templates/worker_launch.html:284 +#: templates/worker_launch.html:285 msgid "" "Missing worker hostname. Please provide a short name to identify your " "worker." msgstr "" -#: templates/worker_launch.html:304 +#: templates/worker_launch.html:305 msgid "" "Invalid host path ending with colon. Try adding a slash to the end like " "this" msgstr "" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Empty host path provided for volume at " msgstr "" -#: templates/worker_launch.html:307 +#: templates/worker_launch.html:308 msgid "Please provide a host path." msgstr "" -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Empty container path provided for volume at " msgstr "" -#: templates/worker_launch.html:309 +#: templates/worker_launch.html:310 msgid "Please provide a container path." msgstr "" -#: templates/worker_launch.html:355 +#: templates/worker_launch.html:356 msgid "Neither Harvester or Plottter mode selected. Please choose one or both." msgstr "" -#: templates/worker_launch.html:361 +#: templates/worker_launch.html:362 msgid "" "Missing worker IP address. Please provide the IP the controller will " "connect to for commands." msgstr "" -#: templates/worker_launch.html:411 +#: templates/worker_launch.html:413 msgid "Machinaris Worker - Launch Config" msgstr "" -#: templates/worker_launch.html:412 +#: templates/worker_launch.html:414 msgid "" "Complete the form below to run new harvesters/plotters on other computers" " across your network. Save the generated docker-compose.yml file to a " @@ -1086,95 +1083,95 @@ msgid "" "shell." msgstr "" -#: templates/worker_launch.html:416 +#: templates/worker_launch.html:418 msgid "Operating System" msgstr "" -#: templates/worker_launch.html:422 +#: templates/worker_launch.html:424 msgid "Linux" msgstr "" -#: templates/worker_launch.html:429 +#: templates/worker_launch.html:431 msgid "Macintosh" msgstr "" -#: templates/worker_launch.html:436 +#: templates/worker_launch.html:438 msgid "Windows" msgstr "" -#: templates/worker_launch.html:442 +#: templates/worker_launch.html:444 msgid "Machinaris Mode" msgstr "" -#: templates/worker_launch.html:448 +#: templates/worker_launch.html:450 msgid "Harvester" msgstr "" -#: templates/worker_launch.html:455 +#: templates/worker_launch.html:457 msgid "Plotter" msgstr "" -#: templates/worker_launch.html:463 +#: templates/worker_launch.html:465 msgid "Farmer Public Key" msgstr "" -#: templates/worker_launch.html:468 +#: templates/worker_launch.html:470 msgid "Pool Public Key" msgstr "" -#: templates/worker_launch.html:473 +#: templates/worker_launch.html:475 msgid "Pool Contract Address" msgstr "" -#: templates/worker_launch.html:478 +#: templates/worker_launch.html:480 msgid "Plot on Startup" msgstr "" -#: templates/worker_launch.html:484 +#: templates/worker_launch.html:486 msgid "True" msgstr "" -#: templates/worker_launch.html:491 +#: templates/worker_launch.html:493 msgid "False" msgstr "" -#: templates/worker_launch.html:499 +#: templates/worker_launch.html:501 msgid "Controller IP Address" msgstr "" -#: templates/worker_launch.html:504 +#: templates/worker_launch.html:506 msgid "Controller API Port" msgstr "" -#: templates/worker_launch.html:511 +#: templates/worker_launch.html:513 msgid "Worker Hostname" msgstr "" -#: templates/worker_launch.html:516 +#: templates/worker_launch.html:518 msgid "Worker IP Address" msgstr "" -#: templates/worker_launch.html:523 +#: templates/worker_launch.html:525 msgid "Blockchains to Farm" msgstr "" -#: templates/worker_launch.html:636 +#: templates/worker_launch.html:638 msgid "Volume Mounts" msgstr "" -#: templates/worker_launch.html:693 +#: templates/worker_launch.html:695 msgid "Add New Volume" msgstr "" -#: templates/worker_launch.html:695 +#: templates/worker_launch.html:697 msgid "Remove Last Volume" msgstr "" -#: templates/worker_launch.html:702 +#: templates/worker_launch.html:704 msgid "Copy" msgstr "" -#: templates/worker_launch.html:706 +#: templates/worker_launch.html:708 msgid "Docker Compose" msgstr "" @@ -1190,6 +1187,10 @@ msgstr "" msgid "Last Successful Ping" msgstr "" +#: templates/workers.html:49 +msgid "Logs" +msgstr "" + #: templates/workers.html:94 msgid "Prune Selected" msgstr "" @@ -1254,6 +1255,14 @@ msgid "" "running. Also please verify settings on the Alerts page." msgstr "" +#: templates/farming/workers.html:80 templates/index/index.html:176 +msgid "Previous" +msgstr "" + +#: templates/farming/workers.html:84 templates/index/index.html:180 +msgid "Next" +msgstr "" + #: templates/farming/workers.html:94 #, python-format msgid "" @@ -1263,6 +1272,68 @@ msgid "" "worker is reporting into the controller on the Workers page." msgstr "" +#: templates/index/chart_balances.html:85 templates/index/chart_farmed.html:131 +#: templates/index/chart_netspace.html:91 +#: templates/index/chart_plot_count.html:84 +#: templates/index/chart_plots_size.html:84 templates/plotting/jobs.html:285 +#: templates/views/index_script_block.js:90 +msgid "Date" +msgstr "" + +#: templates/index/chart_balances.html:102 +#: templates/index/chart_farmed.html:148 +#: templates/views/index_script_block.js:107 +msgid "Coins" +msgstr "" + +#: templates/index/chart_farmed.html:48 templates/index/index.html:97 +msgid "Farmed Blocks" +msgstr "" + +#: templates/index/chart_farmed.html:53 +msgid "Plot File" +msgstr "" + +#: templates/index/chart_farmed.html:54 +msgid "Farmed Block" +msgstr "" + +#: templates/index/chart_farmed.html:55 +msgid "Farmed At" +msgstr "" + +#: templates/index/chart_plot_count.html:101 templates/index/index.html:70 +msgid "Plot Count" +msgstr "" + +#: templates/index/index.html:30 +msgid "Expected Time to Win" +msgstr "" + +#: templates/index/index.html:73 +msgid "Total Plots" +msgstr "" + +#: templates/index/index.html:81 +msgid "Total Plots Size" +msgstr "" + +#: templates/index/index.html:101 +msgid "Farmed" +msgstr "" + +#: templates/index/index.html:111 +msgid "Netspace" +msgstr "" + +#: templates/index/index.html:144 +msgid "Challenges from Harvesters" +msgstr "" + +#: templates/index/index.html:162 +msgid "Partial Proofs for Pools" +msgstr "" + #: templates/plotting/jobs.html:9 msgid "Confirm Kill" msgstr "" @@ -1354,10 +1425,6 @@ msgstr "" msgid "Plotting Speed - k%(k_size)s Plots" msgstr "" -#: templates/plotting/jobs.html:285 -msgid "Date" -msgstr "" - #: templates/plotting/jobs.html:302 msgid "Time (minutes)" msgstr "" @@ -1413,7 +1480,7 @@ msgid "Archiving is disabled. See Settings | Plotting page." msgstr "" #: templates/plotting/workers.html:256 -#: templates/views/index_script_block.js:152 +#: templates/views/index_script_block.js:232 msgid "Time - Last 24 Hours" msgstr "" @@ -1499,15 +1566,15 @@ msgstr "" msgid "PlotNFT Log on " msgstr "" -#: templates/views/index_script_block.js:85 +#: templates/views/index_script_block.js:163 msgid "Time - Recent" msgstr "" -#: templates/views/index_script_block.js:102 +#: templates/views/index_script_block.js:180 msgid "Time Taken (seconds)" msgstr "" -#: templates/views/index_script_block.js:169 +#: templates/views/index_script_block.js:249 msgid "Partials Submitted" msgstr "" From ca6b31bd332215d743dc3ee538419b273f4b4151 Mon Sep 17 00:00:00 2001 From: Guy Davis Date: Tue, 7 Jun 2022 17:23:19 -0600 Subject: [PATCH 35/79] Updates for charts and i18n. --- CHANGELOG.md | 2 +- api/models/chia.py | 2 +- .../de_DE/LC_MESSAGES/messages.po | 2 +- .../fr_FR/LC_MESSAGES/messages.po | 2 +- .../it_IT/LC_MESSAGES/messages.po | 2 +- .../nl_NL/LC_MESSAGES/messages.po | 2 +- .../pt_PT/LC_MESSAGES/messages.po | 2 +- api/translations/zh/LC_MESSAGES/messages.po | 2 +- scripts/forks/mmx_install.sh | 4 +- web/actions/stats.py | 4 +- web/templates/connections.html | 29 ++++++- web/templates/index/chart_farmed.html | 4 +- web/templates/index/index.html | 4 +- web/templates/plotting/jobs.html | 9 +- .../de_DE/LC_MESSAGES/messages.po | 83 ++++++++++++------- .../fr_FR/LC_MESSAGES/messages.po | 83 ++++++++++++------- .../it_IT/LC_MESSAGES/messages.po | 83 ++++++++++++------- .../nl_NL/LC_MESSAGES/messages.po | 83 ++++++++++++------- .../pt_PT/LC_MESSAGES/messages.po | 83 ++++++++++++------- web/translations/zh/LC_MESSAGES/messages.po | 80 +++++++++++------- 20 files changed, 365 insertions(+), 200 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe7368ee..2f2907ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.7.3] - 2022-06-? - - Wallets - chart each blockchain's farmed coins and wallet balances over the past month. + - Charting of each blockchain's farmed coins and wallet balances over the past month. - [Chia](https://github.com/Chia-Network/chia-blockchain) - v1.3.6 pre-release for testing - [Cactus](https://github.com/Cactus-Network/cactus-blockchain) - v1.3.4, matches Chia 1.3.4, please run: `cactus db upgrade` - [Chives](https://github.com/HiveProject2021/chives-blockchain) - v1.3.1, please run: `chives db upgrade` diff --git a/api/models/chia.py b/api/models/chia.py index f4f6ea6c..97eede8b 100644 --- a/api/models/chia.py +++ b/api/models/chia.py @@ -97,7 +97,7 @@ def __init__(self, wallets, cold_wallet_addresses={}): 'total_balance': total_balance, 'updated_at': wallet.updated_at }) else: - app.logger.info("Skipping blockchain {0}".format(wallet.blockchain)) + app.logger.debug("api.models.Wallets.init(): Skipping blockchain {0}".format(wallet.blockchain)) def exclude_cat_wallets(self, wallet_details): details = [] diff --git a/api/translations/de_DE/LC_MESSAGES/messages.po b/api/translations/de_DE/LC_MESSAGES/messages.po index 9a81e82a..380d86e2 100644 --- a/api/translations/de_DE/LC_MESSAGES/messages.po +++ b/api/translations/de_DE/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-06-06 20:47-0600\n" +"POT-Creation-Date: 2022-06-07 10:26-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: ApfelBirneKreis\n" "Language: de\n" diff --git a/api/translations/fr_FR/LC_MESSAGES/messages.po b/api/translations/fr_FR/LC_MESSAGES/messages.po index a63d5ee7..8c89d452 100644 --- a/api/translations/fr_FR/LC_MESSAGES/messages.po +++ b/api/translations/fr_FR/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-06-06 20:47-0600\n" +"POT-Creation-Date: 2022-06-07 10:26-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: Guy Davis\n" "Language: fr\n" diff --git a/api/translations/it_IT/LC_MESSAGES/messages.po b/api/translations/it_IT/LC_MESSAGES/messages.po index 7c5c6d4f..afd7fe4f 100644 --- a/api/translations/it_IT/LC_MESSAGES/messages.po +++ b/api/translations/it_IT/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-06-06 20:47-0600\n" +"POT-Creation-Date: 2022-06-07 10:26-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: Fabrizio Cacicia\n" "Language: it\n" diff --git a/api/translations/nl_NL/LC_MESSAGES/messages.po b/api/translations/nl_NL/LC_MESSAGES/messages.po index 7c50daac..ac175409 100644 --- a/api/translations/nl_NL/LC_MESSAGES/messages.po +++ b/api/translations/nl_NL/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris/issuesPOT-" "Creation-Date: 2022-03-13 10:30-0600\n" -"POT-Creation-Date: 2022-06-06 20:47-0600\n" +"POT-Creation-Date: 2022-06-07 10:26-0600\n" "PO-Revision-Date: 2022-03-13 10:29-0600\n" "Last-Translator: Bernie Deprez\n" "Language: nl_NL\n" diff --git a/api/translations/pt_PT/LC_MESSAGES/messages.po b/api/translations/pt_PT/LC_MESSAGES/messages.po index cb303b8b..9c233eda 100644 --- a/api/translations/pt_PT/LC_MESSAGES/messages.po +++ b/api/translations/pt_PT/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-06-06 20:47-0600\n" +"POT-Creation-Date: 2022-06-07 10:26-0600\n" "PO-Revision-Date: 2022-02-13 13:45-0700\n" "Last-Translator: Antonio Casqueiro\n" "Language: pt\n" diff --git a/api/translations/zh/LC_MESSAGES/messages.po b/api/translations/zh/LC_MESSAGES/messages.po index 73e243c1..e183d932 100644 --- a/api/translations/zh/LC_MESSAGES/messages.po +++ b/api/translations/zh/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Machinaris VERSION\n" "Report-Msgid-Bugs-To: https://github.com/guydavis/machinaris" "/issuesCreation-Date: 2022-02-16 15:00-0700\n" -"POT-Creation-Date: 2022-06-06 20:47-0600\n" +"POT-Creation-Date: 2022-06-07 10:26-0600\n" "PO-Revision-Date: 2022-02-15 14:29-0700\n" "Last-Translator: Guy Davis\n" "Language: zh\n" diff --git a/scripts/forks/mmx_install.sh b/scripts/forks/mmx_install.sh index c53561bf..83321d63 100644 --- a/scripts/forks/mmx_install.sh +++ b/scripts/forks/mmx_install.sh @@ -4,8 +4,8 @@ # MMX_BRANCH=$1 -# On 2022-06-02 -HASH=f8ea5be1b2fb61160898d0164cad152da25f4c45 +# On 2022-06-07 +HASH=7b2a969adc382aff9d7b736dd3883e8c09fdcf74 if [ -z ${MMX_BRANCH} ]; then echo 'Skipping MMX install as not requested.' diff --git a/web/actions/stats.py b/web/actions/stats.py index 80fe9ddd..c5130621 100644 --- a/web/actions/stats.py +++ b/web/actions/stats.py @@ -407,13 +407,13 @@ def load_wallet_balances(blockchain): for i in range(len(result)): s = result[i] converted_date = converters.convert_date_for_luxon(s.created_at) - if (last_value != s.value) or (i % 24 == 0) or (i == len(result) - 1): + if (last_value != s.value) or ((i + 12) % 24 == 0) or (i == len(result) - 1): dates.append(converted_date) values.append(s.value) last_value = s.value #app.logger.info(dates) #app.logger.info(values) - return { 'title': blockchain.capitalize() + ' - ' + _('Wallet Balances'), 'dates': dates, 'vals': values} + return { 'title': blockchain.capitalize() + ' - ' + _('Total Balance'), 'dates': dates, 'vals': values} def load_netspace_size(blockchain): dates = [] diff --git a/web/templates/connections.html b/web/templates/connections.html index 8b682b75..3e47934c 100644 --- a/web/templates/connections.html +++ b/web/templates/connections.html @@ -77,11 +77,11 @@ {% endfor %} -{% if maxmind_license %} -
    {{_('Connections Map')}}
    + +{% if maxmind_license %}

    -
    - {{_('Connection Details')}} +{% else %} +
    +
    + + + +

    {{_('Map your network peers around the world')}}...

    + {% autoescape false %} +

    {{_('To get started, you\'ll need a %(maxmind_link)s%(b_tag_open)sFREE%(b_tag_close)s Maxmind account%(a_tag_close)s to + allow Machinaris to geolocate your network peer IP addresses. %(i_tag_open)sOptionally%(i_tag_close)s, you can also get + better looking map tiles with a %(mapbox_link)s%(b_tag_open)sFREE%(b_tag_close)s Mapbox account%(a_tag_close)s.', + maxmind_link='', + mapbox_link='', + i_tag_open='', i_tag_close='', b_tag_open='', b_tag_close='', a_tag_close='')}} + {{_('To enter your map account details, click the Settings (gear icon) button on the top-right of this page.')}} +

    + {% endautoescape %} +
    +
    {% endif %} +
    + {{_('Connection Details')}} +
    + {% if connections.rows|length > 0 %}