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

Show the progress of plugins installation

上级 070ad591
......@@ -3,13 +3,24 @@ package cmd
import (
"fmt"
"log"
"time"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/spf13/cobra"
)
type CenterOption struct {
WatchOption
CeneterStatus string
}
var centerOption CenterOption
func init() {
rootCmd.AddCommand(centerCmd)
centerCmd.Flags().BoolVarP(&centerOption.Watch, "watch", "w", false, "Watch Jenkins center")
centerCmd.Flags().IntVarP(&centerOption.Interval, "interval", "i", 1, "Interval of watch")
}
var centerCmd = &cobra.Command{
......@@ -19,7 +30,16 @@ var centerCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
jenkins := getCurrentJenkins()
printJenkinsStatus(jenkins)
printUpdateCenter(jenkins)
for {
printUpdateCenter(jenkins)
if !centerOption.Watch {
break
}
time.Sleep(time.Duration(centerOption.Interval) * time.Second)
}
},
}
......@@ -29,13 +49,24 @@ func printUpdateCenter(jenkins *JenkinsServer) {
jclient.UserName = jenkins.UserName
jclient.Token = jenkins.Token
var centerStatus string
if status, err := jclient.Status(); err == nil {
fmt.Println("RestartRequiredForCompletion:", status.RestartRequiredForCompletion)
centerStatus += fmt.Sprintf("RestartRequiredForCompletion: %v\n", status.RestartRequiredForCompletion)
if status.Jobs != nil {
for i, job := range status.Jobs {
fmt.Printf("%d, %s, %s\n", i, job.Type, job.ErrorMessage)
if job.Type == "InstallationJob" {
centerStatus += fmt.Sprintf("%d, %s, %s, %v, %s\n", i, job.Type, job.Name, job.Status, job.ErrorMessage)
} else {
centerStatus += fmt.Sprintf("%d, %s, %s\n", i, job.Type, job.ErrorMessage)
}
}
}
if centerOption.CeneterStatus != centerStatus {
centerOption.CeneterStatus = centerStatus
fmt.Printf("%s", centerStatus)
}
} else {
log.Fatal(err)
}
......
......@@ -16,7 +16,7 @@ type UpdateCenterManager struct {
// UpdateCenter represents the update center of Jenkins
type UpdateCenter struct {
Availables []Plugin
Jobs []UpdateCenterJob
Jobs []InstallationJob
RestartRequiredForCompletion bool
Sites []CenterSite
}
......@@ -28,6 +28,18 @@ type UpdateCenterJob struct {
Type string
}
type InstallationJob struct {
UpdateCenterJob
Name string
Status InstallationJobStatus
}
type InstallationJobStatus struct {
Success bool
Type string
}
// CenterSite represents the site of update center
type CenterSite struct {
ConnectionCheckURL string `json:"connectionCheckUrl"`
......@@ -36,6 +48,24 @@ type CenterSite struct {
URL string `json:"url"`
}
type InstallStates struct {
Data InstallStatesData
Status string
}
type InstallStatesData struct {
Jobs InstallStatesJob
State string
}
type InstallStatesJob struct {
InstallStatus string
Name string
RequiresRestart string
Title string
Version string
}
func (u *UpdateCenterManager) Status() (status *UpdateCenter, err error) {
api := fmt.Sprintf("%s/updateCenter/api/json?pretty=false&depth=1", u.URL)
var (
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册