diff --git a/app/cmd/center.go b/app/cmd/center.go index b0bf9a74d11e5d02f6969b223d8496dcbc1203e2..379f21a8a0222047ceef6358ccc2fdf2a4e06364 100644 --- a/app/cmd/center.go +++ b/app/cmd/center.go @@ -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(¢erOption.Watch, "watch", "w", false, "Watch Jenkins center") + centerCmd.Flags().IntVarP(¢erOption.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) } diff --git a/client/updateCenter.go b/client/updateCenter.go index ff653ccf5d8c15210bbbfc7f4e7ab567fbfb4c1b..9841a18b0e5b277aec47421f8342cd41440e4191 100644 --- a/client/updateCenter.go +++ b/client/updateCenter.go @@ -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 (