init
parent
2077021097
commit
723372fe4d
|
@ -0,0 +1,36 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/fatih/color"
|
||||
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
// ActionApi API应用列表
|
||||
func ActionApi(c *cli.Context) error {
|
||||
// 读取配置
|
||||
err := ReadConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
apiList := c.Args().Slice()
|
||||
color.Green("API应用列表:")
|
||||
for _, api := range config.Api.HasApp(apiList) {
|
||||
color.Green("\t%s", api.Name)
|
||||
color.Green("\t\t路径:\t%s", api.Root)
|
||||
color.Green("\t\t类型:\t%s", api.Type)
|
||||
color.Green("\t\t端口:\t%s", api.Port)
|
||||
c := color.New(color.Bold)
|
||||
c.EnableColor()
|
||||
_, err := c.Println(healthApi(api))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Print("\n")
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
const DefaultConfigFile = ".drone.yml"
|
||||
|
||||
type Config struct {
|
||||
Kind string `json:"kind" yaml:"kind"`
|
||||
Type string `json:"type" yaml:"type"`
|
||||
Name string `json:"name" yaml:"name"`
|
||||
Api ApiList `json:"api" yaml:"api"`
|
||||
Service ServiceList `json:"service" yaml:"service"`
|
||||
}
|
||||
|
||||
type (
|
||||
ApiList []Api
|
||||
Api struct {
|
||||
Name string `json:"name" yaml:"name"`
|
||||
Root string `json:"root" yaml:"root"`
|
||||
Type string `json:"type" yaml:"type"`
|
||||
Port string `json:"port" yaml:"port"`
|
||||
}
|
||||
)
|
||||
|
||||
type (
|
||||
ServiceList []Service
|
||||
Service struct {
|
||||
Name string `json:"name" yaml:"name"`
|
||||
Root string `json:"root" yaml:"root"`
|
||||
Type string `json:"type" yaml:"type"`
|
||||
Port string `json:"port" yaml:"port"`
|
||||
}
|
||||
)
|
||||
|
||||
var config Config
|
||||
|
||||
func ReadConfig() error {
|
||||
configFile, err := ioutil.ReadFile(DefaultConfigFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = yaml.Unmarshal(configFile, &config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (al ApiList) HasApp(appNameList []string) ApiList {
|
||||
if len(appNameList) == 0 {
|
||||
return al
|
||||
}
|
||||
|
||||
hasApp := make(ApiList, 0, len(al))
|
||||
|
||||
al:
|
||||
for _, api := range al {
|
||||
for _, a := range appNameList {
|
||||
if a == api.Name {
|
||||
hasApp = append(hasApp, api)
|
||||
continue al
|
||||
}
|
||||
}
|
||||
}
|
||||
return hasApp
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
module git.icechen.cn/pkg/wdt
|
||||
|
||||
go 1.17
|
||||
|
||||
require (
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
||||
github.com/fatih/color v1.13.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.9 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
|
||||
github.com/urfave/cli/v2 v2.3.0 // indirect
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||
)
|
|
@ -0,0 +1,27 @@
|
|||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
|
||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||
github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U=
|
||||
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
|
||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
@ -0,0 +1,62 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"os"
|
||||
)
|
||||
|
||||
type healthResp struct {
|
||||
Dir bool // 应用目录健康度
|
||||
Deploy bool // 部署健康度
|
||||
Dockerfile bool // 构建镜像健康度
|
||||
}
|
||||
|
||||
func (hr healthResp) IsHealth() bool {
|
||||
return hr.Dir && hr.Deploy && hr.Dockerfile
|
||||
}
|
||||
|
||||
func (hr healthResp) String() string {
|
||||
if hr.IsHealth() {
|
||||
return "\t\t应用情况健康"
|
||||
}
|
||||
|
||||
b := bytes.Buffer{}
|
||||
if !hr.Dir {
|
||||
b.WriteString("\t\t应用目录:\t不存在")
|
||||
}
|
||||
if !hr.Deploy {
|
||||
b.WriteString("\t\t部署文件:\t不存在")
|
||||
}
|
||||
if !hr.Dockerfile {
|
||||
b.WriteString("\t\t构建文件:\t不存在")
|
||||
}
|
||||
return b.String()
|
||||
}
|
||||
|
||||
func healthApi(api Api) healthResp {
|
||||
ret := healthResp{
|
||||
Dir: false,
|
||||
Deploy: false,
|
||||
Dockerfile: false,
|
||||
}
|
||||
|
||||
// Dir 健康度
|
||||
info, err := os.Stat(api.Root)
|
||||
if err == nil && info.IsDir() {
|
||||
ret.Dir = true
|
||||
}
|
||||
|
||||
// Deploy 健康度
|
||||
info, err = os.Stat(api.Root + "/deploy")
|
||||
if err == nil && info.IsDir() {
|
||||
ret.Deploy = true
|
||||
}
|
||||
|
||||
// Dockerfile 健康度
|
||||
info, err = os.Stat(api.Root + "/Dockerfile")
|
||||
if err == nil && !info.IsDir() {
|
||||
ret.Dockerfile = true
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
func main() {
|
||||
app := cli.NewApp()
|
||||
app = &cli.App{
|
||||
Name: "wujian develop tool",
|
||||
Usage: "无间开发者工具箱",
|
||||
Version: "v0.0.1",
|
||||
EnableBashCompletion: true,
|
||||
Commands: cli.Commands{
|
||||
&cli.Command{
|
||||
Name: "api",
|
||||
Usage: "api应用列表",
|
||||
Action: ActionApi,
|
||||
Flags: []cli.Flag{
|
||||
&cli.BoolFlag{
|
||||
Name: "all",
|
||||
Aliases: []string{"a"},
|
||||
Usage: "所有应用",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
err := app.Run(os.Args)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue