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

Show the progress of plugins installation

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