diff --git a/src/database/sql/core/fast-stats.sql b/src/database/sql/core/fast-stats.sql deleted file mode 100644 index 96f8fef4..00000000 --- a/src/database/sql/core/fast-stats.sql +++ /dev/null @@ -1,15 +0,0 @@ --- selectMinStableHeight -SELECT MIN(height) AS min_height -FROM stable_blocks - --- selectMaxStableHeight -SELECT MAX(height) AS max_height -FROM stable_blocks - --- selectMinNewHeight -SELECT MIN(height) AS min_height -FROM new_blocks - --- selectMaxNewHeight -SELECT MAX(height) AS max_height -FROM new_blocks diff --git a/src/database/sql/core/slow-stats.sql b/src/database/sql/core/slow-stats.sql deleted file mode 100644 index 7c4750e5..00000000 --- a/src/database/sql/core/slow-stats.sql +++ /dev/null @@ -1,35 +0,0 @@ --- selectWalletsCount -SELECT COUNT(*) AS count -FROM wallets - --- selectTagNamesCount -SELECT COUNT(*) AS count -FROM tag_names - --- selectTagValuesCount -SELECT COUNT(*) AS count -FROM tag_values - --- selectStableTransactionsCount -SELECT COUNT(*) AS count -FROM stable_transactions - --- selectStableBlockCount -SELECT COUNT(*) AS count -FROM stable_blocks - --- selectStableBlockTransactionCount -SELECT IFNULL(SUM(tx_count), 0) AS count -FROM stable_blocks - --- selectMissingTransactionsCount -SELECT COUNT(*) AS count -FROM missing_transactions - --- selectNewTransactionsCount -SELECT COUNT(*) AS count -FROM new_transactions - --- selectNewBlocksCount -SELECT COUNT(*) AS count -FROM new_blocks diff --git a/src/database/sql/core/stats.sql b/src/database/sql/core/stats.sql new file mode 100644 index 00000000..a09b8cf5 --- /dev/null +++ b/src/database/sql/core/stats.sql @@ -0,0 +1,60 @@ +-- selectChainStats +WITH wallet_stats AS ( + SELECT + COUNT(*) AS wallets_count + FROM wallets +), +tag_name_stats AS ( + SELECT + COUNT(*) AS tag_names_count + FROM tag_names +), +tag_value_stats AS ( + SELECT + COUNT(*) AS tag_values_count + FROM tag_values +), +stable_block_stats AS ( + SELECT + COUNT(*) AS stable_blocks_count, + IFNULL(SUM(tx_count), 0) AS stable_block_txs_count, + MIN(height) AS stable_blocks_min_height, + MAX(height) AS stable_blocks_max_height + FROM stable_blocks +), +new_block_stats AS ( + SELECT + COUNT(*) AS new_blocks_count, + MIN(height) AS new_blocks_min_height, + MAX(height) AS new_blocks_max_height + FROM new_blocks +), +stable_transaction_stats AS ( + SELECT + COUNT(*) AS stable_txs_count, + MIN(height) AS stable_txs_min_height, + MAX(height) AS stable_txs_max_height + FROM stable_transactions +), +new_transaction_stats AS ( + SELECT + COUNT(*) AS new_txs_count, + MIN(height) AS new_txs_min_height, + MAX(height) AS new_txs_max_height + FROM new_transactions +), +missing_transactions_stats AS ( + SELECT + COUNT(*) AS missing_txs_count + FROM missing_transactions +) +SELECT * +FROM + wallet_stats, + tag_name_stats, + tag_value_stats, + stable_block_stats, + new_block_stats, + stable_transaction_stats, + new_transaction_stats, + missing_transactions_stats diff --git a/src/database/standalone-sqlite.ts b/src/database/standalone-sqlite.ts index c4bab012..82c2c33d 100644 --- a/src/database/standalone-sqlite.ts +++ b/src/database/standalone-sqlite.ts @@ -904,32 +904,41 @@ export class StandaloneSqliteDatabaseWorker { } getDebugInfo() { - const minStableHeight = - this.stmts.core.selectMinStableHeight.get().min_height; - const maxStableHeight = - this.stmts.core.selectMaxStableHeight.get().max_height; - const stableTxsCount = - this.stmts.core.selectStableTransactionsCount.get().count; - const stableBlocksCount = - this.stmts.core.selectStableBlockCount.get().count; - const stableBlockTxsCount = - this.stmts.core.selectStableBlockTransactionCount.get().count; - const missingStableBlockCount = - maxStableHeight - (minStableHeight - 1) - stableBlocksCount; - const missingStableTxCount = stableBlockTxsCount - stableTxsCount; - + const chainStats = this.stmts.core.selectChainStats.get(); const bundleStats = this.stmts.bundles.selectBundleStats.get(); const dataItemStats = this.stmts.bundles.selectDataItemStats.get(); + const now = currentUnixTimestamp(); + const warnings: string[] = []; const errors: string[] = []; - const now = currentUnixTimestamp(); + let missingStableBlockCount = 0; + if (chainStats.stable_blocks_max_height != undefined) { + missingStableBlockCount = + (chainStats.stable_blocks_max_height ?? 0) - + (chainStats.stable_blocks_min_height + ? chainStats.stable_blocks_min_height - 1 + : 0) - + chainStats.stable_blocks_count; + } + + if (missingStableBlockCount > 0) { + const error = ` + Stable block count (${chainStats.stable_blocks_count}) does not match + stable block height range (${chainStats.stable_blocks_min_height} to + ${chainStats.stable_blocks_max_height}). + `.replace(/\s+/g, ' '); + errors.push(error); + } + + const missingStableTxCount = + chainStats.stable_block_txs_count - chainStats.stable_txs_count; - if (stableTxsCount !== stableBlockTxsCount) { + if (missingStableTxCount > 0) { const error = ` - Stable transaction count (${stableTxsCount}) does not match - stable block transaction count (${stableBlockTxsCount}) + Stable transaction count (${chainStats.stable_txs_count}) does not match + stable block transaction count (${chainStats.stable_block_txs_count}). ` .replace(/\s+/g, ' ') .trim(); @@ -947,19 +956,17 @@ export class StandaloneSqliteDatabaseWorker { return { counts: { - wallets: this.stmts.core.selectWalletsCount.get().count, - tagNames: this.stmts.core.selectTagNamesCount.get().count, - tagValues: this.stmts.core.selectTagValuesCount.get().count, - stableTxs: stableTxsCount, - stableBlocks: stableBlocksCount, - // TODO fix nulls - stableBlockTxs: - this.stmts.core.selectStableBlockTransactionCount.get().count, + wallets: chainStats.wallets_count, + tagNames: chainStats.tag_names_count, + tagValues: chainStats.tag_values_count, + stableTxs: chainStats.stable_txs_count, + stableBlocks: chainStats.stable_blocks_count, + stableBlockTxs: chainStats.stable_block_txs_count, missingStableBlocks: missingStableBlockCount, missingStableTxs: missingStableTxCount, - missingTxs: this.stmts.core.selectMissingTransactionsCount.get().count, - newBlocks: this.stmts.core.selectNewBlocksCount.get().count, - newTxs: this.stmts.core.selectNewTransactionsCount.get().count, + missingTxs: chainStats.missing_txs_count, + newBlocks: chainStats.new_blocks_count, + newTxs: chainStats.new_txs_count, bundleCount: bundleStats.count, bundleDataItems: bundleStats.data_item_count, matcheDataItems: bundleStats.matched_data_item_count, @@ -967,10 +974,10 @@ export class StandaloneSqliteDatabaseWorker { nestedDataItems: dataItemStats.nested_data_item_count, }, heights: { - minStable: minStableHeight ?? -1, - maxStable: maxStableHeight ?? -1, - minNew: this.stmts.core.selectMinNewHeight.get().min_height, - maxNew: this.stmts.core.selectMaxNewHeight.get().max_height, + minStable: chainStats.stable_blocks_min_height ?? -1, + maxStable: chainStats.stable_blocks_max_height ?? -1, + minNew: chainStats.new_blocks_min_height ?? -1, + maxNew: chainStats.new_blocks_max_height ?? -1, }, timestamps: { now: currentUnixTimestamp(),