func (self *JenkinsClientDownloader) downloadJar(config *util.Config) error { util.GOut("DOWNLOAD", "Getting latest Jenkins client %v", (config.CIHostURI + "/" + ClientJarURL)) // Create the HTTP request. request, err := config.CIRequest("GET", ClientJarURL, nil) if err != nil { return err } if fi, err := os.Stat(ClientJarName); err == nil { request.Header.Add("If-Modified-Since", fi.ModTime().Format(http.TimeFormat)) } // Perform the HTTP request. var source io.ReadCloser sourceTime := time.Now() if response, err := config.CIClient().Do(request); err == nil { defer response.Body.Close() source = response.Body if response.StatusCode == 304 { util.GOut("DOWNLOAD", "Jenkins client is up-to-date, no need to download.") return nil } else if response.StatusCode != 200 { return fmt.Errorf("Failed downloading jenkins client. Cause: HTTP-%v %v", response.StatusCode, response.Status) } if value := response.Header.Get("Last-Modified"); value != "" { if time, err := http.ParseTime(value); err == nil { sourceTime = time } } } else { return fmt.Errorf("Failed downloading jenkins client. Connect failed. Cause: %v", err) } target, err := os.Create(ClientJarDownloadName) defer target.Close() if err != nil { return fmt.Errorf("Failed downloading jenkins client. Cannot create local file. Cause: %v", err) } if _, err = io.Copy(target, source); err == nil { target.Close() if err = os.Remove(ClientJarName); err == nil || os.IsNotExist(err) { if err = os.Rename(ClientJarDownloadName, ClientJarName); err == nil { os.Chtimes(ClientJarName, sourceTime, sourceTime) } } return err } else { return fmt.Errorf("Failed downloading jenkins client. Transfer failed. Cause: %v", err) } }
func (self *FullGCInvoker) invokeSystemGC(config *util.Config) { // curl -d "script=System.gc()" -X POST http://user:password@jenkins-host/ci/computer/%s/scriptText postBody := strings.NewReader(fmt.Sprintf(FullGCPostBody, url.QueryEscape(FullGCScript))) request, err := config.CIRequest("POST", fmt.Sprintf(FullGCURL, config.ClientName), postBody) if err == nil { if response, err := config.CIClient().Do(request); err == nil { response.Body.Close() if response.StatusCode != 200 { util.GOut("gc", "ERROR: Failed invoking full GC as node request in Jenkins failed with %s", response.Status) } } else { util.GOut("gc", "ERROR: Failed invoking full GC as Jenkins cannot be contacted. Cause: %v", err) } } }