Commit 95ffb832 by 陶腾飞

2022/04/29 v2.5.5

parent 8eade0b1
......@@ -100,7 +100,8 @@
- 2022/04/23 v2.5.1 每月10号和25号提醒新人创建个人账号
- 2022/04/23 v2.5.2 添加知微运维平台的"账号管理功能"
- 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
import (
"fmt"
"strings"
"golang.org/x/text/encoding/simplifiedchinese"
)
var punctuationMap = map[rune]rune{
......@@ -30,3 +33,18 @@ func ToEnglishSymbol(text string) string {
}, 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) {
}
switch hostnameSplit[1] {
case "JL":
result = Dept_zw_qbmb_jl_string + Dept_group
result = Dept_zw_qbmb_jl_string + Dept_zw_qbbm_unit
case "ZJ":
result = Dept_zw_qbmb_zj_string + Dept_group
result = Dept_zw_qbmb_zj_string + Dept_zw_qbbm_unit
case "MT":
result = Dept_zw_qbmb_mt_string + Dept_group
result = Dept_zw_qbmb_mt_string + Dept_zw_qbbm_unit
case "DD":
result = Dept_zw_qbmb_dd_string + Dept_group
result = Dept_zw_qbmb_dd_string + Dept_zw_qbbm_unit
case "JR":
result = Dept_zw_qbmb_jr_string + Dept_group
result = Dept_zw_qbmb_jr_string + Dept_zw_qbbm_unit
case "TXHD":
result = Dept_zw_qbmb_txhd_string + Dept_group
result = Dept_zw_qbmb_txhd_string + Dept_zw_qbbm_unit
case "TXWJ":
result = Dept_zw_qbmb_txwj_string + Dept_group
result = Dept_zw_qbmb_txwj_string + Dept_zw_qbbm_unit
case "JS":
result = Dept_zw_qbmb_js_string + Dept_group
result = Dept_zw_qbmb_js_string + Dept_zw_qbbm_unit
case "JD":
result = Dept_zw_qbmb_jd_string + Dept_group
result = Dept_zw_qbmb_jd_string + Dept_zw_qbbm_unit
case "HW":
result = Dept_zw_qbmb_hw_string + Dept_group
result = Dept_zw_qbmb_hw_string + Dept_zw_qbbm_unit
case "BGYJ":
result = Dept_zw_qbmb_bgyj_string + Dept_group
result = Dept_zw_qbmb_bgyj_string + Dept_zw_qbbm_unit
default:
result = ERROR
}
......
package public
import "fmt"
import (
"fmt"
)
const Region_nb = "宁波"
const Region_zz = "郑州"
const Dept_group = "组"
const Dept_zw_jishu = "技术部门"
const Dept_zw_chanpin = "产品部门"
const Dept_zw_unit = "部"
const Dept_zw_qbbm_unit = "组"
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_1 = "情报一部"
const Dept_zw_qbmb_2 = "情报二部"
......@@ -23,6 +31,9 @@ const Dept_zw_qbmb_jd_string = "京东"
const Dept_zw_qbmb_hw_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) {
switch hostname {
case Host_adserver:
......
......@@ -11,9 +11,10 @@ const SymbolHostname = "-"
// AD-Control //
const Version string = "2.5.4"
const Version string = "2.5.5"
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_zzserver string = "ZZSERVER"
const DaemonListen string = ":16823"
......@@ -55,6 +56,7 @@ var Dir_userprofile string = GetEnv("USERPROFILE")
var Dir_tmp string = GetEnv("tmp")
const Dir_ADsoftware_local string = `H:\software\softlike\`
const Dir_ADControl_local string = `H:\software\application\`
// application //
const App_MultiSplit string = SMB_ADSoftOthTool + "win_MultiSplit.exe"
......
......@@ -10,22 +10,37 @@ import (
// 消息入口
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)
if err != nil {
LOG(ERROR, NULL, err)
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
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:
......@@ -49,17 +64,17 @@ func DealMsg(msgtype, url string, unmsg []byte) []byte {
ret = ReParseJson(&ice)
// CMDB 消息
case Msg_CMDB:
var msg MJcmdb
case Msg_CmdbInfo:
var msg MJCmdbInfo
ParseJson(unmsg, &msg)
ice := msg.MsgDeal()
ret = ReParseJson(&ice)
default:
msg := ParseWX(url, &unmsg)
msg := ParseWX(query, &unmsg)
go msg.MsgDealSend()
}
return ret
return ret, nil
}
//
......@@ -430,9 +445,29 @@ func (wake *MJwake) MsgDeal() interface{} {
}
// 关于 CMDB 的消息处理
func (cmdb *MJcmdb) MsgDeal() interface{} {
fmt.Println("cmdb")
return cmdb
func (ci *MJCmdbInfo) MsgDeal() interface{} {
switch ci.Instruction {
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 企业微信 的 消息处理
......
......@@ -18,7 +18,7 @@ const Msg_status_deal string = "deal"
const Msg_Report string = "report"
const Msg_Exec string = "exec"
const Msg_Wake string = "wake"
const Msg_CMDB string = "cmdb"
const Msg_CmdbInfo string = "cmdbinfo"
const Msg_Wxwork string = "wxwork"
// msg report type ///////////////////////////////////////////////////////////
......@@ -58,7 +58,10 @@ const Msg_Wake_Status_Req string = "WakeReq"
const Msg_Wake_Status_Start string = "WakeStart"
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_zwDevopsPowerTurnOFF string = "zwdevops_power_turnoff"
......@@ -128,12 +131,13 @@ type MJwxwork struct {
Result string
Content string
}
type MJcmdb struct {
type MJCmdbInfo struct {
MsgType string `json:"msgtype"`
Status string `json:"status"`
Instruction string `json:"instruction"`
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{} {
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
func (wxwork *MJwxwork) SendText(text string) {
......
......@@ -7,6 +7,8 @@ import (
"io/ioutil"
"net"
"net/http"
"net/url"
"strings"
)
var sendserver func(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))
}
link := fmt.Sprintf("http://%s/%s", server, msgtype)
fmt.Println(string(textbyte))
// 发送数据
resp, err := http.Post(
link,
......@@ -48,14 +51,25 @@ func SendMsg(server, msgtype string, v interface{}) {
}
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)
if err != nil {
LOG(ERROR, NULL, err)
}
// 处理数据
if len(body) > 0 && string(body) != "null" {
DealMsg(msgtype, "", body)
DealMsg(url, query, body)
}
}
......@@ -90,6 +104,9 @@ func SendGetRequest(link *string) ([]byte, error) {
return nil, err
}
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)
return body, err
}
......
......@@ -8,8 +8,6 @@ import (
"os/exec"
"strconv"
"strings"
"golang.org/x/text/encoding/simplifiedchinese"
)
// 获取环境变量
......@@ -26,10 +24,7 @@ func GetEnvFqdn(s string) string {
if err != nil {
LOG(ERROR, NULL, err)
}
out, err := simplifiedchinese.GBK.NewDecoder().Bytes(cmd)
if err != nil {
LOG(ERROR, NULL, err)
}
out := ToChineseChar(cmd)
for _, each := range strings.Split(string(out), ",") {
if strings.Contains(each, s) {
......@@ -142,7 +137,7 @@ func Execcmd_output(cmdargs string) []byte {
func Execcmd_outputIgnoreError(cmdargs string) []byte {
app, appargs, _ := execcmd_base_nolog(cmdargs)
out, _ := exec.Command(app, appargs...).CombinedOutput()
outchinese, _ := simplifiedchinese.GBK.NewDecoder().Bytes(out)
outchinese := ToChineseChar(out)
return outchinese
}
......@@ -176,7 +171,7 @@ func PSCommandOutput(cmd string) (string, error) {
if err != nil {
return "", err
}
out, err := simplifiedchinese.GBK.NewDecoder().Bytes(r)
out := ToChineseChar(r)
if err != nil {
return "", err
}
......@@ -304,7 +299,7 @@ func CopyFile(dstFileName string, srcFileName string) (written int64, err error)
srcFile, err := os.Open(srcFileName)
if err != nil {
LOG(ERROR, NULL, fmt.Sprintf("open file err = %v\n", err))
LOG(ERROR, NULL, err)
return
}
......@@ -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|os.O_TRUNC, 0755)
if err != nil {
LOG(ERROR, NULL, fmt.Sprintf("open file err = %v\n", err))
LOG(ERROR, NULL, err)
return
}
......@@ -330,10 +325,10 @@ func RemoveFile(name string) error {
// 创建文件夹
func mkdir(dir string) {
os.Mkdir(dir, os.ModeSetuid)
os.Mkdir(dir, 0755)
}
func MkdirAll(dir string) error {
return os.MkdirAll(dir, os.ModeSetuid)
return os.MkdirAll(dir, 0755)
}
func ExistFolder(dir string) {
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