center.go 2.1 KB
Newer Older
1 2 3 4 5
package cmd

import (
	"fmt"
	"log"
6
	"time"
7

8
	"github.com/jenkins-zh/jenkins-cli/client"
9 10 11
	"github.com/spf13/cobra"
)

12 13 14 15 16 17 18 19
type CenterOption struct {
	WatchOption

	CeneterStatus string
}

var centerOption CenterOption

20 21
func init() {
	rootCmd.AddCommand(centerCmd)
22 23
	centerCmd.Flags().BoolVarP(&centerOption.Watch, "watch", "w", false, "Watch Jenkins center")
	centerCmd.Flags().IntVarP(&centerOption.Interval, "interval", "i", 1, "Interval of watch")
24 25 26 27 28 29
}

var centerCmd = &cobra.Command{
	Use:   "center",
	Short: "Manage your update center",
	Long:  `Manage your update center`,
yJunS's avatar
yJunS 已提交
30
	Run: func(_ *cobra.Command, _ []string) {
LinuxSuRen's avatar
LinuxSuRen 已提交
31
		jenkins := getCurrentJenkinsFromOptionsOrDie()
32
		printJenkinsStatus(jenkins)
33 34 35 36 37 38 39 40 41 42

		for {
			printUpdateCenter(jenkins)

			if !centerOption.Watch {
				break
			}

			time.Sleep(time.Duration(centerOption.Interval) * time.Second)
		}
43 44 45 46 47 48 49 50
	},
}

func printUpdateCenter(jenkins *JenkinsServer) {
	jclient := &client.UpdateCenterManager{}
	jclient.URL = jenkins.URL
	jclient.UserName = jenkins.UserName
	jclient.Token = jenkins.Token
LinuxSuRen's avatar
LinuxSuRen 已提交
51 52
	jclient.Proxy = jenkins.Proxy
	jclient.ProxyAuth = jenkins.ProxyAuth
53

54
	var centerStatus string
55
	if status, err := jclient.Status(); err == nil {
56
		centerStatus += fmt.Sprintf("RestartRequiredForCompletion: %v\n", status.RestartRequiredForCompletion)
57 58
		if status.Jobs != nil {
			for i, job := range status.Jobs {
59 60 61 62 63
				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)
				}
64 65
			}
		}
66 67 68 69 70 71

		if centerOption.CeneterStatus != centerStatus {
			centerOption.CeneterStatus = centerStatus

			fmt.Printf("%s", centerStatus)
		}
72 73 74 75 76 77 78 79 80 81
	} else {
		log.Fatal(err)
	}
}

func printJenkinsStatus(jenkins *JenkinsServer) {
	jclient := &client.JenkinsStatusClient{}
	jclient.URL = jenkins.URL
	jclient.UserName = jenkins.UserName
	jclient.Token = jenkins.Token
LinuxSuRen's avatar
LinuxSuRen 已提交
82 83
	jclient.Proxy = jenkins.Proxy
	jclient.ProxyAuth = jenkins.ProxyAuth
84 85 86 87 88 89

	if status, err := jclient.Get(); err == nil {
		fmt.Println("Jenkins Version:", status.Version)
	} else {
		log.Fatal(err)
	}
90
}