1
0
Fork 0

Make country read map instead

master
Ambrose Chua 2018-03-23 13:05:07 +08:00
parent aab45d84ef
commit 8b115eec15
2 changed files with 66 additions and 20 deletions

View File

@ -11,11 +11,6 @@ import (
"strings" "strings"
) )
type hostLatency struct {
IP uint32 `json:"ip"`
TTL int `json:"ttl"`
}
type geoRange struct { type geoRange struct {
Start uint32 Start uint32
End uint32 End uint32
@ -31,7 +26,7 @@ func main() {
in := strings.Split(*flagIn, ",") in := strings.Split(*flagIn, ",")
out := *flagOut out := *flagOut
data := make([]hostLatency, 0) data := make(map[uint32]int, 0)
for _, fin := range in { for _, fin := range in {
log.Println("Reading file " + fin) log.Println("Reading file " + fin)
@ -41,14 +36,16 @@ func main() {
} }
log.Println("Parsing file " + fin) log.Println("Parsing file " + fin)
fdata := make([]hostLatency, 0) fdata := make(map[uint32]int, 0)
err = json.Unmarshal(raw, &fdata) err = json.Unmarshal(raw, &fdata)
if err != nil { if err != nil {
panic(err) panic(err)
} }
log.Println("File " + fin + " read successfully") log.Println("File " + fin + " read successfully")
data = append(data, fdata...) for k, v := range fdata {
data[k] = v
}
} }
geo := make([]geoRange, 0) geo := make([]geoRange, 0)
@ -104,20 +101,19 @@ func main() {
log.Println("Grouping latencies by country") log.Println("Grouping latencies by country")
odata := make(map[string][]int, 0) odata := make(map[string][]int, 0)
for _, o := range data { j := 0
ip := o.IP for ip, ttl := range data {
ttl := o.TTL for geo[j].End <= ip {
found := false j += 1
for _, g := range geo {
if g.Start < ip && ip < g.End {
odata[g.CC] = append(odata[g.CC], ttl)
found = true
break
}
} }
if !found { if ip < geo[j].Start {
j -= 1
odata["Unknown"] = append(odata["Unknown"], ttl) odata["Unknown"] = append(odata["Unknown"], ttl)
continue
} }
cc := geo[j].CC
odata[cc] = append(odata[cc], ttl)
} }
log.Println("Encoding json") log.Println("Encoding json")

View File

@ -1,9 +1,59 @@
package main package main
import ( import (
"encoding/csv"
"encoding/json"
"flag"
"io/ioutil"
"log" "log"
"os"
"strconv"
) )
var flagIn = flag.String("in", "", "input file")
var flagOut = flag.String("out", "country.csv", "output file")
func main() { func main() {
log.Print("comp") flag.Parse()
in := *flagIn
out := *flagOut
data := make(map[string][]int, 0)
log.Println("Reading file " + in)
raw, err := ioutil.ReadFile(in)
if err != nil {
panic(err)
}
log.Println("Parsing file " + in)
err = json.Unmarshal(raw, &data)
if err != nil {
panic(err)
}
log.Println("File " + in + " read successfully")
log.Println("Converting to csv")
odata := make([][]string, 0)
for cc, ttls := range data {
for _, ttl := range ttls {
odata = append(odata, []string{
cc,
strconv.Itoa(ttl),
})
}
}
log.Println("Creating file " + out)
outFile, err := os.Create(out)
if err != nil {
panic(err)
}
log.Println("Encoding csv")
w := csv.NewWriter(outFile)
err = w.WriteAll(odata)
if err != nil {
panic(err)
}
} }