gobm65.go
changeset 16 c64c730a7b16
parent 15 009c05621fba
child 17 d83a4f6556e4
equal deleted inserted replaced
15:009c05621fba 16:c64c730a7b16
   395 
   395 
   396 func main() {
   396 func main() {
   397 	inFile := flag.String([]string{"-input-file", "i"}, "", "Input JSON file")
   397 	inFile := flag.String([]string{"-input-file", "i"}, "", "Input JSON file")
   398 	outFile := flag.String([]string{"-output-file", "o"}, "", "Output JSON file")
   398 	outFile := flag.String([]string{"-output-file", "o"}, "", "Output JSON file")
   399 	limit := flag.Uint([]string{"-limit", "l"}, 0, "Limit number of items to N first")
   399 	limit := flag.Uint([]string{"-limit", "l"}, 0, "Limit number of items to N first")
   400 	since := flag.String([]string{"-since"}, "",
   400 	before := flag.String([]string{"-before"}, "",
       
   401 		"Filter records before date (YYYY-mm-dd HH:MM:SS)")
       
   402 	since := flag.String([]string{"-since", "-after"}, "",
   401 		"Filter records from date (YYYY-mm-dd HH:MM:SS)")
   403 		"Filter records from date (YYYY-mm-dd HH:MM:SS)")
   402 	format := flag.String([]string{"-format", "f"}, "", "Output format (csv, json)")
   404 	format := flag.String([]string{"-format", "f"}, "", "Output format (csv, json)")
   403 	avg := flag.Bool([]string{"-average", "a"}, false, "Compute average")
   405 	avg := flag.Bool([]string{"-average", "a"}, false, "Compute average")
   404 	stats := flag.Bool([]string{"-stats"}, false, "Compute statistics")
   406 	stats := flag.Bool([]string{"-stats"}, false, "Compute statistics")
   405 	merge := flag.Bool([]string{"-merge", "m"}, false,
   407 	merge := flag.Bool([]string{"-merge", "m"}, false,
   442 	startDate, err := parseDate(*since)
   444 	startDate, err := parseDate(*since)
   443 	if err != nil {
   445 	if err != nil {
   444 		log.Fatal("Could not parse date: ", err)
   446 		log.Fatal("Could not parse date: ", err)
   445 	}
   447 	}
   446 
   448 
       
   449 	endDate, err := parseDate(*before)
       
   450 	if err != nil {
       
   451 		log.Fatal("Could not parse date: ", err)
       
   452 	}
       
   453 
   447 	var items []measurement
   454 	var items []measurement
   448 
   455 
   449 	// Read data
   456 	// Read data
   450 
   457 
   451 	if *inFile == "" {
   458 	if *inFile == "" {
   482 				break
   489 				break
   483 			}
   490 			}
   484 		}
   491 		}
   485 	}
   492 	}
   486 
   493 
       
   494 	if !endDate.IsZero() {
       
   495 		log.Printf("Filtering out records after %v...\n", endDate)
       
   496 		for i := range items {
       
   497 			iDate := time.Date(items[i].Year, time.Month(items[i].Month),
       
   498 				items[i].Day, items[i].Hour, items[i].Minute, 0, 0,
       
   499 				time.Local)
       
   500 			if iDate.Sub(endDate) <= 0 {
       
   501 				items = items[i:]
       
   502 				break
       
   503 			}
       
   504 		}
       
   505 	}
       
   506 
   487 	if *fromTime != "" || *toTime != "" {
   507 	if *fromTime != "" || *toTime != "" {
   488 		log.Println("Filtering hours...")
   508 		log.Println("Filtering hours...")
   489 
   509 
   490 		compare := func(m measurement, t simpleTime) int {
   510 		compare := func(m measurement, t simpleTime) int {
   491 			if m.Hour*60+m.Minute < t.hour*60+t.minute {
   511 			if m.Hour*60+m.Minute < t.hour*60+t.minute {