init
parent
2077021097
commit
723372fe4d
|
@ -1,2 +1,10 @@
|
||||||
# wujian_develop_tool
|
# wujian_develop_tool
|
||||||
|
|
||||||
|
## 使用
|
||||||
|
|
||||||
|
### 初始化
|
||||||
|
|
||||||
|
```
|
||||||
|
wdt init
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -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