From 093f512cb6e5d558c9c5333c181df2e04fd5d451 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Fri, 29 Mar 2019 17:30:18 +0100
Subject: [PATCH] =?UTF-8?q?[enh]=C2=A0add=20`dump=20blocks=20[pattern]`=20?=
 =?UTF-8?q?and=20`dump=20forks=20[pattern]`=20commands?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../indexDAL/abstract/software/ForksDAO.ts    |  7 +++++
 app/modules/dump.ts                           |  9 +++++++
 app/modules/dump/blocks/dump.blocks.ts        | 26 +++++++++++++++++++
 3 files changed, 42 insertions(+)
 create mode 100644 app/modules/dump/blocks/dump.blocks.ts

diff --git a/app/lib/dal/indexDAL/abstract/software/ForksDAO.ts b/app/lib/dal/indexDAL/abstract/software/ForksDAO.ts
index 2d5850457..b7689eb87 100644
--- a/app/lib/dal/indexDAL/abstract/software/ForksDAO.ts
+++ b/app/lib/dal/indexDAL/abstract/software/ForksDAO.ts
@@ -23,6 +23,13 @@ export interface ForksDAO {
 
   getNextForkBlocks(number:number, hash:string): Promise<DBBlock[]>
 
+  /**
+   * Find any fork block whose number is between `numberStart` and `maxNumber`, both included, and whose medianTime is
+   * >= `medianTimeStart`.
+   * @param numberStart
+   * @param medianTimeStart
+   * @param maxNumber
+   */
   getPotentialForkBlocks(numberStart:number, medianTimeStart:number, maxNumber:number): Promise<DBBlock[]>
 
   removeForkBlock(number:number): Promise<void>
diff --git a/app/modules/dump.ts b/app/modules/dump.ts
index 721a65433..d959de94f 100644
--- a/app/modules/dump.ts
+++ b/app/modules/dump.ts
@@ -21,6 +21,7 @@ import {Underscore} from "../lib/common-libs/underscore"
 import {dumpWotWizard} from "./dump/wotwizard/wotwizard.dump"
 import {OtherConstants} from "../lib/other_constants"
 import {Querable, querablep} from "../lib/common-libs/querable"
+import {dumpBlocks, dumpForks} from "./dump/blocks/dump.blocks"
 
 const Table = require('cli-table')
 
@@ -71,6 +72,14 @@ module.exports = {
               await dumpCurrent(server)
               break
 
+            case 'blocks':
+              await dumpBlocks(server, name)
+              break
+
+            case 'forks':
+              await dumpForks(server, name)
+              break
+
             case 'volumes':
               await dumpVolumes(server)
               break
diff --git a/app/modules/dump/blocks/dump.blocks.ts b/app/modules/dump/blocks/dump.blocks.ts
new file mode 100644
index 000000000..6c9412bd1
--- /dev/null
+++ b/app/modules/dump/blocks/dump.blocks.ts
@@ -0,0 +1,26 @@
+import {Server} from "../../../../server"
+import {BlockDTO} from "../../../lib/dto/BlockDTO"
+import {DBBlock} from "../../../lib/db/DBBlock"
+
+export async function dumpForks(server: Server, blocks: string) {
+  return dumpBlocks(server, blocks, false)
+}
+
+export async function dumpBlocks(server: Server, blocks: string, showMainBcOnly = true) {
+  const patterns = blocks.split(',')
+  for (const p of patterns) {
+    // Single block to dump
+    if (p.match(/^\d+$/)) {
+      const bNumber = parseInt(p)
+      if (showMainBcOnly) {
+        dumpBlockIfDefined(await server.dal.getBlock(bNumber))
+      } else {
+        (await server.dal.getPotentialForkBlocks(bNumber, 0, bNumber)).forEach(dumpBlockIfDefined)
+      }
+    }
+  }
+}
+
+export function dumpBlockIfDefined(b: DBBlock|undefined|null) {
+  console.log(BlockDTO.fromJSONObject(b).getRawSigned())
+}
-- 
GitLab