Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
AD-Control-Golang
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陶腾飞
AD-Control-Golang
Commits
f47af0d3
Commit
f47af0d3
authored
Apr 09, 2022
by
陶腾飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2022/04/09 v2.2.5
parent
7729a35a
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
261 additions
and
91 deletions
+261
-91
README.MD
+1
-0
adct/adct.go
+26
-16
public/cmdb.go
+62
-0
public/cmdbjson.go
+11
-2
public/dept.go
+1
-1
public/env.go
+1
-1
public/log.go
+2
-4
public/msg_deal.go
+52
-16
public/msg_init.go
+20
-18
public/send.go
+25
-1
public/user.go
+2
-16
public/win.go
+37
-9
users/menu.go
+20
-6
users/users.go
+1
-1
No files found.
README.MD
View file @
f47af0d3
...
@@ -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的问题,小工具菜单名优化,远程唤醒优化
## 四、其他说明
## 四、其他说明
...
...
adct/adct.go
View file @
f47af0d3
...
@@ -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
))
}
}
public/cmdb.go
View file @
f47af0d3
...
@@ -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
)
...
...
public/cmdbjson.go
View file @
f47af0d3
...
@@ -42,6 +42,7 @@ type CIRecordResult struct {
...
@@ -42,6 +42,7 @@ type CIRecordResult struct {
Disk
string
`json:"disk"`
// 硬盘
Disk
string
`json:"disk"`
// 硬盘
Memory
string
`json:"memory"`
// 内存
Memory
string
`json:"memory"`
// 内存
Flag
string
`json:"flag"`
// 标签
Flag
string
`json:"flag"`
// 标签
PC_update_time
string
`json:"pc_update_time"`
// 信息更新时间
Buy_time
string
`json:"buy_time"`
Buy_time
string
`json:"buy_time"`
Ci_id
int
`json:"ci_id"`
Ci_id
int
`json:"ci_id"`
Ci_type
string
`json:"ci_type"`
Ci_type
string
`json:"ci_type"`
...
@@ -61,11 +62,19 @@ type CIRecordStartup struct {
...
@@ -61,11 +62,19 @@ type CIRecordStartup struct {
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
{
PC_update_time
string
`json:"pc_update_time"`
// 信息更新时间
Shutdown_time
string
`json:"shutdown_time"`
// 关机时间
Shutdown_time
string
`json:"shutdown_time"`
// 关机时间
}
}
type
CIRecorProduct_name
struct
{
type
CIRecorProduct_name
struct
{
...
@@ -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
.
p
osition
(
hostnameSplit
[
0
],
hostnameSplit
[
1
])
cir
.
Position
=
GetCMDBP
osition
(
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
)
p
osition
(
location
,
dept
string
)
string
{
func
GetCMDBP
osition
(
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"
...
...
public/dept.go
View file @
f47af0d3
...
@@ -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_Z
Z
:
case
HOST_Dept_Z
J
:
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
...
...
public/env.go
View file @
f47af0d3
...
@@ -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"
...
...
public/log.go
View file @
f47af0d3
...
@@ -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:"Ms
gType"`
LogType
string
`json:"Lo
gType"`
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
.
Ms
gType
=
msgtype
l
.
Lo
gType
=
msgtype
l
.
Message
=
fmt
.
Sprint
(
args
...
)
l
.
Message
=
fmt
.
Sprint
(
args
...
)
logDeal
(
level
,
&
l
)
logDeal
(
level
,
&
l
)
}
}
public/msg_deal.go
View file @
f47af0d3
...
@@ -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,8 +236,33 @@ func (wake *MJwake) MsgDeal() interface{} {
...
@@ -241,8 +236,33 @@ 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
{
r
,
p
,
err
:=
CmdbGetListFromKV2
(
Cmdb_Position
,
wake
.
List
,
Cmdb_Mac
,
Cmdb_Position
)
if
err
!=
nil
{
wake
.
Instruction
=
Msg_Wake_Status_Over
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
()
...
@@ -252,12 +272,28 @@ func (wake *MJwake) MsgDeal() interface{} {
...
@@ -252,12 +272,28 @@ func (wake *MJwake) MsgDeal() interface{} {
wake
.
Explain
=
Error_CMDB_No_Record
.
Error
()
wake
.
Explain
=
Error_CMDB_No_Record
.
Error
()
break
break
}
}
l
:=
fmt
.
Sprintf
(
"hostname:%s,mac:%s"
,
wake
.
Hostname
,
mac
)
wake
.
Instruction
=
Msg_Wake_Status_Start
LOG
(
INFO
,
"WAKE_REQ"
,
l
)
wake
.
MACAddress
=
mac
go
Wol_enter
(
mac
)
wake
.
Explain
=
l
switch
postation
{
return
wake
case
Cmdb_Position_7
:
case
Msg_Wake_Status_Forwarding
:
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
)
}
}
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
:
case
Msg_Wake_Status_Over
:
if
wake
.
Explain
!=
""
{
if
wake
.
Explain
!=
""
{
LOG
(
INFO
,
"WAKE"
,
wake
.
Explain
)
LOG
(
INFO
,
"WAKE"
,
wake
.
Explain
)
...
...
public/msg_init.go
View file @
f47af0d3
...
@@ -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
GJreport
UsernameString
(
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
GJwake
One
(
host
string
)
interface
{}
{
func
GJwake
Host
(
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
}
}
...
...
public/send.go
View file @
f47af0d3
...
@@ -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
}
public/user.go
View file @
f47af0d3
...
@@ -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_Z
Z
string
=
"ZZ
"
const
HOST_Dept_Z
J
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
}
}
public/win.go
View file @
f47af0d3
...
@@ -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
"
)
...
...
users/menu.go
View file @
f47af0d3
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
)
{
...
...
users/users.go
View file @
f47af0d3
...
@@ -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
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment