2017-01-08 17:10:17 +00:00

54 lines
1.1 KiB
Go

package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
)
type dockerHubStatsType struct {
Count int `json:"count"`
}
func sanitizeInput(input string) string {
parts := strings.Split(input, "\n")
return strings.Trim(parts[0], " ")
}
func requestHubStats(org string) dockerHubStatsType {
client := http.Client{}
res, err := client.Get("https://hub.docker.com/v2/repositories/" + org)
if err != nil {
log.Fatalln("Unable to reach Docker Hub server.")
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatalln("Unable to parse response from server.")
}
dockerHubStats := dockerHubStatsType{}
json.Unmarshal(body, &dockerHubStats)
return dockerHubStats
}
func main() {
input, err := ioutil.ReadAll(os.Stdin)
if err != nil {
log.Fatal("Unable to read standard input:", err)
}
org := string(input)
if len(input) == 0 {
log.Fatalln("A username or organisation is required.")
}
org = sanitizeInput(org)
dockerHubStats := requestHubStats(org)
fmt.Printf("The organisation or user %s has %d repositories on the Docker hub.\n", org, dockerHubStats.Count)
}