本文整理汇总了Golang中github.com/evergreen-ci/evergreen/plugin.PluginCommunicator.TaskPostJSON方法的典型用法代码示例。如果您正苦于以下问题:Golang PluginCommunicator.TaskPostJSON方法的具体用法?Golang PluginCommunicator.TaskPostJSON怎么用?Golang PluginCommunicator.TaskPostJSON使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/evergreen-ci/evergreen/plugin.PluginCommunicator
的用法示例。
在下文中一共展示了PluginCommunicator.TaskPostJSON方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Execute
// Execute fetches the expansions from the API server
func (incCmd *IncCommand) Execute(pluginLogger plugin.Logger,
pluginCom plugin.PluginCommunicator, conf *model.TaskConfig,
stop chan bool) error {
err := plugin.ExpandValues(incCmd, conf.Expansions)
if err != nil {
return err
}
keyVal := &KeyVal{}
resp, err := pluginCom.TaskPostJSON(IncRoute, incCmd.Key)
if err != nil {
return err
}
if resp == nil {
return fmt.Errorf("received nil response from inc API call")
} else {
defer resp.Body.Close()
}
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("unexpected status code: %v", resp.StatusCode)
}
err = util.ReadJSONInto(resp.Body, keyVal)
if err != nil {
return fmt.Errorf("Failed to read JSON reply: %v", err)
}
conf.Expansions.Put(incCmd.Destination, fmt.Sprintf("%d", keyVal.Value))
return nil
}
示例2: Execute
func (jsc *JSONSendCommand) Execute(log plugin.Logger, com plugin.PluginCommunicator, conf *model.TaskConfig, stop chan bool) error {
if jsc.File == "" {
return fmt.Errorf("'file' param must not be blank")
}
if jsc.DataName == "" {
return fmt.Errorf("'name' param must not be blank")
}
errChan := make(chan error)
go func() {
// attempt to open the file
fileLoc := filepath.Join(conf.WorkDir, jsc.File)
jsonFile, err := os.Open(fileLoc)
if err != nil {
errChan <- fmt.Errorf("Couldn't open json file: '%v'", err)
return
}
jsonData := map[string]interface{}{}
err = util.ReadJSONInto(jsonFile, &jsonData)
if err != nil {
errChan <- fmt.Errorf("File contained invalid json: %v", err)
return
}
retriablePost := util.RetriableFunc(
func() error {
log.LogTask(slogger.INFO, "Posting JSON")
resp, err := com.TaskPostJSON(fmt.Sprintf("data/%v", jsc.DataName), jsonData)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return util.RetriableError{err}
}
if resp.StatusCode != http.StatusOK {
return util.RetriableError{fmt.Errorf("unexpected status code %v", resp.StatusCode)}
}
return nil
},
)
_, err = util.Retry(retriablePost, 10, 3*time.Second)
errChan <- err
}()
select {
case err := <-errChan:
if err != nil {
log.LogTask(slogger.ERROR, "Sending json data failed: %v", err)
}
return err
case <-stop:
log.LogExecution(slogger.INFO, "Received abort signal, stopping.")
return nil
}
}
示例3: S3Copy
// S3Copy is responsible for carrying out the core of the S3CopyPlugin's
// function - it makes an API calls to copy a given staged file to it's final
// production destination
func (scc *S3CopyCommand) S3Copy(taskConfig *model.TaskConfig,
pluginLogger plugin.Logger, pluginCom plugin.PluginCommunicator) error {
for _, s3CopyFile := range scc.S3CopyFiles {
if len(s3CopyFile.BuildVariants) > 0 && !util.SliceContains(
s3CopyFile.BuildVariants, taskConfig.BuildVariant.Name) {
continue
}
pluginLogger.LogExecution(slogger.INFO, "Making API push copy call to "+
"transfer %v/%v => %v/%v", s3CopyFile.Source.Bucket,
s3CopyFile.Source.Path, s3CopyFile.Destination.Bucket,
s3CopyFile.Destination.Path)
s3CopyReq := S3CopyRequest{
AwsKey: scc.AwsKey,
AwsSecret: scc.AwsSecret,
S3SourceBucket: s3CopyFile.Source.Bucket,
S3SourcePath: s3CopyFile.Source.Path,
S3DestinationBucket: s3CopyFile.Destination.Bucket,
S3DestinationPath: s3CopyFile.Destination.Path,
S3DisplayName: s3CopyFile.DisplayName,
}
resp, err := pluginCom.TaskPostJSON(s3CopyAPIEndpoint, s3CopyReq)
if resp != nil {
defer resp.Body.Close()
}
if resp != nil && resp.StatusCode != http.StatusOK {
body, _ := ioutil.ReadAll(resp.Body)
return fmt.Errorf("S3 push copy failed (%v): %v",
resp.StatusCode, string(body))
}
if err != nil {
body, _ := ioutil.ReadAll(resp.Body)
return fmt.Errorf("S3 push copy failed (%v): %v",
resp.StatusCode, string(body))
}
pluginLogger.LogExecution(slogger.INFO, "API push copy call succeeded")
err = scc.AttachTaskFiles(pluginLogger, pluginCom, s3CopyReq)
if err != nil {
body, readAllErr := ioutil.ReadAll(resp.Body)
if readAllErr != nil {
return fmt.Errorf("Error: %v", err)
}
return fmt.Errorf("Error: %v, (%v): %v",
resp.StatusCode, err, string(body))
}
}
return nil
}
示例4: SendTaskFiles
// SendJSONResults is responsible for sending the
// specified file to the API Server
func (self *AttachTaskFilesCommand) SendTaskFiles(taskConfig *model.TaskConfig,
pluginLogger plugin.Logger, pluginCom plugin.PluginCommunicator) error {
// log each file attachment
for name, link := range self.Files {
pluginLogger.LogTask(slogger.INFO,
"Attaching file: %v -> %v", name, link)
}
retriableSendFile := util.RetriableFunc(
func() error {
resp, err := pluginCom.TaskPostJSON(
AttachTaskFilesAPIEndpoint,
self.Files.Array(),
)
if resp != nil {
defer resp.Body.Close()
}
if resp != nil && resp.StatusCode == http.StatusConflict {
body, _ := ioutil.ReadAll(resp.Body)
msg := fmt.Sprintf(
"secret conflict while posting task files: %v", string(body))
pluginLogger.LogTask(slogger.ERROR, msg)
return fmt.Errorf(msg)
}
if resp != nil && resp.StatusCode == http.StatusBadRequest {
body, _ := ioutil.ReadAll(resp.Body)
msg := fmt.Sprintf(
"error posting task files (%v): %v", resp.StatusCode, string(body))
pluginLogger.LogTask(slogger.ERROR, msg)
return fmt.Errorf(msg)
}
if resp != nil && resp.StatusCode != http.StatusOK {
body, _ := ioutil.ReadAll(resp.Body)
msg := fmt.Sprintf("error posting task files (%v): %v",
resp.StatusCode, string(body))
pluginLogger.LogExecution(slogger.WARN, msg)
return util.RetriableError{err}
}
if err != nil {
msg := fmt.Sprintf("error posting files: %v", err)
pluginLogger.LogExecution(slogger.WARN, msg)
return util.RetriableError{fmt.Errorf(msg)}
}
return nil
},
)
retryFail, err := util.Retry(retriableSendFile, AttachResultsPostRetries,
AttachResultsRetrySleepSec)
if retryFail {
return fmt.Errorf("Attach files failed after %v tries: %v",
AttachResultsPostRetries, err)
}
if err != nil {
return fmt.Errorf("Attach files failed: %v", err)
}
pluginLogger.LogExecution(slogger.INFO, "API attach files call succeeded")
return nil
}