50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"hash/crc32"
|
|
"strconv"
|
|
|
|
"gopkg.in/urfave/cli.v2"
|
|
)
|
|
|
|
var dotCmd = &cli.Command{
|
|
Name: "dot",
|
|
Usage: "generate dot graphs",
|
|
Action: func(cctx *cli.Context) error {
|
|
st, err := openStorage()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
minH, err := strconv.ParseInt(cctx.Args().Get(0), 10, 32)
|
|
tosee, err := strconv.ParseInt(cctx.Args().Get(1), 10, 32)
|
|
maxH := minH + tosee
|
|
|
|
res, err := st.db.Query("select block, parent, b.miner from block_parents inner join blocks b on block_parents.block = b.cid where b.height > ? and b.height < ?", minH, maxH)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Println("digraph D {")
|
|
|
|
for res.Next() {
|
|
var block, parent, miner string
|
|
if err := res.Scan(&block, &parent, &miner); err != nil {
|
|
return err
|
|
}
|
|
|
|
col := crc32.Checksum([]byte(miner), crc32.MakeTable(crc32.Castagnoli))&0x80808080 + 0x70707070
|
|
|
|
fmt.Printf("%s [label = \"%s\", fillcolor = \"#%06x\", style=filled]\n%s -> %s\n", block, miner, col, block, parent)
|
|
}
|
|
if res.Err() != nil {
|
|
return res.Err()
|
|
}
|
|
|
|
fmt.Println("}")
|
|
|
|
return nil
|
|
},
|
|
}
|