forked from mirror/ledisdb
add handle binlog tool
This commit is contained in:
parent
eec14806d2
commit
31320944e6
|
@ -0,0 +1,85 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"github.com/siddontang/ledisdb/ledis"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var TimeFormat = "2006-01-02 15:04:05"
|
||||||
|
|
||||||
|
var startDateTime = flag.String("start-datetime", "",
|
||||||
|
"Start reading the binary log at the first event having a timestamp equal to or later than the datetime argument.")
|
||||||
|
var stopDateTime = flag.String("stop-datetime", "",
|
||||||
|
"Stop reading the binary log at the first event having a timestamp equal to or earlier than the datetime argument.")
|
||||||
|
|
||||||
|
var startTime uint32 = 0
|
||||||
|
var stopTime uint32 = 0xFFFFFFFF
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Usage = func() {
|
||||||
|
fmt.Fprintf(os.Stderr, "Usage of %s [options] log_file\n", os.Args[0])
|
||||||
|
flag.PrintDefaults()
|
||||||
|
}
|
||||||
|
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
logFile := flag.Arg(0)
|
||||||
|
f, err := os.Open(logFile)
|
||||||
|
if err != nil {
|
||||||
|
println(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
var t time.Time
|
||||||
|
|
||||||
|
if len(*startDateTime) > 0 {
|
||||||
|
if t, err = time.Parse(TimeFormat, *startDateTime); err != nil {
|
||||||
|
println("parse start-datetime error: ", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
startTime = uint32(t.Unix())
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(*stopDateTime) > 0 {
|
||||||
|
if t, err = time.Parse(TimeFormat, *stopDateTime); err != nil {
|
||||||
|
println("parse stop-datetime error: ", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
stopTime = uint32(t.Unix())
|
||||||
|
}
|
||||||
|
|
||||||
|
rb := bufio.NewReaderSize(f, 4096)
|
||||||
|
err = ledis.ReadEventFromReader(rb, printEvent)
|
||||||
|
if err != nil {
|
||||||
|
println("read event error: ", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func printEvent(createTime uint32, event []byte) error {
|
||||||
|
if createTime < startTime || createTime > stopTime {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
t := time.Unix(int64(createTime), 0)
|
||||||
|
|
||||||
|
fmt.Printf("%s ", t.Format(TimeFormat))
|
||||||
|
|
||||||
|
s, err := ledis.FormatBinLogEvent(event)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("%s", err.Error())
|
||||||
|
} else {
|
||||||
|
fmt.Printf(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("\n")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue