blob: abe5f56f4969c1f3213fd8979e3298b66724bcc8 [file] [log] [blame]
package schema
import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func IXURL(id int64) string {
return fmt.Sprintf("https://peeringdb.com/api/ix/%d.json?depth=4", id)
}
func NetIXLanInIXURL(id int64) string {
return fmt.Sprintf("https://peeringdb.com/api/netixlan?ix_id__in=%d", id)
}
func NetURLMulti(ids []int64) string {
sid := make([]string, len(ids))
for i, id := range ids {
sid[i] = fmt.Sprintf("%d", id)
}
return fmt.Sprintf("https://peeringdb.com/api/net?id__in=%s", strings.Join(sid, ","))
}
func Get(ctx context.Context, obj interface{}, url string) error {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return fmt.Errorf("http.NewRequest(GET, %q): %v", url, err)
}
req.Header.Add("User-Agent", "bgpwtf-cccampix-peeringdbproxy/1.0 (https://code.hackerspace.pl/hscloud/bgpwtf/cccampix/peeringdb)")
req = req.WithContext(ctx)
client := http.DefaultClient
res, err := client.Do(req)
if err != nil {
return fmt.Errorf("client.Do(%v): %v", req, err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
return fmt.Errorf("got status code %d", res.StatusCode)
}
data, err := ioutil.ReadAll(res.Body)
if err != nil {
return fmt.Errorf("could not read response: %v", err)
}
err = json.Unmarshal(data, &obj)
if err != nil {
return fmt.Errorf("could not parse response JSON: %v", err)
}
return nil
}