Commit 95ffb832 by 陶腾飞

2022/04/29 v2.5.5

parent 8eade0b1
...@@ -100,7 +100,8 @@ ...@@ -100,7 +100,8 @@
- 2022/04/23 v2.5.1 每月10号和25号提醒新人创建个人账号 - 2022/04/23 v2.5.1 每月10号和25号提醒新人创建个人账号
- 2022/04/23 v2.5.2 添加知微运维平台的"账号管理功能" - 2022/04/23 v2.5.2 添加知微运维平台的"账号管理功能"
- 2022/04/25 v2.5.3 更新powershell函数 - 2022/04/25 v2.5.3 更新powershell函数
- 2022/04/26 v2.5.4 更新powershell函数 - 2022/04/26 v2.5.4 cmdb消息初始化
- 2022/04/29 v2.5.5 ci工具 自我升级
## 四、其他说明 ## 四、其他说明
......
package public
func ArrayContains(items []string, item string) bool {
for _, eachItem := range items {
if eachItem == item {
return true
}
}
return false
}
package public package public
import ( import (
"fmt"
"strings" "strings"
"golang.org/x/text/encoding/simplifiedchinese"
) )
var punctuationMap = map[rune]rune{ var punctuationMap = map[rune]rune{
...@@ -30,3 +33,18 @@ func ToEnglishSymbol(text string) string { ...@@ -30,3 +33,18 @@ func ToEnglishSymbol(text string) string {
}, text) }, text)
return text return text
} }
func ToChineseChar(b []byte) []byte {
r, _ := simplifiedchinese.GBK.NewDecoder().Bytes(b)
return r
}
func JoinPlus(array []string, lr, m string) string {
var r string
for i, j := range array {
if i == len(array)-1 {
m = ""
}
r += fmt.Sprintf(`%s%s%s%s`, lr, j, lr, m)
}
return r
}
package public
var CI_Update bool
func (ci *MJCmdbInfo) updateC() {
CI_Update = ci.DataBool
}
package public
import "fmt"
func (ci *MJCmdbInfo) updateS() {
ci.Explain = fmt.Sprintf("CI Daemon:%s,CI Client:%s", Version, ci.DataStr)
// 不等于 表示需要更新
if Version != ci.DataStr {
ci.DataBool = true
} else {
ci.DataBool = false
}
}
...@@ -187,27 +187,27 @@ func (cir *CIRecordStartup) GetDept() (string, error) { ...@@ -187,27 +187,27 @@ func (cir *CIRecordStartup) GetDept() (string, error) {
} }
switch hostnameSplit[1] { switch hostnameSplit[1] {
case "JL": case "JL":
result = Dept_zw_qbmb_jl_string + Dept_group result = Dept_zw_qbmb_jl_string + Dept_zw_qbbm_unit
case "ZJ": case "ZJ":
result = Dept_zw_qbmb_zj_string + Dept_group result = Dept_zw_qbmb_zj_string + Dept_zw_qbbm_unit
case "MT": case "MT":
result = Dept_zw_qbmb_mt_string + Dept_group result = Dept_zw_qbmb_mt_string + Dept_zw_qbbm_unit
case "DD": case "DD":
result = Dept_zw_qbmb_dd_string + Dept_group result = Dept_zw_qbmb_dd_string + Dept_zw_qbbm_unit
case "JR": case "JR":
result = Dept_zw_qbmb_jr_string + Dept_group result = Dept_zw_qbmb_jr_string + Dept_zw_qbbm_unit
case "TXHD": case "TXHD":
result = Dept_zw_qbmb_txhd_string + Dept_group result = Dept_zw_qbmb_txhd_string + Dept_zw_qbbm_unit
case "TXWJ": case "TXWJ":
result = Dept_zw_qbmb_txwj_string + Dept_group result = Dept_zw_qbmb_txwj_string + Dept_zw_qbbm_unit
case "JS": case "JS":
result = Dept_zw_qbmb_js_string + Dept_group result = Dept_zw_qbmb_js_string + Dept_zw_qbbm_unit
case "JD": case "JD":
result = Dept_zw_qbmb_jd_string + Dept_group result = Dept_zw_qbmb_jd_string + Dept_zw_qbbm_unit
case "HW": case "HW":
result = Dept_zw_qbmb_hw_string + Dept_group result = Dept_zw_qbmb_hw_string + Dept_zw_qbbm_unit
case "BGYJ": case "BGYJ":
result = Dept_zw_qbmb_bgyj_string + Dept_group result = Dept_zw_qbmb_bgyj_string + Dept_zw_qbbm_unit
default: default:
result = ERROR result = ERROR
} }
......
package public package public
import "fmt" import (
"fmt"
)
const Region_nb = "宁波" const Region_nb = "宁波"
const Region_zz = "郑州" const Region_zz = "郑州"
const Dept_group = "组" const Dept_zw_unit = "部"
const Dept_zw_jishu = "技术部门" const Dept_zw_qbbm_unit = "组"
const Dept_zw_chanpin = "产品部门"
const Dept_zw_chanpin = "产品"
const Dept_zw_renshi = "人事"
const Dept_zw_peixun = "培训"
const Dept_zw_chaiwu = "财务"
const Dept_zw_jishu = "技术"
const Dept_zw_qbmb = "情报部门" const Dept_zw_qbmb = "情报部门"
const Dept_zw_qbmb_1 = "情报一部" const Dept_zw_qbmb_1 = "情报一部"
const Dept_zw_qbmb_2 = "情报二部" const Dept_zw_qbmb_2 = "情报二部"
...@@ -23,6 +31,9 @@ const Dept_zw_qbmb_jd_string = "京东" ...@@ -23,6 +31,9 @@ const Dept_zw_qbmb_jd_string = "京东"
const Dept_zw_qbmb_hw_string = "华为" const Dept_zw_qbmb_hw_string = "华为"
const Dept_zw_qbmb_bgyj_string = "报告研究中心" const Dept_zw_qbmb_bgyj_string = "报告研究中心"
var Dept_zw_region_array = []string{Region_nb, Region_zz}
var Dept_zw_noqbmm_array = []string{Dept_zw_chanpin, Dept_zw_renshi, Dept_zw_peixun, Dept_zw_chaiwu, Dept_zw_jishu}
func GetPostationFromHostname(hostname string) (string, error) { func GetPostationFromHostname(hostname string) (string, error) {
switch hostname { switch hostname {
case Host_adserver: case Host_adserver:
......
...@@ -11,9 +11,10 @@ const SymbolHostname = "-" ...@@ -11,9 +11,10 @@ const SymbolHostname = "-"
// AD-Control // // AD-Control //
const Version string = "2.5.4" const Version string = "2.5.5"
const Host_adserver string = "ADSERVER" const Host_adserver string = "ADSERVER"
const Host_adserver_ip string = "192.168.0.20" const Host_adserver_lan string = "192.168.0.20"
const Host_adserver_wan string = "115.231.214.234"
const Host_thserver string = "THSERVER" const Host_thserver string = "THSERVER"
const Host_zzserver string = "ZZSERVER" const Host_zzserver string = "ZZSERVER"
const DaemonListen string = ":16823" const DaemonListen string = ":16823"
...@@ -55,6 +56,7 @@ var Dir_userprofile string = GetEnv("USERPROFILE") ...@@ -55,6 +56,7 @@ var Dir_userprofile string = GetEnv("USERPROFILE")
var Dir_tmp string = GetEnv("tmp") var Dir_tmp string = GetEnv("tmp")
const Dir_ADsoftware_local string = `H:\software\softlike\` const Dir_ADsoftware_local string = `H:\software\softlike\`
const Dir_ADControl_local string = `H:\software\application\`
// application // // application //
const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe" const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe"
......
...@@ -10,22 +10,37 @@ import ( ...@@ -10,22 +10,37 @@ import (
// 消息入口 // 消息入口
func DealMsgEnter(w http.ResponseWriter, r *http.Request) { func DealMsgEnter(w http.ResponseWriter, r *http.Request) {
url := strings.Split(r.URL.Path, "/")
query := r.URL.RawQuery
msgtype := r.URL.Path[1:]
url := r.URL.RawQuery
unmsg, err := ioutil.ReadAll(r.Body) unmsg, err := ioutil.ReadAll(r.Body)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
w.Write([]byte("")) w.Write([]byte(""))
} }
w.Write(DealMsg(msgtype, url, unmsg)) if r, err := DealMsg(url, query, unmsg); err != nil {
w.WriteHeader(504)
} else {
w.Write(r)
}
} }
// 处理消息 // 处理消息
func DealMsg(msgtype, url string, unmsg []byte) []byte { func DealMsg(url []string, query string, unmsg []byte) ([]byte, error) {
msgtype := url[1]
var ret []byte var ret []byte
switch msgtype { switch msgtype {
case "file":
var err error
file := url[2]
ret, err = ioutil.ReadFile(Dir_ADControl_local + file)
if err != nil {
LOG(ERROR, NULL, err)
return nil, err
}
// 报告 消息 // 报告 消息
case Msg_Report: case Msg_Report:
...@@ -49,17 +64,17 @@ func DealMsg(msgtype, url string, unmsg []byte) []byte { ...@@ -49,17 +64,17 @@ func DealMsg(msgtype, url string, unmsg []byte) []byte {
ret = ReParseJson(&ice) ret = ReParseJson(&ice)
// CMDB 消息 // CMDB 消息
case Msg_CMDB: case Msg_CmdbInfo:
var msg MJcmdb var msg MJCmdbInfo
ParseJson(unmsg, &msg) ParseJson(unmsg, &msg)
ice := msg.MsgDeal() ice := msg.MsgDeal()
ret = ReParseJson(&ice) ret = ReParseJson(&ice)
default: default:
msg := ParseWX(url, &unmsg) msg := ParseWX(query, &unmsg)
go msg.MsgDealSend() go msg.MsgDealSend()
} }
return ret return ret, nil
} }
// //
...@@ -430,9 +445,29 @@ func (wake *MJwake) MsgDeal() interface{} { ...@@ -430,9 +445,29 @@ func (wake *MJwake) MsgDeal() interface{} {
} }
// 关于 CMDB 的消息处理 // 关于 CMDB 的消息处理
func (cmdb *MJcmdb) MsgDeal() interface{} { func (ci *MJCmdbInfo) MsgDeal() interface{} {
fmt.Println("cmdb") switch ci.Instruction {
return cmdb case Msg_CmdbInfo_update:
switch ci.Status {
case Msg_status_commit:
ci.updateS()
case Msg_status_deal:
ci.updateC()
}
}
// 修改状态
switch ci.Status {
// 服务器
case Msg_status_commit:
ci.Status = Msg_status_deal
// 客户端
case Msg_status_deal:
return nil
}
return ci
} }
// 关于 wxwork 企业微信 的 消息处理 // 关于 wxwork 企业微信 的 消息处理
......
...@@ -18,7 +18,7 @@ const Msg_status_deal string = "deal" ...@@ -18,7 +18,7 @@ const Msg_status_deal string = "deal"
const Msg_Report string = "report" const Msg_Report string = "report"
const Msg_Exec string = "exec" const Msg_Exec string = "exec"
const Msg_Wake string = "wake" const Msg_Wake string = "wake"
const Msg_CMDB string = "cmdb" const Msg_CmdbInfo string = "cmdbinfo"
const Msg_Wxwork string = "wxwork" const Msg_Wxwork string = "wxwork"
// msg report type /////////////////////////////////////////////////////////// // msg report type ///////////////////////////////////////////////////////////
...@@ -58,7 +58,10 @@ const Msg_Wake_Status_Req string = "WakeReq" ...@@ -58,7 +58,10 @@ const Msg_Wake_Status_Req string = "WakeReq"
const Msg_Wake_Status_Start string = "WakeStart" const Msg_Wake_Status_Start string = "WakeStart"
const Msg_Wake_Status_Over string = "WakeOver" const Msg_Wake_Status_Over string = "WakeOver"
// wxwork event key //////////////////////////////////////////////////////////////// // msg cmdb info key //
const Msg_CmdbInfo_update string = "update"
// msg wxwork event key ////////////////////////////////////////////////////////////////
const WXEK_zwDevopsPowerWake string = "zwdevops_power_wake" const WXEK_zwDevopsPowerWake string = "zwdevops_power_wake"
const WXEK_zwDevopsPowerTurnOFF string = "zwdevops_power_turnoff" const WXEK_zwDevopsPowerTurnOFF string = "zwdevops_power_turnoff"
...@@ -128,12 +131,13 @@ type MJwxwork struct { ...@@ -128,12 +131,13 @@ type MJwxwork struct {
Result string Result string
Content string Content string
} }
type MJcmdb struct { type MJCmdbInfo struct {
MsgType string `json:"msgtype"` MsgType string `json:"msgtype"`
Status string `json:"status"` Status string `json:"status"`
Instruction string `json:"instruction"` Instruction string `json:"instruction"`
Explain string `json:"explain"` Explain string `json:"explain"`
Version string `json:"version"` DataStr string `json:"datastr"`
DataBool bool `json:"databool"`
} }
// //
...@@ -238,6 +242,17 @@ func GJwakeList(list string) interface{} { ...@@ -238,6 +242,17 @@ func GJwakeList(list string) interface{} {
return wake return wake
} }
// cmdb
func GJCmdbInfo(s string, data string) MJCmdbInfo {
var ci MJCmdbInfo
ci.MsgType = Msg_CmdbInfo
ci.Status = Msg_status_commit
ci.Instruction = s
ci.DataStr = data
return ci
}
// wxwork // wxwork
func (wxwork *MJwxwork) SendText(text string) { func (wxwork *MJwxwork) SendText(text string) {
......
...@@ -7,6 +7,8 @@ import ( ...@@ -7,6 +7,8 @@ import (
"io/ioutil" "io/ioutil"
"net" "net"
"net/http" "net/http"
"net/url"
"strings"
) )
var sendserver func(msgtype string, v interface{}) var sendserver func(msgtype string, v interface{})
...@@ -38,6 +40,7 @@ func SendMsg(server, msgtype string, v interface{}) { ...@@ -38,6 +40,7 @@ func SendMsg(server, msgtype string, v interface{}) {
LOG(ERROR, "Json to byte Error", fmt.Sprintf("%v %v", err, v)) LOG(ERROR, "Json to byte Error", fmt.Sprintf("%v %v", err, v))
} }
link := fmt.Sprintf("http://%s/%s", server, msgtype) link := fmt.Sprintf("http://%s/%s", server, msgtype)
fmt.Println(string(textbyte))
// 发送数据 // 发送数据
resp, err := http.Post( resp, err := http.Post(
link, link,
...@@ -48,14 +51,25 @@ func SendMsg(server, msgtype string, v interface{}) { ...@@ -48,14 +51,25 @@ func SendMsg(server, msgtype string, v interface{}) {
} }
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != 200 {
LOG(ERROR, "", fmt.Sprintf("url:%s,StatusCode:%d,data:%s\n", link, resp.StatusCode, string(textbyte)))
return
}
// 解析url
url_link, _ := url.Parse(link)
url := strings.Split(url_link.Path, "/")
query := url_link.RawQuery
// 读取数据 // 读取数据
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
} }
// 处理数据 // 处理数据
if len(body) > 0 && string(body) != "null" { if len(body) > 0 && string(body) != "null" {
DealMsg(msgtype, "", body) DealMsg(url, query, body)
} }
} }
...@@ -90,6 +104,9 @@ func SendGetRequest(link *string) ([]byte, error) { ...@@ -90,6 +104,9 @@ func SendGetRequest(link *string) ([]byte, error) {
return nil, err return nil, err
} }
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != 200 {
return nil, fmt.Errorf("url:%s,StatusCode:%d", *link, resp.StatusCode)
}
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
return body, err return body, err
} }
......
...@@ -8,8 +8,6 @@ import ( ...@@ -8,8 +8,6 @@ import (
"os/exec" "os/exec"
"strconv" "strconv"
"strings" "strings"
"golang.org/x/text/encoding/simplifiedchinese"
) )
// 获取环境变量 // 获取环境变量
...@@ -26,10 +24,7 @@ func GetEnvFqdn(s string) string { ...@@ -26,10 +24,7 @@ func GetEnvFqdn(s string) string {
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
} }
out, err := simplifiedchinese.GBK.NewDecoder().Bytes(cmd) out := ToChineseChar(cmd)
if err != nil {
LOG(ERROR, NULL, err)
}
for _, each := range strings.Split(string(out), ",") { for _, each := range strings.Split(string(out), ",") {
if strings.Contains(each, s) { if strings.Contains(each, s) {
...@@ -142,7 +137,7 @@ func Execcmd_output(cmdargs string) []byte { ...@@ -142,7 +137,7 @@ func Execcmd_output(cmdargs string) []byte {
func Execcmd_outputIgnoreError(cmdargs string) []byte { func Execcmd_outputIgnoreError(cmdargs string) []byte {
app, appargs, _ := execcmd_base_nolog(cmdargs) app, appargs, _ := execcmd_base_nolog(cmdargs)
out, _ := exec.Command(app, appargs...).CombinedOutput() out, _ := exec.Command(app, appargs...).CombinedOutput()
outchinese, _ := simplifiedchinese.GBK.NewDecoder().Bytes(out) outchinese := ToChineseChar(out)
return outchinese return outchinese
} }
...@@ -176,7 +171,7 @@ func PSCommandOutput(cmd string) (string, error) { ...@@ -176,7 +171,7 @@ func PSCommandOutput(cmd string) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
out, err := simplifiedchinese.GBK.NewDecoder().Bytes(r) out := ToChineseChar(r)
if err != nil { if err != nil {
return "", err return "", err
} }
...@@ -304,7 +299,7 @@ func CopyFile(dstFileName string, srcFileName string) (written int64, err error) ...@@ -304,7 +299,7 @@ func CopyFile(dstFileName string, srcFileName string) (written int64, err error)
srcFile, err := os.Open(srcFileName) srcFile, err := os.Open(srcFileName)
if err != nil { if err != nil {
LOG(ERROR, NULL, fmt.Sprintf("open file err = %v\n", err)) LOG(ERROR, NULL, err)
return return
} }
...@@ -313,7 +308,7 @@ func CopyFile(dstFileName string, srcFileName string) (written int64, err error) ...@@ -313,7 +308,7 @@ func CopyFile(dstFileName string, srcFileName string) (written int64, err error)
// dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, 0755) // dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, 0755)
dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755) dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
if err != nil { if err != nil {
LOG(ERROR, NULL, fmt.Sprintf("open file err = %v\n", err)) LOG(ERROR, NULL, err)
return return
} }
...@@ -330,10 +325,10 @@ func RemoveFile(name string) error { ...@@ -330,10 +325,10 @@ func RemoveFile(name string) error {
// 创建文件夹 // 创建文件夹
func mkdir(dir string) { func mkdir(dir string) {
os.Mkdir(dir, os.ModeSetuid) os.Mkdir(dir, 0755)
} }
func MkdirAll(dir string) error { func MkdirAll(dir string) error {
return os.MkdirAll(dir, os.ModeSetuid) return os.MkdirAll(dir, 0755)
} }
func ExistFolder(dir string) { func ExistFolder(dir string) {
if NotExist(dir) { if NotExist(dir) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment