// NewJSON create JSON struct with json bytes func NewJSON(data []byte) *JSON { j := &JSON{ data: data, result: gjson.Parse(string(data)), } return j }
// getMetadataForgeModule queries the configured Puppet Forge and return func getMetadataForgeModule(fm ForgeModule) ForgeModule { baseUrl := config.Forge.Baseurl if len(fm.baseUrl) > 0 { baseUrl = fm.baseUrl } url := baseUrl + "/v3/releases/" + fm.author + "-" + fm.name + "-" + fm.version req, err := http.NewRequest("GET", url, nil) req.Header.Set("User-Agent", "https://github.com/xorpaul/g10k/") req.Header.Set("Connection", "close") proxyURL, err := http.ProxyFromEnvironment(req) if err != nil { Fatalf("getMetadataForgeModule(): Error while getting http proxy with golang http.ProxyFromEnvironment()" + err.Error()) } client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}} before := time.Now() Debugf("GETing " + url) resp, err := client.Do(req) duration := time.Since(before).Seconds() Verbosef("GETing Forge metadata from " + url + " took " + strconv.FormatFloat(duration, 'f', 5, 64) + "s") mutex.Lock() syncForgeTime += duration mutex.Unlock() if err != nil { Fatalf("getMetadataForgeModule(): Error while querying metadata for Forge module " + fm.name + " from " + url + ": " + err.Error()) } defer resp.Body.Close() if resp.Status == "200 OK" { body, err := ioutil.ReadAll(resp.Body) if err != nil { Fatalf("getMetadataForgeModule(): Error while reading response body for Forge module " + fm.name + " from " + url + ": " + err.Error()) } before := time.Now() currentRelease := gjson.Parse(string(body)).Map() duration := time.Since(before).Seconds() modulemd5sum := currentRelease["file_md5"].String() moduleFilesize := currentRelease["file_size"].Int() Debugf("module: " + fm.author + "/" + fm.name + " modulemd5sum: " + modulemd5sum + " moduleFilesize: " + strconv.FormatInt(moduleFilesize, 10)) mutex.Lock() forgeJsonParseTime += duration mutex.Unlock() return ForgeModule{md5sum: modulemd5sum, fileSize: moduleFilesize} } else { Fatalf("getMetadataForgeModule(): Unexpected response code while GETing " + url + " " + resp.Status) } return ForgeModule{} }