Commit f47af0d3 by 陶腾飞

2022/04/09 v2.2.5

parent 7729a35a
...@@ -90,6 +90,7 @@ ...@@ -90,6 +90,7 @@
- 2022/04/04 v2.2.2 使用go mod - 2022/04/04 v2.2.2 使用go mod
- 2022/04/05 v2.2.3 语法优化 - 2022/04/05 v2.2.3 语法优化
- 2022/04/05 v2.2.4 将支持通过adct全局唤醒 - 2022/04/05 v2.2.4 将支持通过adct全局唤醒
- 2022/04/09 v2.2.5 修复IP地址、MAC地址获取失败的问题,添加cmdb信息更新时间字段,优化log日志,开机时将确定主机位置,修复DDR4的判断超过速率字段出现的场景导致无法判断DDR4的问题,小工具菜单名优化,远程唤醒优化
## 四、其他说明 ## 四、其他说明
......
...@@ -14,6 +14,8 @@ const INFO = pub.INFO ...@@ -14,6 +14,8 @@ const INFO = pub.INFO
const ERROR = pub.ERROR const ERROR = pub.ERROR
const NULL = pub.NULL const NULL = pub.NULL
var sendserver func(msgtype string, v interface{})
var LOG = pub.LOG var LOG = pub.LOG
var f struct { var f struct {
Force bool Force bool
...@@ -21,10 +23,14 @@ var f struct { ...@@ -21,10 +23,14 @@ var f struct {
} }
func main() { func main() {
// 根据主机位置定义发送的服务器
sendserver = pub.GetSendServer(pub.User_computername)
var reportText = flag.String(pub.Msg_Report, "", "report to AD") var reportText = flag.String(pub.Msg_Report, "", "report to AD")
var wolMacText = flag.String("wolmac", "", "input MACAddress for waking pc") var wolMacText = flag.String("wolmac", "", "input MACAddress for waking pc")
var wolHostText = flag.String("wolhost", "", "input hostname for waking pc") var wolHostText = flag.String("wolhost", "", "input hostname for waking pc")
var wolAllText = flag.Bool("wolall", false, "wake all Domain Computer") var wolAllText = flag.Bool("wolall", false, "wake all computer")
var wolPartText = flag.String("wolpart", "", "wake part computer")
var hourText = flag.Bool("hour", false, "exec task at the time") var hourText = flag.Bool("hour", false, "exec task at the time")
var loglevel = flag.String("loglevel", INFO, "") var loglevel = flag.String("loglevel", INFO, "")
var force = flag.Bool("force", false, "force exec,ignore other") var force = flag.Bool("force", false, "force exec,ignore other")
...@@ -57,6 +63,9 @@ func main() { ...@@ -57,6 +63,9 @@ func main() {
} else if *wolAllText { } else if *wolAllText {
pub.DomainCotroller() pub.DomainCotroller()
wolALL() wolALL()
} else if *wolPartText != "" {
pub.DomainCotroller()
wolPart(*wolPartText)
} }
} }
func loglevelSet(l string) { func loglevelSet(l string) {
...@@ -84,18 +93,29 @@ func flag_report(s string) { ...@@ -84,18 +93,29 @@ func flag_report(s string) {
if err != nil { if err != nil {
os.Exit(-1) os.Exit(-1)
} }
hostnameSplit, err := pub.GetHostnamePart(pub.User_computername)
if err != nil {
LOG(ERROR, s, err)
return
}
cir.GetHardWare() cir.GetHardWare()
cir.Ip = pub.GetIPFromNslookup() cir.Ip = pub.GetIPFromNslookup()
cir.Mac = pub.GetMacaddressFromIP(cir.Ip) cir.Mac = pub.GetMacaddressFromIP(cir.Ip)
cir.Start_time = pub.GetNowTimeString() cir.Start_time = pub.GetNowTimeString()
cir.PC_update_time = pub.GetNowTimeString()
cir.PC_update_time = pub.GetNowTimeString()
cir.Position = pub.GetCMDBPosition(hostnameSplit[0], hostnameSplit[1])
d, err = json.Marshal(cir) d, err = json.Marshal(cir)
if err != nil { if err != nil {
LOG(ERROR, s, err.Error()) LOG(ERROR, s, err)
os.Exit(-1) os.Exit(-1)
} }
case pub.Msg_Report_WillTurnOffPC: case pub.Msg_Report_WillTurnOffPC:
var cir pub.CIRecordShutdown var cir pub.CIRecordShutdown
cir.Shutdown_time = pub.GetNowTimeString() cir.Shutdown_time = pub.GetNowTimeString()
cir.PC_update_time = pub.GetNowTimeString()
d, err = json.Marshal(cir) d, err = json.Marshal(cir)
if err != nil { if err != nil {
LOG(ERROR, s, err.Error()) LOG(ERROR, s, err.Error())
...@@ -122,21 +142,11 @@ func wolMac(mac *string) { ...@@ -122,21 +142,11 @@ func wolMac(mac *string) {
} }
func wolHost(pc *string) { func wolHost(pc *string) {
hostname := strings.ToUpper(*pc) hostname := strings.ToUpper(*pc)
p, err := pub.GetPostationFromHostname(hostname) pub.SendADMsg(pub.Msg_Wake, pub.GJwakeHost(hostname))
if err != nil {
LOG(ERROR, "WOL_HOST", err)
return
}
switch p {
case pub.Cmdb_Position_7:
pub.SendTHMsg(pub.Msg_Wake, pub.GJwakeOne(hostname))
case pub.Cmdb_Position_12:
pub.SendADMsg(pub.Msg_Wake, pub.GJwakeOne(hostname))
case pub.Cmdb_Position_zhengzhou:
pub.SendZZMsg(pub.Msg_Wake, pub.GJwakeOne(hostname))
}
} }
func wolALL() { func wolALL() {
}
func wolPart(p string) {
pub.SendADMsg(pub.Msg_Wake, pub.GJwakeList(p))
} }
...@@ -25,6 +25,8 @@ func getVFromK(cir *CIRecordResult, k string) string { ...@@ -25,6 +25,8 @@ func getVFromK(cir *CIRecordResult, k string) string {
r = cir.Username r = cir.Username
case Cmdb_Mac: case Cmdb_Mac:
r = cir.Mac r = cir.Mac
case Cmdb_Position:
r = cir.Position
} }
return r return r
} }
...@@ -271,6 +273,66 @@ func CmdbGetWordFromKV2(k, v, a, b string) (string, string, error) { ...@@ -271,6 +273,66 @@ func CmdbGetWordFromKV2(k, v, a, b string) (string, string, error) {
} }
} }
// 根据键值获取1个列
func CmdbGetListFromKV(k, v, a string) ([]string, error) {
var cmdbPath string = "api/v0.1/ci/s?q="
v = cmdbChineseURL(k, v)
search := fmt.Sprintf("%s:%s", k, v)
url := fmt.Sprintf("%s/%s_type:%s,%s&", CmdbUrl, cmdbPath, CmdbCITypeComputer, search)
LOG(DEBUG, CMDB, url)
var cir CIRecordReq
data, err := cmdbGET(url)
if err != nil {
return nil, err
}
if err := json.Unmarshal(data, &cir); err != nil {
return nil, err
}
LOG(DEBUG, "CMDB_EXITE", string(data))
if cir.Numfound == 0 {
return nil, Error_CMDB_No_Record
}
r := make([]string, cir.Numfound)
for i, line := range cir.R {
r[i] = getVFromK(&line, a)
}
return r, nil
}
// 根据键值获取1个列
func CmdbGetListFromKV2(k, v, a, b string) ([]string, []string, error) {
var cmdbPath string = "api/v0.1/ci/s?q="
v = cmdbChineseURL(k, v)
search := fmt.Sprintf("%s:%s", k, v)
url := fmt.Sprintf("%s/%s_type:%s,%s&", CmdbUrl, cmdbPath, CmdbCITypeComputer, search)
LOG(DEBUG, CMDB, url)
var cir CIRecordReq
data, err := cmdbGET(url)
if err != nil {
return nil, nil, err
}
if err := json.Unmarshal(data, &cir); err != nil {
return nil, nil, err
}
LOG(DEBUG, "CMDB_EXITE", string(data))
if cir.Numfound == 0 {
return nil, nil, Error_CMDB_No_Record
}
r := make([]string, cir.Numfound)
r2 := make([]string, cir.Numfound)
for i, line := range cir.R {
r[i] = getVFromK(&line, a)
r2[i] = getVFromK(&line, b)
}
return r, r2, nil
}
func CmdbPOST(url string, reqdata []byte) ([]byte, error) { func CmdbPOST(url string, reqdata []byte) ([]byte, error) {
buf := bytes.NewBuffer(nil) buf := bytes.NewBuffer(nil)
buf.Write(reqdata) buf.Write(reqdata)
......
...@@ -29,44 +29,53 @@ type CIRecordComputer struct { ...@@ -29,44 +29,53 @@ type CIRecordComputer struct {
type CIRecordFacet struct { type CIRecordFacet struct {
} }
type CIRecordResult struct { type CIRecordResult struct {
Bumen string `json:"bumen"` // 部门 Bumen string `json:"bumen"` // 部门
Username string `json:"username"` // 姓名 Username string `json:"username"` // 姓名
Position string `json:"position"` // 具体位置 Position string `json:"position"` // 具体位置
Seat string `json:"seat"` // 主机座位坐标 Seat string `json:"seat"` // 主机座位坐标
Product_name string `json:"product_name"` // 主机名 Product_name string `json:"product_name"` // 主机名
Ip string `json:"ip"` // ip Ip string `json:"ip"` // ip
Mac string `json:"mac"` // mac地址 Mac string `json:"mac"` // mac地址
Start_time string `json:"start_time"` // 启动时间 Start_time string `json:"start_time"` // 启动时间
Shutdown_time string `json:"shutdown_time"` // 关机时间 Shutdown_time string `json:"shutdown_time"` // 关机时间
Cpu string `json:"cpu"` // cpu Cpu string `json:"cpu"` // cpu
Disk string `json:"disk"` // 硬盘 Disk string `json:"disk"` // 硬盘
Memory string `json:"memory"` // 内存 Memory string `json:"memory"` // 内存
Flag string `json:"flag"` // 标签 Flag string `json:"flag"` // 标签
Buy_time string `json:"buy_time"` PC_update_time string `json:"pc_update_time"` // 信息更新时间
Ci_id int `json:"ci_id"` Buy_time string `json:"buy_time"`
Ci_type string `json:"ci_type"` Ci_id int `json:"ci_id"`
Get_time string `json:"get_time"` Ci_type string `json:"ci_type"`
Mark string `json:"mark"` Get_time string `json:"get_time"`
Screen_info string `json:"screen_info"` Mark string `json:"mark"`
Type_id int `json:"type_id"` Screen_info string `json:"screen_info"`
Uni_one string `json:"uni_one"` Type_id int `json:"type_id"`
Unique string `json:"unique"` Uni_one string `json:"uni_one"`
Zcbh_pm string `json:"zcbh_pm"` Unique string `json:"unique"`
Zcbh_pm string `json:"zcbh_pm"`
} }
type CIRecordStartup struct { type CIRecordStartup struct {
Bumen string `json:"bumen"` // 部门 Bumen string `json:"bumen"` // 部门
Ip string `json:"ip"` // ip Ip string `json:"ip"` // ip
Mac string `json:"mac"` // mac地址 Mac string `json:"mac"` // mac地址
Start_time string `json:"start_time"` // 启动时间 Start_time string `json:"start_time"` // 启动时间
Cpu string `json:"cpu"` // cpu Cpu string `json:"cpu"` // cpu
Disk string `json:"disk"` // 硬盘 Disk string `json:"disk"` // 硬盘
Memory string `json:"memory"` // 内存 Memory string `json:"memory"` // 内存
PC_update_time string `json:"pc_update_time"` // 信息更新时间
Position string `json:"position"` // 具体位置
} }
type CIRecordUpdateReq struct { type CIRecordUpdateReq struct {
Ci_id int `json:"ci_id"` Ci_id int `json:"ci_id"`
} }
type CIRecordUpdateTime struct {
Username string `json:"username"` // 姓名
PC_update_time string `json:"pc_update_time"` // 信息更新时间
}
type CIRecordShutdown struct { type CIRecordShutdown struct {
Shutdown_time string `json:"shutdown_time"` // 关机时间 PC_update_time string `json:"pc_update_time"` // 信息更新时间
Shutdown_time string `json:"shutdown_time"` // 关机时间
} }
type CIRecorProduct_name struct { type CIRecorProduct_name struct {
Product_name string `json:"product_name"` // 主机名 Product_name string `json:"product_name"` // 主机名
...@@ -83,7 +92,7 @@ func (cir *CIRecordResult) BasicInfo(v string) error { ...@@ -83,7 +92,7 @@ func (cir *CIRecordResult) BasicInfo(v string) error {
if err != nil { if err != nil {
return err return err
} }
cir.Position = cir.position(hostnameSplit[0], hostnameSplit[1]) cir.Position = GetCMDBPosition(hostnameSplit[0], hostnameSplit[1])
if cir.Position == ERROR { if cir.Position == ERROR {
return fmt.Errorf("主机命令错误") return fmt.Errorf("主机命令错误")
} }
...@@ -125,7 +134,7 @@ func (cir *CIRecordStartup) GetHardWare() { ...@@ -125,7 +134,7 @@ func (cir *CIRecordStartup) GetHardWare() {
}() }()
wg.Wait() wg.Wait()
} }
func (cir *CIRecordResult) position(location, dept string) string { func GetCMDBPosition(location, dept string) string {
const cmdbPosition1 string = "7" const cmdbPosition1 string = "7"
const cmdbPosition2 string = "12" const cmdbPosition2 string = "12"
const cmdbPosition3 string = "zhengzhou" const cmdbPosition3 string = "zhengzhou"
......
...@@ -27,7 +27,7 @@ func GetPostationFromHostname(hostname string) (string, error) { ...@@ -27,7 +27,7 @@ func GetPostationFromHostname(hostname string) (string, error) {
return Cmdb_Position_12, nil return Cmdb_Position_12, nil
case HOST_Dept_MT: case HOST_Dept_MT:
return Cmdb_Position_12, nil return Cmdb_Position_12, nil
case HOST_Dept_ZZ: case HOST_Dept_ZJ:
return Cmdb_Position_12, nil return Cmdb_Position_12, nil
case HOST_Dept_DD: case HOST_Dept_DD:
return Cmdb_Position_12, nil return Cmdb_Position_12, nil
......
...@@ -11,7 +11,7 @@ const SymbolHostname = "-" ...@@ -11,7 +11,7 @@ const SymbolHostname = "-"
// AD-Control // // AD-Control //
const Version string = "2.2.4" const Version string = "2.2.5"
const Host_adserver string = "ADSERVER" const Host_adserver string = "ADSERVER"
const Host_adserver_ip string = "192.168.0.20" const Host_adserver_ip string = "192.168.0.20"
const Host_thserver string = "THSERVER" const Host_thserver string = "THSERVER"
......
...@@ -14,10 +14,9 @@ import ( ...@@ -14,10 +14,9 @@ import (
type logs struct { type logs struct {
Time string `json:"Time"` Time string `json:"Time"`
Hook string `json:"Hook"` Hook string `json:"Hook"`
Version string `json:"Version"`
Host string `json:"Host"` Host string `json:"Host"`
Level string `json:"Level"` Level string `json:"Level"`
MsgType string `json:"MsgType"` LogType string `json:"LogType"`
Message string `json:"Message"` Message string `json:"Message"`
} }
...@@ -33,7 +32,6 @@ func logBase() logs { ...@@ -33,7 +32,6 @@ func logBase() logs {
} }
l.Time = time.Now().Format("2006-01-02 15:04:05 Monday") l.Time = time.Now().Format("2006-01-02 15:04:05 Monday")
l.Hook = fmt.Sprintf("%s:%d:%s", filename, line, funcname) l.Hook = fmt.Sprintf("%s:%d:%s", filename, line, funcname)
l.Version = Version
return l return l
} }
func logDeal(level string, l *logs) { func logDeal(level string, l *logs) {
...@@ -71,7 +69,7 @@ func LOG(level string, msgtype string, args ...any) { ...@@ -71,7 +69,7 @@ func LOG(level string, msgtype string, args ...any) {
l := logBase() l := logBase()
l.Host = User_computername l.Host = User_computername
l.Level = level l.Level = level
l.MsgType = msgtype l.LogType = msgtype
l.Message = fmt.Sprint(args...) l.Message = fmt.Sprint(args...)
logDeal(level, &l) logDeal(level, &l)
} }
...@@ -113,7 +113,7 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -113,7 +113,7 @@ func (rep *MJreport) MsgDeal() interface{} {
switch rep.Status { switch rep.Status {
// 服务器 // 服务器
case Msg_status_commit: case Msg_status_commit:
if err := CmdbRecordValueClear(Cmdb_Username, rep.DataStr); err != nil { if err := CmdbRecordValueClear(Cmdb_Username, rep.Username); err != nil {
rep.DataStr = Error_CMDB_UPDATE_REQ rep.DataStr = Error_CMDB_UPDATE_REQ
LOG(ERROR, rep.Instruction, err) LOG(ERROR, rep.Instruction, err)
break break
...@@ -124,18 +124,13 @@ func (rep *MJreport) MsgDeal() interface{} { ...@@ -124,18 +124,13 @@ func (rep *MJreport) MsgDeal() interface{} {
LOG(ERROR, rep.Instruction, err) LOG(ERROR, rep.Instruction, err)
break break
} }
a, err := cmdbKVtoJSON(Cmdb_Username, rep.DataStr)
if err != nil { if err := cmdbUpdateRecordFromJSON(rep.DataStr, ci); err != nil {
rep.DataStr = Error_CMDB_UPDATE_REQ
LOG(ERROR, rep.Instruction, err)
break
}
if err := cmdbUpdateRecordFromJSON(a, ci); err != nil {
rep.DataStr = Error_CMDB_UPDATE_REQ rep.DataStr = Error_CMDB_UPDATE_REQ
LOG(ERROR, rep.Instruction, err) LOG(ERROR, rep.Instruction, err)
break break
} }
LOG(INFO, rep.Instruction, fmt.Sprintf("%s is %s's PrimryComputer", rep.Computername, rep.DataStr)) LOG(INFO, rep.Instruction, fmt.Sprintf("%s is %s's PrimryComputer", rep.Computername, rep.Username))
rep.DataStr = Sccessful_CMDB_UPDATE_REQ rep.DataStr = Sccessful_CMDB_UPDATE_REQ
// 客户端 // 客户端
...@@ -241,23 +236,64 @@ func (wake *MJwake) MsgDeal() interface{} { ...@@ -241,23 +236,64 @@ func (wake *MJwake) MsgDeal() interface{} {
switch wake.Instruction { switch wake.Instruction {
case Msg_Wake_Status_Req: case Msg_Wake_Status_Req:
mac, err := CmdbGetWordFromKV(Cmdb_Product_name, wake.Hostname, Cmdb_Mac) if wake.IfList {
wake.Instruction = Msg_Wake_Status_Over r, p, err := CmdbGetListFromKV2(Cmdb_Position, wake.List, Cmdb_Mac, Cmdb_Position)
if err != nil {
wake.Instruction = Msg_Wake_Status_Over
wake.Explain = err.Error()
break
}
wake.Instruction = Msg_Wake_Status_Start
for i, mac := range r {
if mac != "" {
wake.MACAddress = mac
switch p[i] {
case Cmdb_Position_7:
LOG(INFO, "WAKE_REQ", fmt.Sprintf("server:%s,mac:%s", Host_thserver, wake.MACAddress))
SendTHMsg(Msg_Wake, wake)
case Cmdb_Position_12:
LOG(INFO, "WAKE_REQ", fmt.Sprintf("server:%s,mac:%s", Host_adserver, wake.MACAddress))
SendADMsg(Msg_Wake, wake)
case Cmdb_Position_zhengzhou:
LOG(INFO, "WAKE_REQ", fmt.Sprintf("server:%s,mac:%s", Host_zzserver, wake.MACAddress))
SendZZMsg(Msg_Wake, wake)
}
}
}
} else {
mac, postation, err := CmdbGetWordFromKV2(Cmdb_Product_name, wake.Hostname, Cmdb_Mac, Cmdb_Position)
if err != nil { if err != nil {
wake.Explain = err.Error() wake.Explain = err.Error()
break break
} }
if mac == "" { if mac == "" {
wake.Explain = Error_CMDB_No_Record.Error() wake.Explain = Error_CMDB_No_Record.Error()
break break
}
wake.Instruction = Msg_Wake_Status_Start
wake.MACAddress = mac
switch postation {
case Cmdb_Position_7:
LOG(INFO, "WAKE_REQ", fmt.Sprintf("server:%s,mac:%s", Host_thserver, wake.MACAddress))
SendTHMsg(Msg_Wake, wake)
case Cmdb_Position_12:
LOG(INFO, "WAKE_REQ", fmt.Sprintf("server:%s,mac:%s", Host_adserver, wake.MACAddress))
SendADMsg(Msg_Wake, wake)
case Cmdb_Position_zhengzhou:
LOG(INFO, "WAKE_REQ", fmt.Sprintf("server:%s,mac:%s", Host_zzserver, wake.MACAddress))
SendZZMsg(Msg_Wake, wake)
}
} }
l := fmt.Sprintf("hostname:%s,mac:%s", wake.Hostname, mac) wake.Instruction = Msg_Wake_Status_Over
LOG(INFO, "WAKE_REQ", l)
go Wol_enter(mac) case Msg_Wake_Status_Start:
wake.Explain = l LOG(INFO, "WAKE", fmt.Sprintf("hostname:%s,mac:%s", wake.Hostname, wake.MACAddress))
return wake Wol_enter(wake.MACAddress)
case Msg_Wake_Status_Forwarding: wake.Instruction = Msg_Wake_Status_Over
case Msg_Wake_Status_Over: case Msg_Wake_Status_Over:
if wake.Explain != "" { if wake.Explain != "" {
LOG(INFO, "WAKE", wake.Explain) LOG(INFO, "WAKE", wake.Explain)
......
...@@ -62,7 +62,7 @@ const Msg_Exec_OpenRemoteTerminal string = "OpenRemoteTerminal" ...@@ -62,7 +62,7 @@ const Msg_Exec_OpenRemoteTerminal string = "OpenRemoteTerminal"
// msg wkae type //////////////////////////////////////////////////////////////// // msg wkae type ////////////////////////////////////////////////////////////////
const Msg_Wake_Status_Req string = "WakeReq" const Msg_Wake_Status_Req string = "WakeReq"
const Msg_Wake_Status_Forwarding string = "WakeForwarding" const Msg_Wake_Status_Start string = "WakeStart"
const Msg_Wake_Status_Over string = "WakeOver" const Msg_Wake_Status_Over string = "WakeOver"
// wxwork event key //////////////////////////////////////////////////////////////// // wxwork event key ////////////////////////////////////////////////////////////////
...@@ -117,9 +117,10 @@ type MJwake struct { ...@@ -117,9 +117,10 @@ type MJwake struct {
MJbase MJbase
Hostname string `json:"hostname"` Hostname string `json:"hostname"`
MACAddress string `json:"macaddress"` MACAddress string `json:"macaddress"`
List string `json:"list"`
IfList bool `json:"iflist"`
Dept string `json:"dept"` Dept string `json:"dept"`
Region string `json:"region"` Region string `json:"region"`
Delay int `json:"delay"`
} }
// wxwork Json Format ///////////////////////////////////////////////////// // wxwork Json Format /////////////////////////////////////////////////////
...@@ -143,23 +144,17 @@ func GJreportString(s string, d string) interface{} { ...@@ -143,23 +144,17 @@ func GJreportString(s string, d string) interface{} {
rep.DataStr = d rep.DataStr = d
return rep return rep
} }
func GJreport(s string) interface{} { func GJreportUsernameString(s string, n string, d string) interface{} {
var rep MJreport var rep MJreport
rep.init(s) rep.init(s)
rep.Username = n
rep.DataStr = d
return rep return rep
} }
func (rep *MJreport) Reg_Write_ADDC(key, value string) { func GJreport(s string) interface{} {
// Reg_Write_key_one( var rep MJreport
// Reg_Root_ac, rep.init(s)
// Reg_Path_home_ac+rep.Computername, return rep
// key,
// value)
}
func (rep *MJreport) Reg_Query_ADDC(key string) {
// return Reg_query_key_one(
// Reg_Root_ac,
// Reg_Path_home_ac+rep.Computername,
// key)
} }
func (rep *MJreport) Pskill(cmd string) { func (rep *MJreport) Pskill(cmd string) {
Pskill(rep.Computername, cmd) Pskill(rep.Computername, cmd)
...@@ -212,13 +207,20 @@ func (exec *MJexec) ToWXWrokAdmin() string { ...@@ -212,13 +207,20 @@ func (exec *MJexec) ToWXWrokAdmin() string {
// wake // wake
func GJwakeOne(host string) interface{} { func GJwakeHost(host string) interface{} {
var wake MJwake var wake MJwake
wake.MsgType = Msg_Wake wake.MsgType = Msg_Wake
wake.Instruction = Msg_Wake_Status_Req wake.Instruction = Msg_Wake_Status_Req
wake.Hostname = host wake.Hostname = host
wake.Delay = 0 wake.IfList = false
return wake
}
func GJwakeList(list string) interface{} {
var wake MJwake
wake.MsgType = Msg_Wake
wake.Instruction = Msg_Wake_Status_Req
wake.List = list
wake.IfList = true
return wake return wake
} }
......
...@@ -9,6 +9,8 @@ import ( ...@@ -9,6 +9,8 @@ import (
"net/http" "net/http"
) )
var sendserver func(msgtype string, v interface{})
func SendServerReport(s string) { func SendServerReport(s string) {
SendADMsg(Msg_Report, GJreport(s)) SendADMsg(Msg_Report, GJreport(s))
} }
...@@ -51,7 +53,6 @@ func SendMsg(server, msgtype string, v interface{}) { ...@@ -51,7 +53,6 @@ func SendMsg(server, msgtype string, v interface{}) {
if err != nil { if err != nil {
LOG(ERROR, NULL, err) LOG(ERROR, NULL, err)
} }
// 处理数据 // 处理数据
if len(body) > 0 { if len(body) > 0 {
DealMsg(GetMsgType(body), "", body) DealMsg(GetMsgType(body), "", body)
...@@ -161,3 +162,26 @@ func SendWxworkTextToAUser(id, text string) error { ...@@ -161,3 +162,26 @@ func SendWxworkTextToAUser(id, text string) error {
func SendWxworkTextToAdmins(text string) error { func SendWxworkTextToAdmins(text string) error {
return SendWxworkTextToAUser("TaoTengFei", text) return SendWxworkTextToAUser("TaoTengFei", text)
} }
// 根据主机位置定义发送的服务器
func GetSendServer(hostname string) func(msgtype string, v interface{}) {
host := hostname
if hostname == "" {
host = User_computername
}
p, err := GetPostationFromHostname(host)
if err != nil {
LOG(ERROR, "", err)
return nil
}
switch p {
case Cmdb_Position_7:
sendserver = SendTHMsg
case Cmdb_Position_12:
sendserver = SendADMsg
case Cmdb_Position_zhengzhou:
sendserver = SendZZMsg
}
return sendserver
}
...@@ -12,7 +12,7 @@ const HOST_Region_ZZ string = "ZZ" ...@@ -12,7 +12,7 @@ const HOST_Region_ZZ string = "ZZ"
const HOST_Dept_JL string = "JL" const HOST_Dept_JL string = "JL"
const HOST_Dept_MT string = "MT" const HOST_Dept_MT string = "MT"
const HOST_Dept_ZZ string = "ZZ" const HOST_Dept_ZJ string = "ZJ"
const HOST_Dept_DD string = "DD" const HOST_Dept_DD string = "DD"
const HOST_Dept_JR string = "JR" const HOST_Dept_JR string = "JR"
const HOST_Dept_TXWJ string = "TXWJ" const HOST_Dept_TXWJ string = "TXWJ"
...@@ -90,19 +90,5 @@ func GetIPFromInterface() { ...@@ -90,19 +90,5 @@ func GetIPFromInterface() {
// 判断计算机是否在zhiweireach中 // 判断计算机是否在zhiweireach中
func Zhiweireach() bool { func Zhiweireach() bool {
var r bool return User_userdomain == "ZHIWEIREACH"
switch User_logonserver {
case `\\` + Host_adserver:
r = true
case `\\` + Host_thserver:
r = true
case `\\` + Host_zzserver:
r = true
default:
r = false
}
if Windows() && r {
return true
}
return false
} }
...@@ -380,7 +380,11 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) { ...@@ -380,7 +380,11 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) {
c++ c++
} else if strings.Contains(line, "MemoryType") { } else if strings.Contains(line, "MemoryType") {
m := strings.TrimSpace(strings.Split(line, ":")[1]) m := strings.TrimSpace(strings.Split(line, ":")[1])
switch m { switch m {
// 其实吧,是有可能的
case "0":
m = "0"
case "21": case "21":
m = "DDR2" m = "DDR2"
case "22": case "22":
...@@ -389,12 +393,6 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) { ...@@ -389,12 +393,6 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) {
m = "DDR3" m = "DDR3"
case "26": case "26":
m = "DDR4" m = "DDR4"
case "0":
if i, err := strconv.Atoi(Speed[j]); err != nil {
m = ""
} else if i >= 2133 {
m = "DDR4"
}
default: default:
m = "" m = ""
} }
...@@ -410,6 +408,13 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) { ...@@ -410,6 +408,13 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) {
} }
} }
for i, line := range MemoryType {
if line == "" || line == "0" {
if speed, err := strconv.Atoi(Speed[i]); err == nil && speed >= 2133 {
MemoryType[i] = "DDR4"
}
}
}
return Capacity, Speed, MemoryType, j - 1 return Capacity, Speed, MemoryType, j - 1
} }
func getHardwareHardDiskForPS(mini bool) ([]string, []int64, []string, int) { func getHardwareHardDiskForPS(mini bool) ([]string, []int64, []string, int) {
...@@ -486,16 +491,39 @@ func GetIPFromNslookup() string { ...@@ -486,16 +491,39 @@ func GetIPFromNslookup() string {
// 在域中,为主控 // 在域中,为主控
// 在工作组中,为本机 // 在工作组中,为本机
// 因此可以可以机器简单的方式获取到本机IP // 因此可以可以机器简单的方式获取到本机IP
cmd := fmt.Sprintf("(Resolve-DnsName $env:computername -server %s -Type A).IPAddress", User_logonserver) var server string
if Zhiweireach() {
server = Host_adserver
} else {
server = User_computername
}
cmd := fmt.Sprintf(`(Resolve-DnsName $env:computername -server %s -Type A).IPAddress`, server)
result, _ := PSCommandOutputNoSplit(cmd) result, _ := PSCommandOutputNoSplit(cmd)
return strings.TrimSpace(result) result = strings.TrimSpace(result)
if !strings.Contains(result, "\n") {
return result
}
for _, line := range strings.Split(result, "\n") {
ip := strings.Split(line, ".")
if ip[0] == "192" && ip[1] == "168" && len(ip[2]) == 1 {
return line
}
}
return result
} }
func GetMultiIPFromNslookup() []string { func GetMultiIPFromNslookup() []string {
// 根据登录的服务器作为DNS的解析变量 // 根据登录的服务器作为DNS的解析变量
// 在域中,为主控 // 在域中,为主控
// 在工作组中,为本机 // 在工作组中,为本机
// 因此可以可以机器简单的方式获取到本机IP // 因此可以可以机器简单的方式获取到本机IP
cmd := fmt.Sprintf("(Resolve-DnsName $env:computername -server %s -Type A).IPAddress", User_logonserver) var server string
if Zhiweireach() {
server = Host_adserver
} else {
server = User_computername
}
cmd := fmt.Sprintf("(Resolve-DnsName $env:computername -server %s -Type A).IPAddress", server)
result, _ := PSCommandOutputNoSplit(cmd) result, _ := PSCommandOutputNoSplit(cmd)
result = strings.TrimSpace(result) result = strings.TrimSpace(result)
return strings.Split(result, "\n") return strings.Split(result, "\n")
......
package main package main
import ( import (
"encoding/json"
"fmt" "fmt"
"strings" "strings"
"time" "time"
...@@ -31,7 +32,7 @@ func menuInitName(ni *walk.NotifyIcon) { ...@@ -31,7 +32,7 @@ func menuInitName(ni *walk.NotifyIcon) {
// 电源管理 // 电源管理
func menuInitPower(ni *walk.NotifyIcon) { func menuInitPower(ni *walk.NotifyIcon) {
fa := "电源管理" fa := "电源管理"
sub := [...]string{"保持开机", "取消关机计时"} sub := [...]string{"保持开机(关闭主机活动检测)", "删除关机倒计时"}
// 建立空菜单 // 建立空菜单
nm, err := walk.NewMenu() nm, err := walk.NewMenu()
...@@ -73,14 +74,15 @@ func menuInitPower(ni *walk.NotifyIcon) { ...@@ -73,14 +74,15 @@ func menuInitPower(ni *walk.NotifyIcon) {
// 电源管理 保持开机 // 电源管理 保持开机
func pKeepRunning() { func pKeepRunning() {
pub.Active = false pub.Active = false
Msg("将保持开机,至次日9点恢复") Msg("将保持开机,至次日18点重新检测主机活动")
pub.Execcmd_output("shutdown -a")
pub.LOG(INFO, "USERS_POWER", "执行 电源管理-保持开机") pub.LOG(INFO, "USERS_POWER", "执行 电源管理-保持开机")
} }
// 电源管理 取消自动关机 // 电源管理 删除关机倒计时
func pCancelCloseWindows() { func pCancelCloseWindows() {
pub.Execcmd_output("shutdown -a") pub.Execcmd_output("shutdown -a")
pub.LOG(INFO, "USERS_POWER", "执行 电源管理-取消自动关机") pub.LOG(INFO, "USERS_POWER", "执行 电源管理-删除关机倒计时")
} }
// 账号管理 // 账号管理
...@@ -182,9 +184,21 @@ func menuInitHostManager(ni *walk.NotifyIcon) { ...@@ -182,9 +184,21 @@ func menuInitHostManager(ni *walk.NotifyIcon) {
// 主机管理 绑定主机 // 主机管理 绑定主机
func tHostManagerBind() { func tHostManagerBind() {
if r := Msg_YesNo(`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`); r == 1 { if r := Msg_YesNo(`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`); r != 1 {
pub.SendADMsg(pub.Msg_Report, pub.GJreportString(pub.Msg_Report_UpdatePrimaryHost, pub.User_name_display)) return
}
var ph pub.CIRecordUpdateTime
ph.Username = pub.User_name_display
ph.PC_update_time = pub.GetNowTimeString()
var d []byte
d, err := json.Marshal(ph)
if err != nil {
pub.LOG(ERROR, "HostManagerBind", err)
//不用返回,daemon需要记录日志
} }
pub.SendADMsg(pub.Msg_Report, pub.GJreportUsernameString(pub.Msg_Report_UpdatePrimaryHost, pub.User_name_display, string(d)))
} }
func tHostManagerTerminal() { func tHostManagerTerminal() {
if pub.IfBeforeMin(timeout, pub.Users_Timeout) { if pub.IfBeforeMin(timeout, pub.Users_Timeout) {
......
...@@ -147,7 +147,7 @@ func main() { ...@@ -147,7 +147,7 @@ func main() {
MsgAdvUI(ni, "运维小工具已运行") MsgAdvUI(ni, "运维小工具已运行")
timeout = time.Now() timeout = time.Now()
pub.LOG(INFO, NULL, "start!") pub.LOG(INFO, NULL, fmt.Sprintf("users verson:%s start!", pub.Version))
// 循环 运行窗体 // 循环 运行窗体
mw.Run() mw.Run()
......
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