From 9b1bd4ee64143bd46b145b69ae68eba05bee0d6b Mon Sep 17 00:00:00 2001 From: "Ciro S. Costa" Date: Thu, 14 Apr 2022 11:54:27 -0400 Subject: [PATCH] wip Signed-off-by: Ciro S. Costa --- .images.lock.yaml | 10 ++-- examples/docker-compose.base.yaml | 4 +- examples/docker-compose.yaml | 8 ++-- examples/monerod/Dockerfile | 4 +- pkg/collector/collector_lastblock.go | 69 +++++++++++++++++++++++++--- run.sh | 1 + 6 files changed, 77 insertions(+), 19 deletions(-) create mode 100755 run.sh diff --git a/.images.lock.yaml b/.images.lock.yaml index 31ffbbc..eb0dfef 100644 --- a/.images.lock.yaml +++ b/.images.lock.yaml @@ -1,16 +1,16 @@ apiVersion: kbld.k14s.io/v1alpha1 kind: Config -minimumRequiredVersion: 0.30.0 +minimumRequiredVersion: develop overrides: - image: monero-exporter - newImage: index.docker.io/utxobr/monero-exporter@sha256:737413b1054583535e835e1417b61a8d59a4c08723e4a15c61c4249c2a7d69a4 + newImage: index.docker.io/utxobr/monero-exporter@sha256:2772b74aa89c4ec01c4032b96c4fea45c7d8a24183f40404773d68049d093451 preresolved: true - image: monero-exporter-grafana - newImage: index.docker.io/utxobr/monero-exporter-grafana@sha256:0e9f595487e7ee07f9059f75c302ce56fbe559074c0ba95a1d46a9a3c1c859a2 + newImage: index.docker.io/utxobr/monero-exporter-grafana@sha256:5f8ec91d95491d1912a5e2fed5eadbe19160e69336e30f02c8f78a1a01ba80ef preresolved: true - image: monero-exporter-monerod - newImage: index.docker.io/utxobr/monero-exporter-monerod@sha256:19d889447ba4f703957d952ac753b330d5a2d7e324c98eac1f0f3d8bf2744817 + newImage: index.docker.io/utxobr/monero-exporter-monerod@sha256:c821833ca024a0ccb74e467054f4b7842d641d854062b0cc0d80d20a71d69339 preresolved: true - image: monero-exporter-prometheus - newImage: index.docker.io/utxobr/monero-exporter-prometheus@sha256:21fcd719c6a3c8de35d513887e6666a5c49a15be742e328c034511cd60b5573e + newImage: index.docker.io/utxobr/monero-exporter-prometheus@sha256:bdc0a4e9c1bb6d7ddc65051fecc948b03efacae2c49261c44efccabe2f5912d8 preresolved: true diff --git a/examples/docker-compose.base.yaml b/examples/docker-compose.base.yaml index 13ea726..31e1a69 100644 --- a/examples/docker-compose.base.yaml +++ b/examples/docker-compose.base.yaml @@ -36,7 +36,7 @@ services: - --rpc-bind-ip=127.0.0.1 - --rpc-bind-port=18081 - --rpc-restricted-bind-ip=0.0.0.0 - - --rpc-restricted-bind-port=18089 + - --rpc-restricted-bind-pmort=18089 monero-exporter: container_name: monero-exporter @@ -54,7 +54,7 @@ services: command: - --config.file=/etc/prometheus/config.yaml - --storage.tsdb.path=/data - - --storage.tsdb.retention.time=30d + - --storage.tsdb.retention.time=90d grafana: container_name: grafana diff --git a/examples/docker-compose.yaml b/examples/docker-compose.yaml index bbcbb61..6c9c02e 100644 --- a/examples/docker-compose.yaml +++ b/examples/docker-compose.yaml @@ -22,11 +22,11 @@ services: - --check-updates=disabled - --data-dir=/data - --enforce-dns-checkpointing - - --in-peers=1024 + - --in-peers=2048 - --limit-rate=999999 - --no-igd - --no-zmq - - --out-peers=32 + - --out-peers=64 - --p2p-bind-ip=0.0.0.0 - --p2p-bind-port=18080 - --public-node @@ -35,7 +35,7 @@ services: - --rpc-restricted-bind-ip=0.0.0.0 - --rpc-restricted-bind-port=18089 container_name: monerod - image: index.docker.io/utxobr/monero-exporter-monerod@sha256:19d889447ba4f703957d952ac753b330d5a2d7e324c98eac1f0f3d8bf2744817 + image: index.docker.io/utxobr/monero-exporter-monerod@sha256:15a70938c401a744b34d278fa345fb2e66fae8b428929ae52f1cea455e5bfcd9 ports: - 18080:18080 - 18089:18089 @@ -45,7 +45,7 @@ services: command: - --config.file=/etc/prometheus/config.yaml - --storage.tsdb.path=/data - - --storage.tsdb.retention.time=30d + - --storage.tsdb.retention.time=180d container_name: prometheus image: index.docker.io/utxobr/monero-exporter-prometheus@sha256:21fcd719c6a3c8de35d513887e6666a5c49a15be742e328c034511cd60b5573e volumes: diff --git a/examples/monerod/Dockerfile b/examples/monerod/Dockerfile index f286960..6a53c16 100644 --- a/examples/monerod/Dockerfile +++ b/examples/monerod/Dockerfile @@ -4,8 +4,8 @@ ARG RUNTIME_IMAGE=gcr.io/distroless/base@sha256:97f9cbf81590c7dd878d7e10c20116fa FROM $BUILDER_IMAGE AS builder - ARG MONERO_VERSION=0.17.2.0 - ARG MONERO_SHA256=59e16c53b2aff8d9ab7a8ba3279ee826ac1f2480fbb98e79a149e6be23dd9086 + ARG MONERO_VERSION=0.17.3.0 + ARG MONERO_SHA256=ac18ce3d1189410a5c175984827d5d601974733303411f6142296d647f6582ce RUN set -ex && \ apt update && \ diff --git a/pkg/collector/collector_lastblock.go b/pkg/collector/collector_lastblock.go index 7f1fa88..b019ad1 100644 --- a/pkg/collector/collector_lastblock.go +++ b/pkg/collector/collector_lastblock.go @@ -99,16 +99,24 @@ func (c *LastBlockStatsCollector) fetchData(ctx context.Context) error { } func (c *LastBlockStatsCollector) collectBlockSize() { - desc := prometheus.NewDesc( - "monero_lastblock_size_bytes", - "total size of the last block", - nil, nil, + c.metricsC <- prometheus.MustNewConstMetric( + prometheus.NewDesc( + "monero_lastblock_size_bytes", + "total size of the last block", + nil, nil, + ), + prometheus.GaugeValue, + float64(c.header.BlockSize), ) c.metricsC <- prometheus.MustNewConstMetric( - desc, + prometheus.NewDesc( + "monero_lastblock_weight_bytes", + "total weight of the last block", + nil, nil, + ), prometheus.GaugeValue, - float64(c.header.BlockSize), + float64(c.header.BlockWeight), ) } @@ -236,6 +244,55 @@ func (c *LastBlockStatsCollector) collectTransactionsSize() { ) } +// - transaction weight for a miner transaciton or a normal transaction with +// two outputs is equal to the size in bytes. +// - a bulletproof occupies ((2*[log_2(64p)]+9)*32) bytes +// +// +// ref: https://github.com/monero-project/monero/blob/a9cb4c082f1a815076674b543d93159a2137540e/src/cryptonote_basic/cryptonote_format_utils.cpp#L106 +// +func (c *LastBlockStatsCollector) computeTransactionWeight(idx int) float64 { + const bpBase uint = 368 + + txn := c.txns[idx] + txnSize := uint(c.txnSizes[idx]) + + numberOfOutputs := uint(len(txn.Vout)) + if numberOfOutputs <= 2 { + return float64(txnSize) + } + + nlr := uint(0) + for { + if (1 << nlr) < numberOfOutputs { + break + } + nlr++ + } + nlr += 6 + + bpSize := 32 * (9 + 2*nlr) + bpClawback := (bpBase*numberOfOutputs - bpSize) * 4 / 5 + + return float64(txnSize + bpClawback) +} + +func (c *LastBlockStatsCollector) collectTransactionsWeight() { + summary := NewSummary() + for idx := range c.txnSizes { + summary.Insert(c.computeTransactionWeight(idx)) + } + + c.metricsC <- prometheus.MustNewConstSummary( + prometheus.NewDesc( + "monero_lastblock_transactions_weight_bytes", + "distribution of the weight of the transactions included", + nil, nil, + ), + summary.Count(), summary.Sum(), summary.Quantiles(), + ) +} + func (c *LastBlockStatsCollector) collectTransactionsInputs() { summary := NewSummary() for _, txn := range c.txns { diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..6976dd8 --- /dev/null +++ b/run.sh @@ -0,0 +1 @@ +docker-compose -f ./examples/docker-compose.yaml up -d