package main
import (
"github.com/gin-gonic/gin"
"fmt"
"os/exec"
"strings"
"reflect"
)
var envs = [...]string {"dev","qa","pre","prod"}
var dev_conf string = "/abc/def/aaa_kubeconfig"
var qa_conf string = "/abc/def/bbb_conf"
var pre_conf string = "/abc/def/ccc-kubeconfig"
var prod_conf string = "/abc/def/ddd.conf"
// 根据环境标识获取环境pod状态
func execCmd(kubeconf_path string,c chan string){
var str []byte
var cmd *exec.Cmd
var err error
cmd_str1 := "kubectl get pod -n son --kubeconfig "
cmd_str2 := cmd_str1 + kubeconf_path
println(cmd_str2)
cmd = exec.Command("sh","-c",cmd_str2)
str,err = cmd.Output()
if err != nil{
fmt.Println(err)
c <- "环境标识错误"
}
c <- string(str)
}
// 查看指定环境pod状态
func get_pod(env string)(abde string){
c := make(chan string)
var kubeconf_path string
fmt.Println("++++++++++++++++查看"+env+"环境pod+++++++++++++++++++")
switch env{
case envs[0]:
kubeconf_path = dev_conf
case envs[1]:
kubeconf_path = qa_conf
case envs[2]:
kubeconf_path = pro_conf
case envs[3]:
kubeconf_path = prod_conf
default:
kubeconf_path = "aa"
}
// 采用了go并发
go execCmd(kubeconf_path,c)
f := <-c
return string(f)
}
// 查看描述指定环境的pod信息
func cmd_desc(env string,pod string)(aa string){
var kubeconf_path string
switch env{
case envs[0]:
kubeconf_path = dev_conf
case envs[1]:
kubeconf_path = qa_conf
case envs[2]:
kubeconf_path = pre_conf
case envs[3]:
kubeconf_path = prod_conf
default:
kubeconf_path = "aa"
}
var str []byte
var cmd *exec.Cmd
var err error
cmd_str1 := "kubectl describe pod -n son --kubeconfig "
cmd_str2 := cmd_str1 + kubeconf_path +" "+pod
println(cmd_str2)
cmd = exec.Command("sh","-c",cmd_str2)
str,err = cmd.Output()
if err != nil{
fmt.Println(err)
return "1,检查uri格式是否正确(http:/127.0.0.1:8080/{env}/desc/{pod_name};\n2,确认pod名是否存在"
}
return string(str)
}
// 查看描述指定环境的pod日志
func cmd_logs(env string,pod string)(aa string){
var kubeconf_path string
switch env{
case envs[0]:
kubeconf_path = dev_conf
case envs[1]:
kubeconf_path = qa_conf
case envs[2]:
kubeconf_path = pre_conf
case envs[3]:
kubeconf_path = prod_conf
default:
kubeconf_path = "aa"
}
var str []byte
var cmd *exec.Cmd
var err error
cmd_str1 := "kubectl logs --since=1h -n son --kubeconfig "
cmd_str2 := cmd_str1 + kubeconf_path +" "+pod
println(cmd_str2)
cmd = exec.Command("sh","-c",cmd_str2)
str,err = cmd.Output()
if err != nil{
fmt.Println(err)
return "1,检查uri格式是否正确(http:/127.0.0.1:8080/{env}/logs/{pod_name};\n2,确认pod名是否存在;\n3,目前仅支持1个小时内的日志查询,暂不支持动态查询"
}
println(string(str))
return string(str)
}
// 查看描述指定环境的ingress
func cmd_ingress(env string)(aa string){
var kubeconf_path string
switch env{
case envs[0]:
kubeconf_path = dev_conf
case envs[1]:
kubeconf_path = qa_conf
case envs[2]:
kubeconf_path = pre_conf
case envs[3]:
kubeconf_path = prod_conf
default:
kubeconf_path = "aa"
}
var str []byte
var cmd *exec.Cmd
var err error
cmd_str1 := "kubectl get ing -n son --kubeconfig "
cmd_str2 := cmd_str1 + kubeconf_path
println(cmd_str2)
cmd = exec.Command("sh","-c",cmd_str2)
str,err = cmd.Output()
if err != nil{
fmt.Println(err)
return "1,检查uri格式是否正确(http:/127.0.0.1:8080/{env}/ingress)\n"
}
println(string(str))
return string(str)
}
func main() {
// 字符串相加(官方推荐方式)
s1 := "aaaa"
s2 := "bbbb"
var build strings.Builder
build.WriteString(s1)
build.WriteString(s2)
s3 := build.String()
fmt.Println(s3)
fmt.Println("Hello, World!")
fmt.Println("**************程序启动*****************")
// 创建一个默认的路由引擎
router := gin.Default()
// GET:请求方式;/hello:请求的路径
// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
router.GET("/hello/:env", func(c *gin.Context) {
env := c.Param("env")
// c.JSON:返回JSON格式的数据
c.JSON(200, gin.H{
"message": env,
})
})
router.GET("/:env/desc/:pod", func(c *gin.Context) {
env := c.Param("env")
pod := c.Param("pod")
// c.String 返回String格式的数据
c.String(200,string(cmd_desc(env,pod)))
})
router.GET("/:env/logs/:pod", func(c *gin.Context) {
env := c.Param("env")
pod := c.Param("pod")
// c.String 返回String格式的数据
c.String(200, string(cmd_logs(env,pod)))
})
router.GET("/:env", func(c *gin.Context) {
env := c.Param("env")
// 打印对象类型
fmt.Println(reflect.TypeOf(get_pod(env)))
c.String
// 启动HTTP服务,默认在0.0.0.0:8080启动服务
router.Run(":8001")
}
网友评论