diff --git a/etcd-dump/etcd_dump.go b/etcd-dump/etcd_dump.go
index 17d1b7f..bfc4801 100644
--- a/etcd-dump/etcd_dump.go
+++ b/etcd-dump/etcd_dump.go
@@ -9,7 +9,6 @@ import (
"github.com/golang/protobuf/proto"
"github.com/pkg/browser"
"go.etcd.io/etcd/clientv3"
- "html"
"io/ioutil"
"strings"
"time"
@@ -37,7 +36,7 @@ var (
"Tablet":&topodata.Tablet{},
"VSchema":&vschema.Keyspace{},
}
-
+ divIndex = 0
)
var css = `
@@ -81,6 +80,13 @@ ul, #root {
.active {
display: block;
}
+.jsonview {
+ display:inline-block;
+ font-size:12px;
+ background:#fafafa;
+ padding-left:1px;padding-right:1px;
+}
+
`
var js = `
@@ -130,7 +136,6 @@ func store(tree *Tree, key string, value string ) {
typeString := paths[len(paths)-1]
if unicode.IsUpper(rune(typeString[0])) {
value = decodeProtoBuf(typeString, []byte(value))
- value = html.EscapeString(value)
}
paths = append(paths, value)
@@ -188,21 +193,32 @@ func flatten(tree *Tree) ([]Item, int) {
if level > maxLevel {
maxLevel = level
}
+
}
tree.root.traverse(0, callback)
for idx, item := range list {
if idx != len(list) -1 {
list[idx].next = list[idx+1].level - item.level
- if list[idx].next < -1 {
- list[idx].next = -1
- }
}
}
return list, maxLevel
}
+func fixupJson (val string) string {
+ val = strings.TrimSpace(val)
+ divIndex++
+ if strings.Index(val, "{") == 0 {
+ return fmt.Sprintf("
", divIndex, divIndex, val)
+ }
+ return val
+}
+
func toHtml(list []Item) string {
- html := "etcd: dump of all keys \n"
+ html := "\n\n"
+ html += " \n"
+ html += "\n"
+ html += "\n"
+ html += "Vitess Topology \n"
html += css
html += "Expand All "
html += "Collapse All \n"
@@ -218,25 +234,29 @@ func toHtml(list []Item) string {
}
push("")
for _, item := range list {
+ val := fixupJson(item.name)
switch item.next {
case 1:
- html += "" + item.name + " \n"
- html += "\n"
+ html += "" + val + " \n ")
break
case 0:
- html += ""+item.name+" "
- break
- case -1:
- html += ""+item.name+" "
html += pop()
+ html += "" + val + " \n"
break
default:
- panic(fmt.Sprintf("Invalid item.next %d", item.next))
-
+ if item.next > 1 {
+ panic("For increasing depth, next node has to be at the same level or immediately below")
+ }
+ html += "" + val + " \n"
+ n := -1 * item.next
+ for i := 0; i < n; i++ {
+ html += pop()
+ }
+ break
}
}
- return html + js
+ return html + js + "\n\n\n"
}
func main() {
diff --git a/etcd-dump/rohit.html b/etcd-dump/rohit.html
deleted file mode 100644
index 9bfc223..0000000
--- a/etcd-dump/rohit.html
+++ /dev/null
@@ -1,199 +0,0 @@
-etcd: dump of all keys
-
-Expand All Collapse All
-
-root
-
-vitess
-
-global
-
-RoutingRules
-
-rules:<from_table:"product" to_tables:"product.product" to_tables:"customer.product" > cells
-
-test
-
-CellInfo
-
-server_address:"localhost:2379" root:"/vitess/test" elections
-
-vtctld
-
-locks
-
-7587843463538792201
-keyspaces
-
-customer
-
-Keyspace
-VSchema
-
-sharded:true vindexes:<key:"hash" value:<type:"hash" > > tables:<key:"customer" value:<column_vindexes:<column:"cid" name:"hash" > auto_increment:<column:"cid" sequence:"customer_seq" > > > tables:<key:"orders" value:<column_vindexes:<column:"cid" name:"hash" > auto_increment:<column:"oid" sequence:"order_seq" > > > tables:<key:"product" value:<type:"reference" > > shards
-
--80
-
-Shard
-
-master_alias:<cell:"test" uid:200 > master_term_start_time:<seconds:1578091139 nanoseconds:193973511 > key_range:<end:"\200" > is_master_serving:true 80-
-
-Shard
-
-master_alias:<cell:"test" uid:300 > master_term_start_time:<seconds:1578091139 nanoseconds:196639342 > key_range:<start:"\200" > is_master_serving:true merchant
-
-Keyspace
-VSchema
-
-sharded:true vindexes:<key:"md5" value:<type:"unicode_loose_md5" > > tables:<key:"merchant" value:<column_vindexes:<column:"mname" name:"md5" > > > shards
-
--80
-
-Shard
-
-master_alias:<cell:"test" uid:400 > master_term_start_time:<seconds:1578091139 nanoseconds:193955848 > key_range:<end:"\200" > is_master_serving:true 80-
-
-Shard
-
-master_alias:<cell:"test" uid:500 > master_term_start_time:<seconds:1578091139 nanoseconds:193933650 > key_range:<start:"\200" > is_master_serving:true product
-
-Keyspace
-VSchema
-
-tables:<key:"customer_seq" value:<type:"sequence" > > tables:<key:"order_seq" value:<type:"sequence" > > tables:<key:"product" value:<> > shards
-
-0
-
-Shard
-
-master_alias:<cell:"test" uid:100 > master_term_start_time:<seconds:1578091139 nanoseconds:193925340 > is_master_serving:true test
-
-SrvVSchema
-
-keyspaces:<key:"customer" value:<sharded:true vindexes:<key:"hash" value:<type:"hash" > > tables:<key:"customer" value:<column_vindexes:<column:"cid" name:"hash" > auto_increment:<column:"cid" sequence:"customer_seq" > > > tables:<key:"orders" value:<column_vindexes:<column:"cid" name:"hash" > auto_increment:<column:"oid" sequence:"order_seq" > > > tables:<key:"product" value:<type:"reference" > > > > keyspaces:<key:"merchant" value:<sharded:true vindexes:<key:"md5" value:<type:"unicode_loose_md5" > > tables:<key:"merchant" value:<column_vindexes:<column:"mname" name:"md5" > > > > > keyspaces:<key:"product" value:<tables:<key:"customer_seq" value:<type:"sequence" > > tables:<key:"order_seq" value:<type:"sequence" > > tables:<key:"product" value:<> > > > routing_rules:<rules:<from_table:"product" to_tables:"product.product" to_tables:"customer.product" > > keyspaces
-
-customer
-
-SrvKeyspace
-
-partitions:<served_type:MASTER shard_references:<name:"-80" key_range:<end:"\200" > > shard_references:<name:"80-" key_range:<start:"\200" > > > partitions:<served_type:REPLICA shard_references:<name:"-80" key_range:<end:"\200" > > shard_references:<name:"80-" key_range:<start:"\200" > > > partitions:<served_type:RDONLY shard_references:<name:"-80" key_range:<end:"\200" > > shard_references:<name:"80-" key_range:<start:"\200" > > > shards
-
--80
-
-ShardReplication
-
-nodes:<tablet_alias:<cell:"test" uid:200 > > 80-
-
-ShardReplication
-
-nodes:<tablet_alias:<cell:"test" uid:300 > > merchant
-
-SrvKeyspace
-
-partitions:<served_type:MASTER shard_references:<name:"-80" key_range:<end:"\200" > > shard_references:<name:"80-" key_range:<start:"\200" > > > partitions:<served_type:REPLICA shard_references:<name:"-80" key_range:<end:"\200" > > shard_references:<name:"80-" key_range:<start:"\200" > > > partitions:<served_type:RDONLY shard_references:<name:"-80" key_range:<end:"\200" > > shard_references:<name:"80-" key_range:<start:"\200" > > > shards
-
--80
-
-ShardReplication
-
-nodes:<tablet_alias:<cell:"test" uid:400 > > 80-
-
-ShardReplication
-
-nodes:<tablet_alias:<cell:"test" uid:500 > > product
-
-SrvKeyspace
-
-partitions:<served_type:MASTER shard_references:<name:"0" > > partitions:<served_type:REPLICA shard_references:<name:"0" > > partitions:<served_type:RDONLY shard_references:<name:"0" > > shards
-
-0
-
-ShardReplication
-
-nodes:<tablet_alias:<cell:"test" uid:100 > > tablets
-
-test-0000000100
-
-Tablet
-
-alias:<cell:"test" uid:100 > hostname:"rohit-ubuntu" port_map:<key:"grpc" value:16100 > port_map:<key:"mysql" value:17100 > port_map:<key:"vt" value:15100 > keyspace:"product" shard:"0" type:MASTER mysql_hostname:"rohit-ubuntu" mysql_port:17100 master_term_start_time:<seconds:1578091139 nanoseconds:193925340 > test-0000000200
-
-Tablet
-
-alias:<cell:"test" uid:200 > hostname:"rohit-ubuntu" port_map:<key:"grpc" value:16200 > port_map:<key:"mysql" value:17200 > port_map:<key:"vt" value:15200 > keyspace:"customer" shard:"-80" key_range:<end:"\200" > type:MASTER mysql_hostname:"rohit-ubuntu" mysql_port:17200 master_term_start_time:<seconds:1578091139 nanoseconds:193973511 > test-0000000300
-
-Tablet
-
-alias:<cell:"test" uid:300 > hostname:"rohit-ubuntu" port_map:<key:"grpc" value:16300 > port_map:<key:"mysql" value:17300 > port_map:<key:"vt" value:15300 > keyspace:"customer" shard:"80-" key_range:<start:"\200" > type:MASTER mysql_hostname:"rohit-ubuntu" mysql_port:17300 master_term_start_time:<seconds:1578091139 nanoseconds:196639342 > test-0000000400
-
-Tablet
-
-alias:<cell:"test" uid:400 > hostname:"rohit-ubuntu" port_map:<key:"grpc" value:16400 > port_map:<key:"mysql" value:17400 > port_map:<key:"vt" value:15400 > keyspace:"merchant" shard:"-80" key_range:<end:"\200" > type:MASTER mysql_hostname:"rohit-ubuntu" mysql_port:17400 master_term_start_time:<seconds:1578091139 nanoseconds:193955848 > test-0000000500
-
-Tablet
-
-alias:<cell:"test" uid:500 > hostname:"rohit-ubuntu" port_map:<key:"grpc" value:16500 > port_map:<key:"mysql" value:17500 > port_map:<key:"vt" value:15500 > keyspace:"merchant" shard:"80-" key_range:<start:"\200" > type:MASTER mysql_hostname:"rohit-ubuntu" mysql_port:17500 master_term_start_time:<seconds:1578091139 nanoseconds:193933650 >
-