Make country read map instead
parent
aab45d84ef
commit
8b115eec15
34
country.go
34
country.go
|
@ -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")
|
||||||
|
|
52
json2csv.go
52
json2csv.go
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue