Add missing nvme attributes to smart plugin (#7575)

This commit is contained in:
Piotr Szczepanik 2020-06-23 20:55:32 +02:00 committed by GitHub
parent dd546797ed
commit 6c1d9f765a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 173 additions and 6 deletions

View File

@ -103,10 +103,48 @@ var (
},
},
"Available Spare": {
Name: "Available_Spare",
Parse: func(fields, deviceFields map[string]interface{}, str string) error {
return parseCommaSeparatedInt(fields, deviceFields, strings.TrimSuffix(str, "%"))
},
Name: "Available_Spare",
Parse: parsePercentageInt,
},
"Available Spare Threshold": {
Name: "Available_Spare_Threshold",
Parse: parsePercentageInt,
},
"Percentage Used": {
Name: "Percentage_Used",
Parse: parsePercentageInt,
},
"Data Units Read": {
Name: "Data_Units_Read",
Parse: parseDataUnits,
},
"Data Units Written": {
Name: "Data_Units_Written",
Parse: parseDataUnits,
},
"Host Read Commands": {
Name: "Host_Read_Commands",
Parse: parseCommaSeparatedInt,
},
"Host Write Commands": {
Name: "Host_Write_Commands",
Parse: parseCommaSeparatedInt,
},
"Controller Busy Time": {
Name: "Controller_Busy_Time",
Parse: parseCommaSeparatedInt,
},
"Unsafe Shutdowns": {
Name: "Unsafe_Shutdowns",
Parse: parseCommaSeparatedInt,
},
"Warning Comp. Temperature Time": {
Name: "Warning_Temperature_Time",
Parse: parseCommaSeparatedInt,
},
"Critical Comp. Temperature Time": {
Name: "Critical_Temperature_Time",
Parse: parseCommaSeparatedInt,
},
}
)
@ -432,6 +470,15 @@ func parseCommaSeparatedInt(fields, _ map[string]interface{}, str string) error
return nil
}
func parsePercentageInt(fields, deviceFields map[string]interface{}, str string) error {
return parseCommaSeparatedInt(fields, deviceFields, strings.TrimSuffix(str, "%"))
}
func parseDataUnits(fields, deviceFields map[string]interface{}, str string) error {
units := strings.Fields(str)[0]
return parseCommaSeparatedInt(fields, deviceFields, units)
}
func parseTemperature(fields, deviceFields map[string]interface{}, str string) error {
var temp int64
if _, err := fmt.Sscanf(str, "%d C", &temp); err != nil {

View File

@ -611,6 +611,18 @@ func TestGatherNvme(t *testing.T) {
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Available_Spare_Threshold",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": 10,
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
@ -636,6 +648,114 @@ func TestGatherNvme(t *testing.T) {
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Percentage_Used",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(16),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Data_Units_Read",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(11836935),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Data_Units_Written",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(62288091),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Host_Read_Commands",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(135924188),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Host_Write_Commands",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(7715573429),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Controller_Busy_Time",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(4042),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Unsafe_Shutdowns",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(355),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Warning_Temperature_Time",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(11),
},
time.Now(),
),
testutil.MustMetric("smart_attribute",
map[string]string{
"device": ".",
"name": "Critical_Temperature_Time",
"serial_no": "D704940282?",
"model": "TS128GMTE850",
},
map[string]interface{}{
"raw_value": int64(7),
},
time.Now(),
),
}
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(),
@ -1089,7 +1209,7 @@ Power On Hours: 6,038
Unsafe Shutdowns: 355
Media and Data Integrity Errors: 0
Error Information Log Entries: 119,699
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
Warning Comp. Temperature Time: 11
Critical Comp. Temperature Time: 7
`
)