From 0c2d3242584f00c94166fabbc3418f9d047567f4 Mon Sep 17 00:00:00 2001 From: Ben Carman Date: Thu, 23 Jan 2020 14:45:33 -0600 Subject: [PATCH] CLI command for filter and filter header counts (#1063) --- .../src/main/scala/org/bitcoins/cli/Cli.scala | 14 ++++++++++ .../org/bitcoins/server/RoutesSpec.scala | 28 +++++++++++++++++++ .../org/bitcoins/server/ChainRoutes.scala | 12 ++++++++ .../org/bitcoins/chain/api/ChainApi.scala | 4 +-- 4 files changed, 56 insertions(+), 2 deletions(-) diff --git a/app/cli/src/main/scala/org/bitcoins/cli/Cli.scala b/app/cli/src/main/scala/org/bitcoins/cli/Cli.scala index e9b51406e3..aaa22e64cb 100644 --- a/app/cli/src/main/scala/org/bitcoins/cli/Cli.scala +++ b/app/cli/src/main/scala/org/bitcoins/cli/Cli.scala @@ -36,6 +36,8 @@ object CliCommand { // Chain case object GetBestBlockHash extends CliCommand case object GetBlockCount extends CliCommand + case object GetFilterCount extends CliCommand + case object GetFilterHeaderCount extends CliCommand case class Rescan( addressBatchSize: Option[Int], startBlock: Option[BlockStamp], @@ -63,6 +65,14 @@ object Cli extends App { .hidden() .action((_, conf) => conf.copy(command = GetBlockCount)) .text(s"Get the block height"), + cmd("getfiltercount") + .hidden() + .action((_, conf) => conf.copy(command = GetFilterCount)) + .text(s"Get the number of filters"), + cmd("getfilterheadercount") + .hidden() + .action((_, conf) => conf.copy(command = GetFilterHeaderCount)) + .text(s"Get the number of filter headers"), cmd("getbestblockhash") .hidden() .action((_, conf) => conf.copy(command = GetBestBlockHash)) @@ -211,6 +221,10 @@ object Cli extends App { Seq(up.writeJs(address), up.writeJs(bitcoins))) // height case GetBlockCount => RequestParam("getblockcount") + // filter count + case GetFilterCount => RequestParam("getfiltercount") + // filter header count + case GetFilterHeaderCount => RequestParam("getfilterheadercount") // besthash case GetBestBlockHash => RequestParam("getbestblockhash") // peers diff --git a/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala b/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala index a191a13993..663812cdcc 100644 --- a/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala +++ b/app/server-test/src/test/scala/org/bitcoins/server/RoutesSpec.scala @@ -65,6 +65,34 @@ class RoutesSpec } } + "return the filter count" in { + (mockChainApi.getFilterCount: () => Future[Int]) + .expects() + .returning(Future.successful(1234567890)) + + val route = + chainRoutes.handleCommand(ServerCommand("getfiltercount", Arr())) + + Get() ~> route ~> check { + contentType shouldEqual `application/json` + responseAs[String] shouldEqual """{"result":1234567890,"error":null}""" + } + } + + "return the filter header count" in { + (mockChainApi.getFilterHeaderCount: () => Future[Int]) + .expects() + .returning(Future.successful(1234567890)) + + val route = + chainRoutes.handleCommand(ServerCommand("getfilterheadercount", Arr())) + + Get() ~> route ~> check { + contentType shouldEqual `application/json` + responseAs[String] shouldEqual """{"result":1234567890,"error":null}""" + } + } + "return the best block hash" in { (mockChainApi.getBestBlockHash: () => Future[DoubleSha256DigestBE]) .expects() diff --git a/app/server/src/main/scala/org/bitcoins/server/ChainRoutes.scala b/app/server/src/main/scala/org/bitcoins/server/ChainRoutes.scala index c75052b20d..f8d8a0be02 100644 --- a/app/server/src/main/scala/org/bitcoins/server/ChainRoutes.scala +++ b/app/server/src/main/scala/org/bitcoins/server/ChainRoutes.scala @@ -20,6 +20,18 @@ case class ChainRoutes(chain: ChainApi)(implicit system: ActorSystem) Server.httpSuccess(count) } } + case ServerCommand("getfiltercount", _) => + complete { + chain.getFilterCount().map { count => + Server.httpSuccess(count) + } + } + case ServerCommand("getfilterheadercount", _) => + complete { + chain.getFilterHeaderCount().map { count => + Server.httpSuccess(count) + } + } case ServerCommand("getbestblockhash", _) => complete { chain.getBestBlockHash.map { hash => diff --git a/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala index b7208fee94..191b6ea060 100644 --- a/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala +++ b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala @@ -112,7 +112,7 @@ trait ChainApi extends ChainQueryApi { blockHash: DoubleSha256DigestBE): Future[ChainApi] /** Gets the number of compact filter headers in the database */ - def getFilterHeaderCount: Future[Int] + def getFilterHeaderCount(): Future[Int] /** * Looks up a compact filter header by its height. @@ -132,7 +132,7 @@ trait ChainApi extends ChainQueryApi { def getFilter(hash: DoubleSha256DigestBE): Future[Option[CompactFilterDb]] /** Gets the number of compact filters in the database */ - def getFilterCount: Future[Int] + def getFilterCount(): Future[Int] /** * Looks up a compact filter by its height.