Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
U
ucas-III-script
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
bo.sun
ucas-III-script
Commits
08730b09
提交
08730b09
authored
9月 19, 2024
作者:
shenchao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加脚本文件
上级
1b2c7650
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
201 行增加
和
38 行删除
+201
-38
gpio.py
tool/gpio.py
+201
-38
没有找到文件。
tool/gpio.py
浏览文件 @
08730b09
...
...
@@ -4,51 +4,215 @@
import
subprocess
import
shlex
import
time
import
datetime
logfile
=
"/var/log/hb.log"
class
check_all
():
def
__init__
(
self
,
disks
:
list
,
disk_num
:
int
,
ints
:
list
,
memsize
:
int
):
self
.
disks
=
disks
self
.
disk_num
=
disk_num
self
.
ints
=
ints
self
.
memsize
=
memsize
def
sata_speed
(
self
):
"""
测试硬盘SATA接口速率
"""
for
i
in
self
.
disks
:
cmd
=
f
"smartctl -a /dev/{i} | grep -c 'SATA 3.* 6.0 Gb/s'"
ret
=
runcmd
(
cmd
,
shell
=
True
)
if
ret
[
1
]
or
not
int
(
ret
[
0
]
.
replace
(
"
\n
"
,
""
)):
logs
(
f
"Error:硬盘{i} 速率检测失败,sata接口没有达到6Gb,将设备进行分类."
)
return
0
logs
(
f
"info:硬盘{i} 速率检测正常,sata接口速率为6Gb!"
)
return
1
def
intf
(
self
):
"""
测试网络接口
"""
for
i
in
self
.
ints
:
cmd
=
f
"ethtool {i} | egrep -c 'Speed: 1000Mb/s|Link detected: yes'"
ret
=
runcmd
(
cmd
,
shell
=
True
)
if
ret
[
1
]
or
int
(
ret
[
0
]
.
replace
(
"
\n
"
,
""
))
!=
2
:
logs
(
f
"Error:网卡{i}没有连接网线或速率没有达到1Gb,将设备进行分类."
)
return
0
logs
(
f
"info:网卡{i}接口正常."
)
return
1
def
mem
(
self
):
"""
测试内存大小
"""
cmd
=
"free -g | grep Mem | awk '{print $2}'"
ret
=
runcmd
(
cmd
,
shell
=
True
)
if
not
ret
[
1
]
and
int
(
ret
[
0
]
.
replace
(
"
\n
"
,
""
))
>=
self
.
memsize
:
logs
(
"info:内存检测正常."
)
return
1
else
:
logs
(
"Error:内存检测失败,将设备进行分类."
)
return
0
def
hd_num
(
self
):
"""
测试HDD硬盘数量
"""
n
=
len
(
disks
())
if
n
==
self
.
disk_num
:
logs
(
f
"info:硬盘数量为{n},符合标配."
)
return
1
else
:
logs
(
f
"Error:硬盘数量为{n},与标配{self.disk_num}不符."
)
return
0
def
sync_time
(
self
):
"""
同步时间
"""
cmd
=
"ntpdate ntp3.aliyun.com"
ret
=
runcmd
(
cmd
)
if
not
ret
[
1
]:
time
.
sleep
(
3
)
runcmd
(
"hwclock -w"
)
print
(
"当前时间:"
,
runcmd
(
"hwclock -r"
))
return
1
else
:
logs
(
"Error:时间同步失败,请检测网络."
)
return
0
def
usb
(
self
):
"""
测试usb接口
"""
cmd
=
"udevadm info -q path -n /dev/sd[a-i]|grep usb|grep -ocE '[^/]+$'"
n
=
0
while
n
<
3
:
ret
=
runcmd
(
cmd
,
shell
=
True
)
if
ret
[
1
]
or
not
int
(
ret
[
0
]
.
replace
(
"
\n
"
,
""
)):
print
(
"Error: 没检测到U盘请认插入usb设备"
)
print
(
"再次检测中..."
)
time
.
sleep
(
10
)
n
+=
1
else
:
logs
(
"info:USB设备检测正常."
)
return
1
logs
(
"Error:USB设备检测失败,如果已接入usb设备,请将设备归类."
)
return
0
def
model
():
"""
查看型号并返回标配内存硬盘数量
"""
modes
=
{
"A000"
:
[
7
,
4
,
8
,
"t"
],
"A001"
:
[
7
,
4
,
16
,
"t"
],
"A002"
:
[
7
,
4
,
32
,
"t"
],
"A003"
:
[
7
,
4
,
64
,
"t"
],
"A004"
:
[
15
,
4
,
8
,
"t"
],
"A005"
:
[
15
,
4
,
16
,
"t"
],
"A006"
:
[
15
,
4
,
32
,
"t"
],
"A007"
:
[
15
,
4
,
64
,
"t"
],
"A100"
:
[
7
,
4
,
16
,
"w"
],
"A101"
:
[
7
,
4
,
32
,
"w"
],
"A102"
:
[
7
,
4
,
64
,
"w"
],
"A103"
:
[
15
,
4
,
16
,
"w"
],
"A104"
:
[
15
,
4
,
32
,
"w"
],
"A105"
:
[
15
,
4
,
64
,
"w"
],
"A200"
:
[
15
,
4
,
32
,
"w"
],
"A201"
:
[
15
,
4
,
64
,
"w"
],
"B000"
:
[
15
,
4
,
32
,
"w"
],
"B001"
:
[
15
,
4
,
64
,
"w"
],
"B100"
:
[
15
,
4
,
32
,
"w"
],
"B101"
:
[
15
,
4
,
64
,
"w"
],
"B200"
:
[
15
,
4
,
64
,
"w"
],
"B300"
:
[
15
,
8
,
15.36
,
"w"
],
"B301"
:
[
15
,
8
,
30.72
,
"w"
],
"B400"
:
[
15
,
8
,
30.72
,
"w"
],
"B500"
:
[
15
,
8
,
30.72
,
"w"
]}
cmd
=
"/opt/tool/saturn-device-id -r 14 | cut -c 11-"
ret
=
runcmd
(
cmd
,
shell
=
True
)
if
ret
[
1
]:
return
0
else
:
sn
=
ret
[
0
]
.
replace
(
"
\n
"
,
""
)
return
modes
[
sn
],
sn
def
disks
():
"""
HDD硬盘列表
"""
cmd
=
"lsblk -d -o NAME,RM,ROTA | egrep
\"
sd.*0.*[0-1]{1}
\"
"
check_ds
=
[]
ret
=
runcmd
(
cmd
,
shell
=
True
)
if
ret
[
1
]:
return
0
else
:
for
l
in
str
(
ret
[
0
])
.
split
(
"
\n
"
):
l1
=
l
.
split
()
if
l1
and
int
(
l1
[
1
])
==
0
:
check_ds
.
append
(
l1
[
0
])
return
check_ds
def
logs
(
log
:
str
,
op
=
"a"
):
with
open
(
logfile
,
op
)
as
f
:
t
=
str
(
datetime
.
datetime
.
now
())
.
split
(
"."
)[
0
]
line
=
t
+
" "
+
log
+
"
\n
"
print
(
line
,
end
=
""
)
f
.
write
(
line
)
def
runcmd
(
cmd
,
shell
=
False
,
encoding
=
'utf-8'
):
args
=
cmd
if
shell
else
shlex
.
split
(
cmd
)
r
=
subprocess
.
run
(
args
,
shell
=
shell
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
,
encoding
=
encoding
)
return
r
.
stdout
,
r
.
returncode
,
r
.
stderr
return
r
.
stdout
,
r
.
returncode
def
check_disk
():
disk
=
"fdisk -l|grep -Ew 'sda|sdb|sdc|sdd|sde|sdf|sdg|sdh'|wc -l"
ret
=
runcmd
(
disk
,
shell
=
True
)
d
=
int
(
ret
[
0
]
.
replace
(
"
\n
"
,
""
))
print
(
d
)
if
d
in
[
4
,
8
]:
with
open
(
'/opt/collect/check.log'
,
'w'
)
as
log_file
:
log_file
.
write
(
"YES"
)
def
check_in
():
sn
=
str
(
input
(
"请扫码获取序列号:"
))
.
replace
(
" "
,
""
)
if
len
(
sn
)
==
31
and
"-"
in
sn
:
s
=
sn
.
split
(
"-"
)
if
len
(
s
[
0
])
==
14
and
len
(
s
[
1
])
==
16
:
return
sn
elif
len
(
sn
)
==
14
:
return
sn
def
warn
(
n
:
int
):
"""
信号灯控制
"""
cmd
=
f
"/opt/tool/saturn-gpio-set.sh --sys {n}"
runcmd
(
cmd
,
shell
=
True
)
return
True
else
:
with
open
(
'/opt/collect/check.log'
,
'w'
)
as
log_file
:
log_file
.
write
(
"no_disk"
)
return
False
def
check_memory
():
# memory = "free -m|awk 'NR==2{print $2}'"
memory
=
"free -h|awk -F'Gi' 'NR==2{print $1}'|awk '{print $2}'"
ret
=
runcmd
(
memory
,
shell
=
True
)
m
=
int
(
ret
[
0
]
.
replace
(
"
\n
"
,
""
))
print
(
m
)
if
m
==
15
:
with
open
(
'/opt/collect/check.log'
,
'w'
)
as
log_file
:
log_file
.
write
(
"YES"
)
return
True
else
:
with
open
(
'/opt/collect/check.log'
,
'w'
)
as
log_file
:
log_file
.
write
(
"no_memory"
)
return
False
if
__name__
==
'__main__'
:
while
True
:
if
check_disk
()
and
check_memory
():
runcmd
(
"/opt/tool/saturn-gpio-set.sh --sys 2"
)
else
:
runcmd
(
"/opt/tool/saturn-gpio-set.sh --sys 1"
)
time
.
sleep
(
2
)
\ No newline at end of file
warn
(
2
)
mode
=
model
()
if
mode
[
0
]:
err
=
0
ints
=
[
"eth0"
,
"eth1"
]
if
mode
[
0
][
3
]
==
"w"
else
[
"end0"
,
"end1"
]
while
True
:
logs
(
"开始检测..."
,
op
=
"w"
)
mynas
=
check_all
(
disks
(),
mode
[
0
][
1
],
ints
,
mode
[
0
][
0
])
if
not
mynas
.
sata_speed
():
err
=
1
if
not
mynas
.
mem
():
err
=
1
if
not
mynas
.
hd_num
():
err
=
1
if
err
:
warn
(
1
)
logs
(
"Error:检测发现问题!"
)
else
:
warn
(
2
)
logs
(
"检测通过!"
)
time
.
sleep
(
1
)
else
:
warn
(
1
)
logs
(
"型号未能识别,检查序列号是否正确。"
)
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论