// Copyright 2014 by Sascha L. Teichmann // Use of this source code is governed by the MIT license // that can be found in the LICENSE file. package main import ( "flag" "fmt" "image/color" "log" "bitbucket.org/s_l_teichmann/mtredisalize/common" ) func main() { var ( port int host string x, y, z int width, height, depth int colorsfile string ) flag.IntVar(&port, "port", 6379, "port to of mtredisalize server") flag.StringVar(&host, "host", "localhost", "host to mtredisalize server") flag.IntVar(&x, "x", -9, "x of query cuboid") flag.IntVar(&y, "y", -75, "y of query cuboid") flag.IntVar(&z, "z", -9, "z of query cuboid") flag.IntVar(&width, "width", 18, "width of query cuboid") flag.IntVar(&height, "height", 18, "height of query cuboid") flag.IntVar(&depth, "depth", 150, "depth of query cuboid") flag.IntVar(&width, "w", 18, "width of query cuboid (shorthand)") flag.IntVar(&height, "h", 18, "height of query cuboid (shorthand)") flag.IntVar(&depth, "d", 150, "depth of query cuboid (shorthand)") flag.StringVar(&colorsfile, "colors", "colors.txt", "definition of colors") flag.Parse() var err error var colors map[string]color.RGBA if colors, err = ParseColors(colorsfile); err != nil { log.Fatalf("Cannot open color file: %s", err) } _ = colors address := fmt.Sprintf("%s:%d", host, port) var client *Client if client, err = NewClient("tcp", address); err != nil { log.Fatalf("Cannot connect to '%s': %s", address, err) } defer client.Close() q1x, q1y, q1z := int16(x), int16(y), int16(z) q2x, q2y, q2z := q1x+int16(width)-1, q1y+int16(depth)-1, q1z+int16(height)-1 c1 := common.Coord{X: q1x, Y: q1y, Z: q1z} c2 := common.Coord{X: q2x, Y: q2y, Z: q2z} cuboid := common.Cuboid{P1: common.MinCoord(c1, c2), P2: common.MaxCoord(c1, c2)} log.Printf("query cuboid: %s", cuboid) numBlocks := 0 bytesTotal := int64(0) versions := make(map[byte]int) count := func(block *common.Block) { numBlocks++ bytesTotal += int64(len(block.Data)) if db, err := NewDecodedBlock(block.Data); err == nil { versions[db.Version]++ } else { log.Printf("WARN: Decoding block failed: %s", err) } } if err = client.QueryCuboid(cuboid, count); err != nil { log.Fatalf("query failed: %s", err) } fmt.Printf("num of blocks: %d\n", numBlocks) fmt.Printf("num of bytes: %d\n", bytesTotal) for version, count := range versions { fmt.Printf("%d: %d\n", version, count) } }