@ -140,7 +140,6 @@ func (sm *Smart) ProcessAtaSmartInfo(info collector.SmartInfo) {
for _ , collectorAttr := range info . AtaSmartAttributes . Table {
attrModel := SmartAtaAttribute {
AttributeId : collectorAttr . ID ,
Name : collectorAttr . Name ,
Value : collectorAttr . Value ,
Worst : collectorAttr . Worst ,
Threshold : collectorAttr . Thresh ,
@ -151,7 +150,6 @@ func (sm *Smart) ProcessAtaSmartInfo(info collector.SmartInfo) {
//now that we've parsed the data from the smartctl response, lets match it against our metadata rules and add additional Scrutiny specific data.
if smartMetadata , ok := thresholds . AtaMetadata [ collectorAttr . ID ] ; ok {
attrModel . Name = smartMetadata . DisplayName
if smartMetadata . Transform != nil {
attrModel . TransformedValue = smartMetadata . Transform ( attrModel . Value , attrModel . RawValue , attrModel . RawString )
}
@ -168,22 +166,22 @@ func (sm *Smart) ProcessAtaSmartInfo(info collector.SmartInfo) {
func ( sm * Smart ) ProcessNvmeSmartInfo ( info collector . SmartInfo ) {
sm . Attributes = map [ string ] SmartAttribute {
"critical_warning" : ( & SmartNvmeAttribute { AttributeId : "critical_warning" , Name: "Critical Warning" , Value: info . NvmeSmartHealthInformationLog . CriticalWarning , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"temperature" : ( & SmartNvmeAttribute { AttributeId : "temperature" , Name: "Temperature" , Value: info . NvmeSmartHealthInformationLog . Temperature , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"available_spare" : ( & SmartNvmeAttribute { AttributeId : "available_spare" , Name: "Available Spare" , Value: info . NvmeSmartHealthInformationLog . AvailableSpare , Threshold : info . NvmeSmartHealthInformationLog . AvailableSpareThreshold } ) . PopulateAttributeStatus ( ) ,
"percentage_used" : ( & SmartNvmeAttribute { AttributeId : "percentage_used" , Name: "Percentage Used" , Value: info . NvmeSmartHealthInformationLog . PercentageUsed , Threshold : 100 } ) . PopulateAttributeStatus ( ) ,
"data_units_read" : ( & SmartNvmeAttribute { AttributeId : "data_units_read" , Name: "Data Units Read" , Value: info . NvmeSmartHealthInformationLog . DataUnitsRead , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"data_units_written" : ( & SmartNvmeAttribute { AttributeId : "data_units_written" , Name: "Data Units Written" , Value: info . NvmeSmartHealthInformationLog . DataUnitsWritten , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"host_reads" : ( & SmartNvmeAttribute { AttributeId : "host_reads" , Name: "Host Reads" , Value: info . NvmeSmartHealthInformationLog . HostReads , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"host_writes" : ( & SmartNvmeAttribute { AttributeId : "host_writes" , Name: "Host Writes" , Value: info . NvmeSmartHealthInformationLog . HostWrites , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"controller_busy_time" : ( & SmartNvmeAttribute { AttributeId : "controller_busy_time" , Name: "Controller Busy Time" , Value: info . NvmeSmartHealthInformationLog . ControllerBusyTime , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"power_cycles" : ( & SmartNvmeAttribute { AttributeId : "power_cycles" , Name: "Power Cycles" , Value: info . NvmeSmartHealthInformationLog . PowerCycles , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"power_on_hours" : ( & SmartNvmeAttribute { AttributeId : "power_on_hours" , Name: "Power on Hours" , Value: info . NvmeSmartHealthInformationLog . PowerOnHours , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"unsafe_shutdowns" : ( & SmartNvmeAttribute { AttributeId : "unsafe_shutdowns" , Name: "Unsafe Shutdowns" , Value: info . NvmeSmartHealthInformationLog . UnsafeShutdowns , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"media_errors" : ( & SmartNvmeAttribute { AttributeId : "media_errors" , Name: "Media Errors" , Value: info . NvmeSmartHealthInformationLog . MediaErrors , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"num_err_log_entries" : ( & SmartNvmeAttribute { AttributeId : "num_err_log_entries" , Name: "Numb Err Log Entries" , Value: info . NvmeSmartHealthInformationLog . NumErrLogEntries , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"warning_temp_time" : ( & SmartNvmeAttribute { AttributeId : "warning_temp_time" , Name: "Warning Temp Time" , Value: info . NvmeSmartHealthInformationLog . WarningTempTime , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"critical_comp_time" : ( & SmartNvmeAttribute { AttributeId : "critical_comp_time" , Name: "Critical CompTime" , Value: info . NvmeSmartHealthInformationLog . CriticalCompTime , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"critical_warning" : ( & SmartNvmeAttribute { AttributeId : "critical_warning" , Value: info . NvmeSmartHealthInformationLog . CriticalWarning , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"temperature" : ( & SmartNvmeAttribute { AttributeId : "temperature" , Value: info . NvmeSmartHealthInformationLog . Temperature , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"available_spare" : ( & SmartNvmeAttribute { AttributeId : "available_spare" , Value: info . NvmeSmartHealthInformationLog . AvailableSpare , Threshold : info . NvmeSmartHealthInformationLog . AvailableSpareThreshold } ) . PopulateAttributeStatus ( ) ,
"percentage_used" : ( & SmartNvmeAttribute { AttributeId : "percentage_used" , Value: info . NvmeSmartHealthInformationLog . PercentageUsed , Threshold : 100 } ) . PopulateAttributeStatus ( ) ,
"data_units_read" : ( & SmartNvmeAttribute { AttributeId : "data_units_read" , Value: info . NvmeSmartHealthInformationLog . DataUnitsRead , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"data_units_written" : ( & SmartNvmeAttribute { AttributeId : "data_units_written" , Value: info . NvmeSmartHealthInformationLog . DataUnitsWritten , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"host_reads" : ( & SmartNvmeAttribute { AttributeId : "host_reads" , Value: info . NvmeSmartHealthInformationLog . HostReads , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"host_writes" : ( & SmartNvmeAttribute { AttributeId : "host_writes" , Value: info . NvmeSmartHealthInformationLog . HostWrites , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"controller_busy_time" : ( & SmartNvmeAttribute { AttributeId : "controller_busy_time" , Value: info . NvmeSmartHealthInformationLog . ControllerBusyTime , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"power_cycles" : ( & SmartNvmeAttribute { AttributeId : "power_cycles" , Value: info . NvmeSmartHealthInformationLog . PowerCycles , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"power_on_hours" : ( & SmartNvmeAttribute { AttributeId : "power_on_hours" , Value: info . NvmeSmartHealthInformationLog . PowerOnHours , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"unsafe_shutdowns" : ( & SmartNvmeAttribute { AttributeId : "unsafe_shutdowns" , Value: info . NvmeSmartHealthInformationLog . UnsafeShutdowns , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"media_errors" : ( & SmartNvmeAttribute { AttributeId : "media_errors" , Value: info . NvmeSmartHealthInformationLog . MediaErrors , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"num_err_log_entries" : ( & SmartNvmeAttribute { AttributeId : "num_err_log_entries" , Value: info . NvmeSmartHealthInformationLog . NumErrLogEntries , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"warning_temp_time" : ( & SmartNvmeAttribute { AttributeId : "warning_temp_time" , Value: info . NvmeSmartHealthInformationLog . WarningTempTime , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"critical_comp_time" : ( & SmartNvmeAttribute { AttributeId : "critical_comp_time" , Value: info . NvmeSmartHealthInformationLog . CriticalCompTime , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
}
//find analyzed attribute status
@ -197,19 +195,19 @@ func (sm *Smart) ProcessNvmeSmartInfo(info collector.SmartInfo) {
//generate SmartScsiAttribute entries from Scrutiny Collector Smart data.
func ( sm * Smart ) ProcessScsiSmartInfo ( info collector . SmartInfo ) {
sm . Attributes = map [ string ] SmartAttribute {
"scsi_grown_defect_list" : ( & SmartScsiAttribute { AttributeId : "scsi_grown_defect_list" , Name: "Grown Defect List" , Value: info . ScsiGrownDefectList , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"read_errors_corrected_by_eccfast" : ( & SmartScsiAttribute { AttributeId : "read_errors_corrected_by_eccfast" , Name: "Read Errors Corrected by ECC Fast" , Value: info . ScsiErrorCounterLog . Read . ErrorsCorrectedByEccfast , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_errors_corrected_by_eccdelayed" : ( & SmartScsiAttribute { AttributeId : "read_errors_corrected_by_eccdelayed" , Name: "Read Errors Corrected by ECC Delayed" , Value: info . ScsiErrorCounterLog . Read . ErrorsCorrectedByEccdelayed , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_errors_corrected_by_rereads_rewrites" : ( & SmartScsiAttribute { AttributeId : "read_errors_corrected_by_rereads_rewrites" , Name: "Read Errors Corrected by ReReads/ReWrites" , Value: info . ScsiErrorCounterLog . Read . ErrorsCorrectedByRereadsRewrites , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"read_total_errors_corrected" : ( & SmartScsiAttribute { AttributeId : "read_total_errors_corrected" , Name: "Read Total Errors Corrected" , Value: info . ScsiErrorCounterLog . Read . TotalErrorsCorrected , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_correction_algorithm_invocations" : ( & SmartScsiAttribute { AttributeId : "read_correction_algorithm_invocations" , Name: "Read Correction Algorithm Invocations" , Value: info . ScsiErrorCounterLog . Read . CorrectionAlgorithmInvocations , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_total_uncorrected_errors" : ( & SmartScsiAttribute { AttributeId : "read_total_uncorrected_errors" , Name: "Read Total Uncorrected Errors" , Value: info . ScsiErrorCounterLog . Read . TotalUncorrectedErrors , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"write_errors_corrected_by_eccfast" : ( & SmartScsiAttribute { AttributeId : "write_errors_corrected_by_eccfast" , Name: "Write Errors Corrected by ECC Fast" , Value: info . ScsiErrorCounterLog . Write . ErrorsCorrectedByEccfast , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_errors_corrected_by_eccdelayed" : ( & SmartScsiAttribute { AttributeId : "write_errors_corrected_by_eccdelayed" , Name: "Write Errors Corrected by ECC Delayed" , Value: info . ScsiErrorCounterLog . Write . ErrorsCorrectedByEccdelayed , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_errors_corrected_by_rereads_rewrites" : ( & SmartScsiAttribute { AttributeId : "write_errors_corrected_by_rereads_rewrites" , Name: "Write Errors Corrected by ReReads/ReWrites" , Value: info . ScsiErrorCounterLog . Write . ErrorsCorrectedByRereadsRewrites , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"write_total_errors_corrected" : ( & SmartScsiAttribute { AttributeId : "write_total_errors_corrected" , Name: "Write Total Errors Corrected" , Value: info . ScsiErrorCounterLog . Write . TotalErrorsCorrected , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_correction_algorithm_invocations" : ( & SmartScsiAttribute { AttributeId : "write_correction_algorithm_invocations" , Name: "Write Correction Algorithm Invocations" , Value: info . ScsiErrorCounterLog . Write . CorrectionAlgorithmInvocations , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_total_uncorrected_errors" : ( & SmartScsiAttribute { AttributeId : "write_total_uncorrected_errors" , Name: "Write Total Uncorrected Errors" , Value: info . ScsiErrorCounterLog . Write . TotalUncorrectedErrors , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"scsi_grown_defect_list" : ( & SmartScsiAttribute { AttributeId : "scsi_grown_defect_list" , Value: info . ScsiGrownDefectList , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"read_errors_corrected_by_eccfast" : ( & SmartScsiAttribute { AttributeId : "read_errors_corrected_by_eccfast" , Value: info . ScsiErrorCounterLog . Read . ErrorsCorrectedByEccfast , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_errors_corrected_by_eccdelayed" : ( & SmartScsiAttribute { AttributeId : "read_errors_corrected_by_eccdelayed" , Value: info . ScsiErrorCounterLog . Read . ErrorsCorrectedByEccdelayed , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_errors_corrected_by_rereads_rewrites" : ( & SmartScsiAttribute { AttributeId : "read_errors_corrected_by_rereads_rewrites" , Value: info . ScsiErrorCounterLog . Read . ErrorsCorrectedByRereadsRewrites , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"read_total_errors_corrected" : ( & SmartScsiAttribute { AttributeId : "read_total_errors_corrected" , Value: info . ScsiErrorCounterLog . Read . TotalErrorsCorrected , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_correction_algorithm_invocations" : ( & SmartScsiAttribute { AttributeId : "read_correction_algorithm_invocations" , Value: info . ScsiErrorCounterLog . Read . CorrectionAlgorithmInvocations , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"read_total_uncorrected_errors" : ( & SmartScsiAttribute { AttributeId : "read_total_uncorrected_errors" , Value: info . ScsiErrorCounterLog . Read . TotalUncorrectedErrors , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"write_errors_corrected_by_eccfast" : ( & SmartScsiAttribute { AttributeId : "write_errors_corrected_by_eccfast" , Value: info . ScsiErrorCounterLog . Write . ErrorsCorrectedByEccfast , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_errors_corrected_by_eccdelayed" : ( & SmartScsiAttribute { AttributeId : "write_errors_corrected_by_eccdelayed" , Value: info . ScsiErrorCounterLog . Write . ErrorsCorrectedByEccdelayed , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_errors_corrected_by_rereads_rewrites" : ( & SmartScsiAttribute { AttributeId : "write_errors_corrected_by_rereads_rewrites" , Value: info . ScsiErrorCounterLog . Write . ErrorsCorrectedByRereadsRewrites , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
"write_total_errors_corrected" : ( & SmartScsiAttribute { AttributeId : "write_total_errors_corrected" , Value: info . ScsiErrorCounterLog . Write . TotalErrorsCorrected , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_correction_algorithm_invocations" : ( & SmartScsiAttribute { AttributeId : "write_correction_algorithm_invocations" , Value: info . ScsiErrorCounterLog . Write . CorrectionAlgorithmInvocations , Threshold : - 1 } ) . PopulateAttributeStatus ( ) ,
"write_total_uncorrected_errors" : ( & SmartScsiAttribute { AttributeId : "write_total_uncorrected_errors" , Value: info . ScsiErrorCounterLog . Write . TotalUncorrectedErrors , Threshold : 0 } ) . PopulateAttributeStatus ( ) ,
}
//find analyzed attribute status