Commit f47af0d3 by 陶腾飞

2022/04/09 v2.2.5

parent 7729a35a
......@@ -90,6 +90,7 @@
- 2022/04/04 v2.2.2 使用go mod
- 2022/04/05 v2.2.3 语法优化
- 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
const ERROR = pub.ERROR
const NULL = pub.NULL
var sendserver func(msgtype string, v interface{})
var LOG = pub.LOG
var f struct {
Force bool
......@@ -21,10 +23,14 @@ var f struct {
}
func main() {
// 根据主机位置定义发送的服务器
sendserver = pub.GetSendServer(pub.User_computername)
var reportText = flag.String(pub.Msg_Report, "", "report to AD")
var wolMacText = flag.String("wolmac", "", "input MACAddress 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 loglevel = flag.String("loglevel", INFO, "")
var force = flag.Bool("force", false, "force exec,ignore other")
......@@ -57,6 +63,9 @@ func main() {
} else if *wolAllText {
pub.DomainCotroller()
wolALL()
} else if *wolPartText != "" {
pub.DomainCotroller()
wolPart(*wolPartText)
}
}
func loglevelSet(l string) {
......@@ -84,18 +93,29 @@ func flag_report(s string) {
if err != nil {
os.Exit(-1)
}
hostnameSplit, err := pub.GetHostnamePart(pub.User_computername)
if err != nil {
LOG(ERROR, s, err)
return
}
cir.GetHardWare()
cir.Ip = pub.GetIPFromNslookup()
cir.Mac = pub.GetMacaddressFromIP(cir.Ip)
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)
if err != nil {
LOG(ERROR, s, err.Error())
LOG(ERROR, s, err)
os.Exit(-1)
}
case pub.Msg_Report_WillTurnOffPC:
var cir pub.CIRecordShutdown
cir.Shutdown_time = pub.GetNowTimeString()
cir.PC_update_time = pub.GetNowTimeString()
d, err = json.Marshal(cir)
if err != nil {
LOG(ERROR, s, err.Error())
......@@ -122,21 +142,11 @@ func wolMac(mac *string) {
}
func wolHost(pc *string) {
hostname := strings.ToUpper(*pc)
p, err := pub.GetPostationFromHostname(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))
}
pub.SendADMsg(pub.Msg_Wake, pub.GJwakeHost(hostname))
}
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 {
r = cir.Username
case Cmdb_Mac:
r = cir.Mac
case Cmdb_Position:
r = cir.Position
}
return r
}
......@@ -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) {
buf := bytes.NewBuffer(nil)
buf.Write(reqdata)
......
......@@ -29,44 +29,53 @@ type CIRecordComputer struct {
type CIRecordFacet struct {
}
type CIRecordResult struct {
Bumen string `json:"bumen"` // 部门
Username string `json:"username"` // 姓名
Position string `json:"position"` // 具体位置
Seat string `json:"seat"` // 主机座位坐标
Product_name string `json:"product_name"` // 主机名
Ip string `json:"ip"` // ip
Mac string `json:"mac"` // mac地址
Start_time string `json:"start_time"` // 启动时间
Shutdown_time string `json:"shutdown_time"` // 关机时间
Cpu string `json:"cpu"` // cpu
Disk string `json:"disk"` // 硬盘
Memory string `json:"memory"` // 内存
Flag string `json:"flag"` // 标签
Buy_time string `json:"buy_time"`
Ci_id int `json:"ci_id"`
Ci_type string `json:"ci_type"`
Get_time string `json:"get_time"`
Mark string `json:"mark"`
Screen_info string `json:"screen_info"`
Type_id int `json:"type_id"`
Uni_one string `json:"uni_one"`
Unique string `json:"unique"`
Zcbh_pm string `json:"zcbh_pm"`
Bumen string `json:"bumen"` // 部门
Username string `json:"username"` // 姓名
Position string `json:"position"` // 具体位置
Seat string `json:"seat"` // 主机座位坐标
Product_name string `json:"product_name"` // 主机名
Ip string `json:"ip"` // ip
Mac string `json:"mac"` // mac地址
Start_time string `json:"start_time"` // 启动时间
Shutdown_time string `json:"shutdown_time"` // 关机时间
Cpu string `json:"cpu"` // cpu
Disk string `json:"disk"` // 硬盘
Memory string `json:"memory"` // 内存
Flag string `json:"flag"` // 标签
PC_update_time string `json:"pc_update_time"` // 信息更新时间
Buy_time string `json:"buy_time"`
Ci_id int `json:"ci_id"`
Ci_type string `json:"ci_type"`
Get_time string `json:"get_time"`
Mark string `json:"mark"`
Screen_info string `json:"screen_info"`
Type_id int `json:"type_id"`
Uni_one string `json:"uni_one"`
Unique string `json:"unique"`
Zcbh_pm string `json:"zcbh_pm"`
}
type CIRecordStartup struct {
Bumen string `json:"bumen"` // 部门
Ip string `json:"ip"` // ip
Mac string `json:"mac"` // mac地址
Start_time string `json:"start_time"` // 启动时间
Cpu string `json:"cpu"` // cpu
Disk string `json:"disk"` // 硬盘
Memory string `json:"memory"` // 内存
Bumen string `json:"bumen"` // 部门
Ip string `json:"ip"` // ip
Mac string `json:"mac"` // mac地址
Start_time string `json:"start_time"` // 启动时间
Cpu string `json:"cpu"` // cpu
Disk string `json:"disk"` // 硬盘
Memory string `json:"memory"` // 内存
PC_update_time string `json:"pc_update_time"` // 信息更新时间
Position string `json:"position"` // 具体位置
}
type CIRecordUpdateReq struct {
Ci_id int `json:"ci_id"`
}
type CIRecordUpdateTime struct {
Username string `json:"username"` // 姓名
PC_update_time string `json:"pc_update_time"` // 信息更新时间
}
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 {
Product_name string `json:"product_name"` // 主机名
......@@ -83,7 +92,7 @@ func (cir *CIRecordResult) BasicInfo(v string) error {
if err != nil {
return err
}
cir.Position = cir.position(hostnameSplit[0], hostnameSplit[1])
cir.Position = GetCMDBPosition(hostnameSplit[0], hostnameSplit[1])
if cir.Position == ERROR {
return fmt.Errorf("主机命令错误")
}
......@@ -125,7 +134,7 @@ func (cir *CIRecordStartup) GetHardWare() {
}()
wg.Wait()
}
func (cir *CIRecordResult) position(location, dept string) string {
func GetCMDBPosition(location, dept string) string {
const cmdbPosition1 string = "7"
const cmdbPosition2 string = "12"
const cmdbPosition3 string = "zhengzhou"
......
......@@ -27,7 +27,7 @@ func GetPostationFromHostname(hostname string) (string, error) {
return Cmdb_Position_12, nil
case HOST_Dept_MT:
return Cmdb_Position_12, nil
case HOST_Dept_ZZ:
case HOST_Dept_ZJ:
return Cmdb_Position_12, nil
case HOST_Dept_DD:
return Cmdb_Position_12, nil
......
......@@ -11,7 +11,7 @@ const SymbolHostname = "-"
// AD-Control //
const Version string = "2.2.4"
const Version string = "2.2.5"
const Host_adserver string = "ADSERVER"
const Host_adserver_ip string = "192.168.0.20"
const Host_thserver string = "THSERVER"
......
......@@ -14,10 +14,9 @@ import (
type logs struct {
Time string `json:"Time"`
Hook string `json:"Hook"`
Version string `json:"Version"`
Host string `json:"Host"`
Level string `json:"Level"`
MsgType string `json:"MsgType"`
LogType string `json:"LogType"`
Message string `json:"Message"`
}
......@@ -33,7 +32,6 @@ func logBase() logs {
}
l.Time = time.Now().Format("2006-01-02 15:04:05 Monday")
l.Hook = fmt.Sprintf("%s:%d:%s", filename, line, funcname)
l.Version = Version
return l
}
func logDeal(level string, l *logs) {
......@@ -71,7 +69,7 @@ func LOG(level string, msgtype string, args ...any) {
l := logBase()
l.Host = User_computername
l.Level = level
l.MsgType = msgtype
l.LogType = msgtype
l.Message = fmt.Sprint(args...)
logDeal(level, &l)
}
......@@ -113,7 +113,7 @@ func (rep *MJreport) MsgDeal() interface{} {
switch rep.Status {
// 服务器
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
LOG(ERROR, rep.Instruction, err)
break
......@@ -124,18 +124,13 @@ func (rep *MJreport) MsgDeal() interface{} {
LOG(ERROR, rep.Instruction, err)
break
}
a, err := cmdbKVtoJSON(Cmdb_Username, rep.DataStr)
if err != nil {
rep.DataStr = Error_CMDB_UPDATE_REQ
LOG(ERROR, rep.Instruction, err)
break
}
if err := cmdbUpdateRecordFromJSON(a, ci); err != nil {
if err := cmdbUpdateRecordFromJSON(rep.DataStr, ci); err != nil {
rep.DataStr = Error_CMDB_UPDATE_REQ
LOG(ERROR, rep.Instruction, err)
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
// 客户端
......@@ -241,23 +236,64 @@ func (wake *MJwake) MsgDeal() interface{} {
switch wake.Instruction {
case Msg_Wake_Status_Req:
mac, err := CmdbGetWordFromKV(Cmdb_Product_name, wake.Hostname, Cmdb_Mac)
wake.Instruction = Msg_Wake_Status_Over
if wake.IfList {
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 {
wake.Explain = err.Error()
break
}
if mac == "" {
wake.Explain = Error_CMDB_No_Record.Error()
break
if err != nil {
wake.Explain = err.Error()
break
}
if mac == "" {
wake.Explain = Error_CMDB_No_Record.Error()
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)
LOG(INFO, "WAKE_REQ", l)
go Wol_enter(mac)
wake.Explain = l
return wake
case Msg_Wake_Status_Forwarding:
wake.Instruction = Msg_Wake_Status_Over
case Msg_Wake_Status_Start:
LOG(INFO, "WAKE", fmt.Sprintf("hostname:%s,mac:%s", wake.Hostname, wake.MACAddress))
Wol_enter(wake.MACAddress)
wake.Instruction = Msg_Wake_Status_Over
case Msg_Wake_Status_Over:
if wake.Explain != "" {
LOG(INFO, "WAKE", wake.Explain)
......
......@@ -62,7 +62,7 @@ const Msg_Exec_OpenRemoteTerminal string = "OpenRemoteTerminal"
// msg wkae type ////////////////////////////////////////////////////////////////
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"
// wxwork event key ////////////////////////////////////////////////////////////////
......@@ -117,9 +117,10 @@ type MJwake struct {
MJbase
Hostname string `json:"hostname"`
MACAddress string `json:"macaddress"`
List string `json:"list"`
IfList bool `json:"iflist"`
Dept string `json:"dept"`
Region string `json:"region"`
Delay int `json:"delay"`
}
// wxwork Json Format /////////////////////////////////////////////////////
......@@ -143,23 +144,17 @@ func GJreportString(s string, d string) interface{} {
rep.DataStr = d
return rep
}
func GJreport(s string) interface{} {
func GJreportUsernameString(s string, n string, d string) interface{} {
var rep MJreport
rep.init(s)
rep.Username = n
rep.DataStr = d
return rep
}
func (rep *MJreport) Reg_Write_ADDC(key, value string) {
// Reg_Write_key_one(
// Reg_Root_ac,
// Reg_Path_home_ac+rep.Computername,
// 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 GJreport(s string) interface{} {
var rep MJreport
rep.init(s)
return rep
}
func (rep *MJreport) Pskill(cmd string) {
Pskill(rep.Computername, cmd)
......@@ -212,13 +207,20 @@ func (exec *MJexec) ToWXWrokAdmin() string {
// wake
func GJwakeOne(host string) interface{} {
func GJwakeHost(host string) interface{} {
var wake MJwake
wake.MsgType = Msg_Wake
wake.Instruction = Msg_Wake_Status_Req
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
}
......
......@@ -9,6 +9,8 @@ import (
"net/http"
)
var sendserver func(msgtype string, v interface{})
func SendServerReport(s string) {
SendADMsg(Msg_Report, GJreport(s))
}
......@@ -51,7 +53,6 @@ func SendMsg(server, msgtype string, v interface{}) {
if err != nil {
LOG(ERROR, NULL, err)
}
// 处理数据
if len(body) > 0 {
DealMsg(GetMsgType(body), "", body)
......@@ -161,3 +162,26 @@ func SendWxworkTextToAUser(id, text string) error {
func SendWxworkTextToAdmins(text string) error {
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"
const HOST_Dept_JL string = "JL"
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_JR string = "JR"
const HOST_Dept_TXWJ string = "TXWJ"
......@@ -90,19 +90,5 @@ func GetIPFromInterface() {
// 判断计算机是否在zhiweireach中
func Zhiweireach() bool {
var r bool
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
return User_userdomain == "ZHIWEIREACH"
}
......@@ -380,7 +380,11 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) {
c++
} else if strings.Contains(line, "MemoryType") {
m := strings.TrimSpace(strings.Split(line, ":")[1])
switch m {
// 其实吧,是有可能的
case "0":
m = "0"
case "21":
m = "DDR2"
case "22":
......@@ -389,12 +393,6 @@ func getHardwareMemoryForPS() ([]int, []string, []string, int) {
m = "DDR3"
case "26":
m = "DDR4"
case "0":
if i, err := strconv.Atoi(Speed[j]); err != nil {
m = ""
} else if i >= 2133 {
m = "DDR4"
}
default:
m = ""
}
......@@ -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
}
func getHardwareHardDiskForPS(mini bool) ([]string, []int64, []string, int) {
......@@ -486,16 +491,39 @@ func GetIPFromNslookup() string {
// 在域中,为主控
// 在工作组中,为本机
// 因此可以可以机器简单的方式获取到本机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)
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 {
// 根据登录的服务器作为DNS的解析变量
// 在域中,为主控
// 在工作组中,为本机
// 因此可以可以机器简单的方式获取到本机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 = strings.TrimSpace(result)
return strings.Split(result, "\n")
......
package main
import (
"encoding/json"
"fmt"
"strings"
"time"
......@@ -31,7 +32,7 @@ func menuInitName(ni *walk.NotifyIcon) {
// 电源管理
func menuInitPower(ni *walk.NotifyIcon) {
fa := "电源管理"
sub := [...]string{"保持开机", "取消关机计时"}
sub := [...]string{"保持开机(关闭主机活动检测)", "删除关机倒计时"}
// 建立空菜单
nm, err := walk.NewMenu()
......@@ -73,14 +74,15 @@ func menuInitPower(ni *walk.NotifyIcon) {
// 电源管理 保持开机
func pKeepRunning() {
pub.Active = false
Msg("将保持开机,至次日9点恢复")
Msg("将保持开机,至次日18点重新检测主机活动")
pub.Execcmd_output("shutdown -a")
pub.LOG(INFO, "USERS_POWER", "执行 电源管理-保持开机")
}
// 电源管理 取消自动关机
// 电源管理 删除关机倒计时
func pCancelCloseWindows() {
pub.Execcmd_output("shutdown -a")
pub.LOG(INFO, "USERS_POWER", "执行 电源管理-取消自动关机")
pub.LOG(INFO, "USERS_POWER", "执行 电源管理-删除关机倒计时")
}
// 账号管理
......@@ -182,9 +184,21 @@ func menuInitHostManager(ni *walk.NotifyIcon) {
// 主机管理 绑定主机
func tHostManagerBind() {
if r := Msg_YesNo(`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`); r == 1 {
pub.SendADMsg(pub.Msg_Report, pub.GJreportString(pub.Msg_Report_UpdatePrimaryHost, pub.User_name_display))
if r := Msg_YesNo(`执行本操作后,通过企业微信的"知微运维平台"的电源管理的主机将是本机。`); r != 1 {
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() {
if pub.IfBeforeMin(timeout, pub.Users_Timeout) {
......
......@@ -147,7 +147,7 @@ func main() {
MsgAdvUI(ni, "运维小工具已运行")
timeout = time.Now()
pub.LOG(INFO, NULL, "start!")
pub.LOG(INFO, NULL, fmt.Sprintf("users verson:%s start!", pub.Version))
// 循环 运行窗体
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