golang redisinfo

package main

import (
    "encoding/json"
    "flag"
    "fmt"
    color "github.com/fatih/color"
    "github.com/gosexy/redis"
    "strings"
    "time"
)

func GetInfo(c *redis.Client, sec string) map[string]string {
    s, err := c.Info(sec)
    if err != nil {
        fmt.Println("get key failure")
        return nil
    }
    a1 := strings.Split(s, "\r\n")
    m1 := make(map[string]string)
    for i := 1; i < len(a1); i++ {
        if !strings.Contains(a1[i], ":") {
            continue
        }
        a2 := strings.Split(a1[i], ":")
        m1[a2[0]] = a2[1]
    }
    return m1
}

func Help() {
    color.Cyan("Version: xredis_v1.0\n")
    fmt.Printf("Usage:./xredis\n")
    fmt.Printf("Usage:./xredis --i=\"192.168.1.1\" -p=\"6379\" -w=\"password\"\n")
    fmt.Printf("Usage:./xredis -j=Server args is (Server|Clients|Memory|Persistence|Stats|Replication|CPU)\n")
    fmt.Printf("Usage:./xredis -k=Server args is (Server|Clients|Memory|Persistence|Stats|Replication|CPU)\n")
    fmt.Printf("Usage:./xredis -c=false show color\n")
    fmt.Printf("defautl ip=127.0.0.1 default port=6379\n")
}

func main() {
    help := flag.Bool("h", false, "show help")
    ip := flag.String("i", "127.0.0.1", "redis server ip")
    port := flag.Uint("p", 6379, "redis server port")
    pass := flag.String("w", "", "redis server password")
    // showColor := flag.Bool("c", true, "show or not show color")
    xjson := flag.String("j", "", "Server|Clients|Memory|Persistence|Stats|Replication|CPU")
    xkey := flag.String("k", "", "Server|Clients|Memory|Persistence|Stats|Replication|CPU")
    flag.Parse()

    // if *showColor {
    //  color.Enable()
    // }

    if *help {
        Help()
        return
    }

    T_out := time.Duration(time.Second * 10) //connect redis timeout

    client := redis.New()
    err := client.ConnectWithTimeout(*ip, *port, T_out)
    if err != nil {
        fmt.Println("connect redis-server failure")
        return
    }
    //redis auth
    if *pass != "" {
        ss, _ := client.Auth(*pass)
        if ss != "OK" {
            fmt.Println(ss)
        }
    }

    if *xjson != "" {
        mm := GetInfo(client, *xjson)
        b, _ := json.Marshal(mm)
        fmt.Println(string(b))
        return
    }
    if *xkey != "" {
        mm := GetInfo(client, *xkey)
        for k, v := range mm {
            fmt.Printf("%s=%s\n", k, v)
        }
        return
    }

    m1 := GetInfo(client, "Server")
    m2 := GetInfo(client, "Clients")
    m3 := GetInfo(client, "Memory")
    //m4 := GetInfo(client, "Persistence")
    m5 := GetInfo(client, "Stats")
    m6 := GetInfo(client, "Replication")
    m7 := GetInfo(client, "CPU")
    client.Quit()
    color.Cyan("  redis_version             : %-12s", m1["redis_version"])
    color.Green("|   redis_mode                : %s\n", m1["redis_mode"])
    color.Cyan("  uptime_days               : %-12s", m1["uptime_in_days"])
    color.Green("|   config_file               : %s\n", m1["config_file"])
    color.Cyan("  connected_clients         : %-12s", m2["connected_clients"])
    color.Green("|   blocked_clients           : %s\n", m2["blocked_clients"])
    color.Cyan("  used_memory               : %-12s", m3["used_memory_human"])
    color.Green("|   used_memory_peak          : %s\n", m3["used_memory_peak_human"])
    color.Cyan("  input_bytes               : %-12s", m5["total_net_input_bytes"])
    color.Green("|   output_bytes              : %s\n", m5["total_net_output_bytes"])
    color.Cyan("  instantaneous_input_kbps  : %-12s", m5["instantaneous_input_kbps"])
    color.Green("|   instantaneous_output_kbps : %s\n", m5["instantaneous_output_kbps"])
    color.Cyan("  expired_keys              : %-12s", m5["expired_keys"])
    color.Green("|   evicted_keys              : %s\n", m5["evicted_keys"])
    color.Cyan("  role                      : %-12s", m6["role"])
    color.Green("|   connected_slaves          : %s\n", m6["connected_slaves"])
    color.Cyan("  used_cpu_sys              : %-12s", m7["used_cpu_sys"])
    color.Green("|   used_cpu_user             : %s\n", m7["used_cpu_user"])
}
添加新评论