# HG changeset patch # User Mikael Berthe # Date 1487508013 -3600 # Node ID 429d7e612cfd03dc4751d1bc2c40fd1c0cc631d1 # Parent 2452d9b23ec175a3b5ed70c099cb46ce587a6572 Add option --since diff -r 2452d9b23ec1 -r 429d7e612cfd gobm65.go --- a/gobm65.go Sun Feb 19 00:01:09 2017 +0100 +++ b/gobm65.go Sun Feb 19 13:40:13 2017 +0100 @@ -6,6 +6,7 @@ "io" "io/ioutil" "log" + "time" flag "github.com/docker/docker/pkg/mflag" "github.com/tarm/serial" @@ -159,10 +160,30 @@ return result } +func parseDate(dateStr string) (date time.Time, err error) { + if dateStr == "" { + return + } + + var yy, mm, dd, h, m, s int + n, e := fmt.Sscanf(dateStr, "%d-%d-%d %d:%d:%d", &yy, &mm, &dd, &h, &m, &s) + if e != nil && n < 3 { + err = e + return + } + if n < 6 { + log.Printf("Date parsed with only %d fields\n", n) + } + date = time.Date(yy, time.Month(mm), dd, h, m, s, 0, time.Local) + return +} + func main() { inFile := flag.String([]string{"-input-file", "i"}, "", "Input JSON file") outFile := flag.String([]string{"-output-file", "o"}, "", "Output JSON file") - limit := flag.Uint([]string{"-limit", "l"}, 0, "Limit number of items") + limit := flag.Uint([]string{"-limit", "l"}, 0, "Limit number of items to N first") + since := flag.String([]string{"-since"}, "", + "Filter records from date (YYYY-mm-dd HH:MM:SS)") format := flag.String([]string{"-format", "f"}, "", "Output format (csv, json)") avg := flag.Bool([]string{"-average", "a"}, false, "Compute average") merge := flag.Bool([]string{"-merge", "m"}, false, @@ -183,7 +204,11 @@ log.Fatal("Unknown output format. Possible choices are csv, json.") } - var err error + startDate, err := parseDate(*since) + if err != nil { + log.Fatal("Could not parse date: ", err) + } + var items []measurement if *inFile == "" { @@ -207,6 +232,19 @@ } } + if !startDate.IsZero() { + log.Printf("Filtering out records before %v...\n", startDate) + for i := range items { + iDate := time.Date(items[i].Year, time.Month(items[i].Month), + items[i].Day, items[i].Hour, items[i].Minute, 0, 0, + time.Local) + if iDate.Sub(startDate) < 0 { + items = items[0:i] + break + } + } + } + if *limit > 0 && len(items) > int(*limit) { items = items[0:*limit] }