提交 68803624 编写于 作者: LinuxSuRen's avatar LinuxSuRen

Add a sub-cmd to print status of Jenkins update center

上级 bfac1f40
package cmd
import (
"fmt"
"log"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/spf13/cobra"
)
func init() {
rootCmd.AddCommand(centerCmd)
}
var centerCmd = &cobra.Command{
Use: "center",
Short: "Manage your update center",
Long: `Manage your update center`,
Run: func(cmd *cobra.Command, args []string) {
jenkins := getCurrentJenkins()
jclient := &client.UpdateCenterManager{}
jclient.URL = jenkins.URL
jclient.UserName = jenkins.UserName
jclient.Token = jenkins.Token
if status, err := jclient.Status(); err == nil {
fmt.Println("RestartRequiredForCompletion:", status.RestartRequiredForCompletion)
if status.Jobs != nil {
for i, job := range status.Jobs {
fmt.Printf("%d, %s, %s\n", i, job.Type, job.ErrorMessage)
}
}
} else {
log.Fatal(err)
}
},
}
package client
import (
"crypto/tls"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
// UpdateCenterManager manages the UpdateCenter
type UpdateCenterManager struct {
JenkinsCore
}
// UpdateCenter represents the update center of Jenkins
type UpdateCenter struct {
Availables []Plugin
Jobs []UpdateCenterJob
RestartRequiredForCompletion bool
Sites []CenterSite
}
// UpdateCenterJob represents the job for updateCenter which execute a task
type UpdateCenterJob struct {
ErrorMessage string
ID int `json:"id"`
Type string
}
// CenterSite represents the site of update center
type CenterSite struct {
ConnectionCheckURL string `json:"connectionCheckUrl"`
HasUpdates bool
ID string `json:"id"`
URL string `json:"url"`
}
func (u *UpdateCenterManager) Status() (status *UpdateCenter, err error) {
api := fmt.Sprintf("%s/updateCenter/api/json?pretty=false&depth=1", u.URL)
var (
req *http.Request
response *http.Response
)
req, err = http.NewRequest("GET", api, nil)
if err == nil {
u.AuthHandle(req)
} else {
return
}
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
if response, err = client.Do(req); err == nil {
code := response.StatusCode
var data []byte
data, err = ioutil.ReadAll(response.Body)
if code == 200 {
if err == nil {
status = &UpdateCenter{}
err = json.Unmarshal(data, status)
}
} else {
log.Fatal(string(data))
}
} else {
log.Fatal(err)
}
return
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册