FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
netdata/python.d/mdstat.chart.py at master · johnulist/netdata · GitHub
johnulist
/
netdata
Public
forked from
netdata/netdata
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
netdata
/
python.d
/
mdstat.chart.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
99 lines (87 loc) · 4.6 KB
Breadcrumbs
netdata
/
python.d
/
mdstat.chart.py
Copy path
File metadata and controls
99 lines (87 loc) · 4.6 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# -*- coding: utf-8 -*-
# Description: mdstat netdata python.d module
# Author: l2isbad
from
base
import
SimpleService
from
re
import
compile
priority
=
60000
retries
=
60
update_every
=
1
class
Service
(
SimpleService
):
def
__init__
(
self
,
configuration
=
None
,
name
=
None
):
SimpleService
.
__init__
(
self
,
configuration
=
configuration
,
name
=
name
)
self
.
order
=
[
'agr_health'
]
self
.
definitions
=
{
'agr_health'
:
{
'options'
:
[
None
,
'Faulty devices in MD'
,
'failed disks'
,
'health'
,
'md.health'
,
'line'
],
'lines'
: []}}
self
.
proc_mdstat
=
'/proc/mdstat'
self
.
regex_disks
=
compile
(
r'((?<=\ )[a-zA-Z_0-9]+(?= : active)).*?((?<= \[)[0-9]+)/([0-9]+(?=\] ))'
)
self
.
regex_status
=
compile
(
r'([a-zA-Z_0-9]+)( : active)[^:]*?([a-z]+) = ([0-9.]+(?=%)).*?((?<=finish=)[0-9.]+)min speed=([0-9]+)'
)
def
check
(
self
):
raw_data
=
self
.
_get_raw_data
()
if
not
raw_data
:
self
.
error
(
'Cant read mdstat data from %s'
%
(
self
.
proc_mdstat
))
return
False
md_list
=
[
md
[
0
]
for
md
in
self
.
regex_disks
.
findall
(
raw_data
)]
if
not
md_list
:
self
.
error
(
'No active arrays in %s'
%
(
self
.
proc_mdstat
))
return
False
else
:
for
md
in
md_list
:
self
.
order
.
append
(
md
)
self
.
order
.
append
(
''
.
join
([
md
,
'_status'
]))
self
.
order
.
append
(
''
.
join
([
md
,
'_rate'
]))
self
.
definitions
[
'agr_health'
][
'lines'
].
append
([
''
.
join
([
md
,
'_health'
]),
md
,
'absolute'
])
self
.
definitions
[
md
]
=
{
'options'
:
[
None
,
'%s disks stats'
%
md
,
'disks'
,
md
,
'md.disks'
,
'stacked'
],
'lines'
: [[
''
.
join
([
md
,
'_total'
]),
'total'
,
'absolute'
],
[
''
.
join
([
md
,
'_inuse'
]),
'inuse'
,
'absolute'
]]}
self
.
definitions
[
''
.
join
([
md
,
'_status'
])]
=
{
'options'
:
[
None
,
'%s current status'
%
md
,
'percent'
,
md
,
'md.status'
,
'line'
],
'lines'
: [[
''
.
join
([
md
,
'_resync'
]),
'resync'
,
'absolute'
,
1
,
100
],
[
''
.
join
([
md
,
'_recovery'
]),
'recovery'
,
'absolute'
,
1
,
100
],
[
''
.
join
([
md
,
'_reshape'
]),
'reshape'
,
'absolute'
,
1
,
100
],
[
''
.
join
([
md
,
'_check'
]),
'check'
,
'absolute'
,
1
,
100
]]}
self
.
definitions
[
''
.
join
([
md
,
'_rate'
])]
=
{
'options'
:
[
None
,
'%s operation status'
%
md
,
'rate'
,
md
,
'md.rate'
,
'line'
],
'lines'
: [[
''
.
join
([
md
,
'_finishin'
]),
'finish min'
,
'absolute'
,
1
,
100
],
[
''
.
join
([
md
,
'_rate'
]),
'megabyte/s'
,
'absolute'
,
-
1
,
100
]]}
self
.
info
(
'Plugin was started successfully. MDs to monitor %s'
%
(
md_list
))
return
True
def
_get_raw_data
(
self
):
"""
Read data from /proc/mdstat
:return: str
"""
try
:
with
open
(
self
.
proc_mdstat
,
'rt'
)
as
proc_mdstat
:
raw_result
=
proc_mdstat
.
read
()
except
Exception
:
return
None
else
:
raw_result
=
' '
.
join
(
raw_result
.
split
())
return
raw_result
def
_get_data
(
self
):
"""
Parse data from _get_raw_data()
:return: dict
"""
raw_mdstat
=
self
.
_get_raw_data
()
mdstat_disks
=
self
.
regex_disks
.
findall
(
raw_mdstat
)
mdstat_status
=
self
.
regex_status
.
findall
(
raw_mdstat
)
to_netdata
=
{}
for
md
in
mdstat_disks
:
to_netdata
[
''
.
join
([
md
[
0
],
'_total'
])]
=
int
(
md
[
1
])
to_netdata
[
''
.
join
([
md
[
0
],
'_inuse'
])]
=
int
(
md
[
2
])
to_netdata
[
''
.
join
([
md
[
0
],
'_health'
])]
=
int
(
md
[
1
])
-
int
(
md
[
2
])
to_netdata
[
''
.
join
([
md
[
0
],
'_check'
])]
=
0
to_netdata
[
''
.
join
([
md
[
0
],
'_resync'
])]
=
0
to_netdata
[
''
.
join
([
md
[
0
],
'_reshape'
])]
=
0
to_netdata
[
''
.
join
([
md
[
0
],
'_recovery'
])]
=
0
to_netdata
[
''
.
join
([
md
[
0
],
'_finishin'
])]
=
0
to_netdata
[
''
.
join
([
md
[
0
],
'_rate'
])]
=
0
for
md
in
mdstat_status
:
to_netdata
[
''
.
join
([
md
[
0
],
'_'
+
md
[
2
]])]
=
round
(
float
(
md
[
3
])
*
100
)
to_netdata
[
''
.
join
([
md
[
0
],
'_finishin'
])]
=
round
(
float
(
md
[
4
])
*
100
)
to_netdata
[
''
.
join
([
md
[
0
],
'_rate'
])]
=
round
(
float
(
md
[
5
])
/
1000
*
100
)
return
to_netdata
Back
|
FazBrowse Home
|
New Git URL