Parse nvme device information from the device health output.
Signed-off-by: Rick Chen <rick.chen@prophetstor.com>
c_data.tags['cluster_id'] = cluster_id\r
c_data.fields['cluster_health'] = str(cluster_state)\r
c_data.fields['agenthost'] = socket.gethostname()\r
- c_data.tags['agenthost_domain_id'] = \\r
- '%s_%s' % (cluster_id, c_data.fields['agenthost'])\r
+ c_data.tags['agenthost_domain_id'] = cluster_id\r
c_data.fields['osd_epoch'] = obj_api.get_osd_epoch()\r
c_data.fields['num_mon'] = len(obj_api.get_mons())\r
c_data.fields['num_mon_quorum'] = \\r
c_data.fields['osd_bytes_avail'] = total_avail_bytes\r
if total_bytes and total_avail_bytes:\r
c_data.fields['osd_bytes_used_percentage'] = \\r
- round(float(total_used_bytes) / float(total_bytes) * 100, 4)\r
+ round((float(total_used_bytes) / float(total_bytes)) * 100, 4)\r
else:\r
c_data.fields['osd_bytes_used_percentage'] = 0.0000\r
\r
e_osd.fields['name'] = n\r
e_osd.tags['cluster_id'] = cluster_id\r
e_osd.fields['agenthost'] = socket.gethostname()\r
- e_osd.tags['agenthost_domain_id'] = '%s_%s' % (cluster_id, socket.gethostname())\r
+ e_osd.tags['agenthost_domain_id'] = cluster_id\r
e_osd.tags['host_domain_id'] = '%s_%s' % (cluster_id, socket.gethostname())\r
for k in n_value.keys():\r
e_osd.fields[k] = str(n_value[k])\r
n_node = CephOsdTree()\r
n_node.tags['cluster_id'] = cluster_id\r
n_node.fields['agenthost'] = socket.gethostname()\r
- n_node.tags['agenthost_domain_id'] = '%s_%s' % (cluster_id, socket.gethostname())\r
+ n_node.tags['agenthost_domain_id'] = cluster_id\r
n_node.tags['host_domain_id'] = '%s_%s' % (cluster_id, socket.gethostname())\r
n_node.fields['children'] = ','.join(str(x) for x in node.get('children', []))\r
n_node.fields['type_id'] = str(node.get('type_id', ''))\r
d_osd.tags['cluster_id'] = cluster_id\r
d_osd.tags['osd_id'] = service_name[4:]\r
d_osd.fields['agenthost'] = socket.gethostname()\r
- d_osd.tags['agenthost_domain_id'] = \\r
- '%s_%s' % (cluster_id, d_osd.fields['agenthost'])\r
+ d_osd.tags['agenthost_domain_id'] = cluster_id\r
d_osd.tags['host_domain_id'] = \\r
'%s_%s' % (cluster_id,\r
obj_api.get_osd_hostname(d_osd.tags['osd_id']))\r
\r
if stat_bytes and stat_bytes_used:\r
d_osd.fields['stat_bytes_used_percentage'] = \\r
- round(float(stat_bytes_used) / float(stat_bytes) * 100, 4)\r
+ round((float(stat_bytes_used) / float(stat_bytes)) * 100, 4)\r
else:\r
d_osd.fields['stat_bytes_used_percentage'] = 0.0000\r
self.data.append(d_osd)\r
d_mon.tags['cluster_id'] = cluster_id\r
d_mon.tags['mon_id'] = service_name[4:]\r
d_mon.fields['agenthost'] = socket.gethostname()\r
- d_mon.tags['agenthost_domain_id'] = \\r
- '%s_%s' % (cluster_id, d_mon.fields['agenthost'])\r
+ d_mon.tags['agenthost_domain_id'] = cluster_id\r
d_mon.fields['num_sessions'] = \\r
perf_counts.get('mon.num_sessions', {}).get('value', 0)\r
d_mon.fields['session_add'] = \\r
d_pool.tags['cluster_id'] = cluster_id\r
d_pool.tags['pool_id'] = p_id\r
d_pool.fields['agenthost'] = socket.gethostname()\r
- d_pool.tags['agenthost_domain_id'] = \\r
- '%s_%s' % (cluster_id, d_pool.fields['agenthost'])\r
+ d_pool.tags['agenthost_domain_id'] = cluster_id\r
d_pool.fields['bytes_used'] = \\r
pool.get('stats', {}).get('bytes_used', 0)\r
d_pool.fields['max_avail'] = \\r
)\r
cluster_host = socket.gethostname()\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
)\r
cluster_host = socket.gethostname()\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (self._cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = self._cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
)\r
cluster_host = socket.gethostname()\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id, data\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
)\r
cluster_host = socket.gethostname()\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
d_node,\r
v)\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
'VmHostContainsVmDisk'\r
)\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
'OsdContainsPool'\r
)\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
'PoolContainsRBD'\r
)\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
'MetadataPoolContainsFS' if p_attr == 'metadata_pool' else 'DataPoolContainsFS'\r
)\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
'MDSContainsFS'\r
)\r
data.fields['agenthost'] = cluster_host\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['host'] = cluster_host\r
data.fields['cmd'] = str(cypher_cmd)\r
self.data.append(data)\r
cluster_id = obj_api.get_cluster_id()
c_data.fields['cluster_domain_id'] = str(cluster_id)
c_data.fields['agenthost'] = str(socket.gethostname())
- c_data.tags['agenthost_domain_id'] = \
- str('%s_%s' % (cluster_id, c_data.fields['agenthost']))
+ c_data.tags['agenthost_domain_id'] = cluster_id
c_data.fields['heartbeat_interval'] = \
int(obj_api.get_configuration('diskprediction_upload_metrics_interval'))
c_data.fields['host_ip'] = str(mgr_meta.get('addr', '127.0.0.1'))
c_data.tags['domain_id'] = str(cluster_id)
c_data.tags['host_domain_id'] = '%s_%s' % (str(cluster_id), str(socket.gethostname()))
c_data.fields['agenthost'] = str(socket.gethostname())
- c_data.tags['agenthost_domain_id'] = \
- str('%s_%s' % (cluster_id, c_data.fields['agenthost']))
+ c_data.tags['agenthost_domain_id'] = cluster_id
c_data.fields['name'] = 'Ceph mgr plugin'
self.data.append(c_data)
str('%s_%s'\r
% (cluster_id, osds_meta.get('hostname', 'None')))\r
d_data.fields['agenthost'] = str(socket.gethostname())\r
- d_data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, d_data.fields['agenthost']))\r
+ d_data.tags['agenthost_domain_id'] = cluster_id\r
serial_number = s_val.get('serial_number')\r
wwn = s_val.get('wwn', {})\r
wwpn = ''\r
str('%s_%s'\r
% (cluster_id, osds_meta.get('hostname', 'None')))\r
smart_data.fields['agenthost'] = str(socket.gethostname())\r
- smart_data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, smart_data.fields['agenthost']))\r
+ smart_data.tags['agenthost_domain_id'] = cluster_id\r
# parse attributes\r
- ata_smart = s_val.get('ata_smart_attributes', {})\r
- for attr in ata_smart.get('table', []):\r
- if attr.get('raw', {}).get('string'):\r
- if str(attr.get('raw', {}).get('string', '0')).isdigit():\r
- smart_data.fields['%s_raw' % attr.get('id')] = \\r
- int(attr.get('raw', {}).get('string', '0'))\r
+ protocol = s_val.get('device', {}).get('protocol', '')\r
+ if str(protocol).lower() == 'nvme':\r
+ nvme_info = s_val.get('nvme_smart_health_information_log', {})\r
+ smart_data['CriticalWarniing_raw'] = int(nvme_info.get('critical_warning', 0))\r
+ smart_data['CurrentDriveTemperature_raw'] = int(nvme_info.get('temperature', 0))\r
+ smart_data['AvailableSpare_raw'] = int(nvme_info.get('available_spare', 0))\r
+ smart_data['AvailableSpareThreshold_raw'] = int(nvme_info.get('available_spare_threshold', 0))\r
+ smart_data['PercentageUsed_raw'] = int(nvme_info.get('percentage_used', 0))\r
+ smart_data['DataUnitsRead_raw'] = int(nvme_info.get('data_units_read', 0))\r
+ smart_data['DataUnitsRead'] = int(nvme_info.get('data_units_written', 0))\r
+ smart_data['HostReadCommands_raw'] = int(nvme_info.get('host_reads', 0))\r
+ smart_data['HostWriteCommands_raw'] = int(nvme_info.get('host_writes', 0))\r
+ smart_data['ControllerBusyTime_raw'] = int(nvme_info.get('controller_busy_time', 0))\r
+ smart_data['PowerCycles_raw'] = int(nvme_info.get('power_cycles', 0))\r
+ smart_data['PowerOnHours_raw'] = int(nvme_info.get('power_on_hours', 0))\r
+ smart_data['UnsafeShutdowns_raw'] = int(nvme_info.get('unsafe_shutdowns', 0))\r
+ smart_data['MediaandDataIntegrityErrors_raw'] = int(nvme_info.get('media_errors', 0))\r
+ smart_data['ErrorInformationLogEntries'] = int(nvme_info.get('num_err_log_entries'))\r
+ nvme_addition = s_val.get('nvme_smart_health_information_add_log', {})\r
+ for k, v in nvme_addition.get("Device stats", {}).items():\r
+ if v.get('raw') is None:\r
+ continue\r
+ if isinstance(v.get('raw'), int):\r
+ smart_data[k] = int(v['raw'])\r
else:\r
- if str(attr.get('raw', {}).get('string', '0')).split(' ')[0].isdigit():\r
+ smart_data[k] = str(v.get('raw'))\r
+ else:\r
+ ata_smart = s_val.get('ata_smart_attributes', {})\r
+ for attr in ata_smart.get('table', []):\r
+ if attr.get('raw', {}).get('string'):\r
+ if str(attr.get('raw', {}).get('string', '0')).isdigit():\r
smart_data.fields['%s_raw' % attr.get('id')] = \\r
- int(attr.get('raw', {}).get('string', '0').split(' ')[0])\r
+ int(attr.get('raw', {}).get('string', '0'))\r
else:\r
- smart_data.fields['%s_raw' % attr.get('id')] = \\r
- attr.get('raw', {}).get('value', 0)\r
- smart_data.fields['raw_data'] = str(json.dumps(osds_smart[s_date]).replace("\"", "\'"))\r
- if s_val.get('temperature', {}).get('current') is not None:\r
- smart_data.fields['CurrentDriveTemperature_raw'] = \\r
- int(s_val['temperature']['current'])\r
- if s_val.get('temperature', {}).get('drive_trip') is not None:\r
- smart_data.fields['DriveTripTemperature_raw'] = \\r
- int(s_val['temperature']['drive_trip'])\r
- if s_val.get('elements_grown_list') is not None:\r
- smart_data.fields['ElementsInGrownDefectList_raw'] = int(s_val['elements_grown_list'])\r
- if s_val.get('power_on_time', {}).get('hours') is not None:\r
- smart_data.fields['9_raw'] = int(s_val['power_on_time']['hours'])\r
- if s_val.get('scsi_percentage_used_endurance_indicator') is not None:\r
- smart_data.fields['PercentageUsedEnduranceIndicator_raw'] = \\r
- int(s_val['scsi_percentage_used_endurance_indicator'])\r
- if s_val.get('scsi_error_counter_log') is not None:\r
- s_err_counter = s_val['scsi_error_counter_log']\r
- for s_key in s_err_counter.keys():\r
- if s_key.lower() in ['read', 'write']:\r
- for s1_key in s_err_counter[s_key].keys():\r
- if s1_key.lower() == 'errors_corrected_by_eccfast':\r
- smart_data.fields['ErrorsCorrectedbyECCFast%s_raw' % s_key.capitalize()] = \\r
- int(s_err_counter[s_key]['errors_corrected_by_eccfast'])\r
- elif s1_key.lower() == 'errors_corrected_by_eccdelayed':\r
- smart_data.fields['ErrorsCorrectedbyECCDelayed%s_raw' % s_key.capitalize()] = \\r
- int(s_err_counter[s_key]['errors_corrected_by_eccdelayed'])\r
- elif s1_key.lower() == 'errors_corrected_by_rereads_rewrites':\r
- smart_data.fields['ErrorCorrectedByRereadsRewrites%s_raw' % s_key.capitalize()] = \\r
- int(s_err_counter[s_key]['errors_corrected_by_rereads_rewrites'])\r
- elif s1_key.lower() == 'total_errors_corrected':\r
- smart_data.fields['TotalErrorsCorrected%s_raw' % s_key.capitalize()] = \\r
- int(s_err_counter[s_key]['total_errors_corrected'])\r
- elif s1_key.lower() == 'correction_algorithm_invocations':\r
- smart_data.fields['CorrectionAlgorithmInvocations%s_raw' % s_key.capitalize()] = \\r
- int(s_err_counter[s_key]['correction_algorithm_invocations'])\r
- elif s1_key.lower() == 'gigabytes_processed':\r
- smart_data.fields['GigaBytesProcessed%s_raw' % s_key.capitalize()] = \\r
- float(s_err_counter[s_key]['gigabytes_processed'])\r
- elif s1_key.lower() == 'total_uncorrected_errors':\r
- smart_data.fields['TotalUncorrectedErrors%s_raw' % s_key.capitalize()] = \\r
- int(s_err_counter[s_key]['total_uncorrected_errors'])\r
+ if str(attr.get('raw', {}).get('string', '0')).split(' ')[0].isdigit():\r
+ smart_data.fields['%s_raw' % attr.get('id')] = \\r
+ int(attr.get('raw', {}).get('string', '0').split(' ')[0])\r
+ else:\r
+ smart_data.fields['%s_raw' % attr.get('id')] = \\r
+ attr.get('raw', {}).get('value', 0)\r
+ smart_data.fields['raw_data'] = str(json.dumps(osds_smart[s_date]).replace("\"", "\'"))\r
+ if s_val.get('temperature', {}).get('current') is not None:\r
+ smart_data.fields['CurrentDriveTemperature_raw'] = \\r
+ int(s_val['temperature']['current'])\r
+ if s_val.get('temperature', {}).get('drive_trip') is not None:\r
+ smart_data.fields['DriveTripTemperature_raw'] = \\r
+ int(s_val['temperature']['drive_trip'])\r
+ if s_val.get('elements_grown_list') is not None:\r
+ smart_data.fields['ElementsInGrownDefectList_raw'] = int(s_val['elements_grown_list'])\r
+ if s_val.get('power_on_time', {}).get('hours') is not None:\r
+ smart_data.fields['9_raw'] = int(s_val['power_on_time']['hours'])\r
+ if s_val.get('scsi_percentage_used_endurance_indicator') is not None:\r
+ smart_data.fields['PercentageUsedEnduranceIndicator_raw'] = \\r
+ int(s_val['scsi_percentage_used_endurance_indicator'])\r
+ if s_val.get('scsi_error_counter_log') is not None:\r
+ s_err_counter = s_val['scsi_error_counter_log']\r
+ for s_key in s_err_counter.keys():\r
+ if s_key.lower() in ['read', 'write']:\r
+ for s1_key in s_err_counter[s_key].keys():\r
+ if s1_key.lower() == 'errors_corrected_by_eccfast':\r
+ smart_data.fields['ErrorsCorrectedbyECCFast%s_raw' % s_key.capitalize()] = \\r
+ int(s_err_counter[s_key]['errors_corrected_by_eccfast'])\r
+ elif s1_key.lower() == 'errors_corrected_by_eccdelayed':\r
+ smart_data.fields['ErrorsCorrectedbyECCDelayed%s_raw' % s_key.capitalize()] = \\r
+ int(s_err_counter[s_key]['errors_corrected_by_eccdelayed'])\r
+ elif s1_key.lower() == 'errors_corrected_by_rereads_rewrites':\r
+ smart_data.fields['ErrorCorrectedByRereadsRewrites%s_raw' % s_key.capitalize()] = \\r
+ int(s_err_counter[s_key]['errors_corrected_by_rereads_rewrites'])\r
+ elif s1_key.lower() == 'total_errors_corrected':\r
+ smart_data.fields['TotalErrorsCorrected%s_raw' % s_key.capitalize()] = \\r
+ int(s_err_counter[s_key]['total_errors_corrected'])\r
+ elif s1_key.lower() == 'correction_algorithm_invocations':\r
+ smart_data.fields['CorrectionAlgorithmInvocations%s_raw' % s_key.capitalize()] = \\r
+ int(s_err_counter[s_key]['correction_algorithm_invocations'])\r
+ elif s1_key.lower() == 'gigabytes_processed':\r
+ smart_data.fields['GigaBytesProcessed%s_raw' % s_key.capitalize()] = \\r
+ float(s_err_counter[s_key]['gigabytes_processed'])\r
+ elif s1_key.lower() == 'total_uncorrected_errors':\r
+ smart_data.fields['TotalUncorrectedErrors%s_raw' % s_key.capitalize()] = \\r
+ int(s_err_counter[s_key]['total_uncorrected_errors'])\r
\r
serial_number = s_val.get('serial_number')\r
wwn = s_val.get('wwn', {})\r
if osd_host not in hosts:\r
data = SAIHostFields()\r
data.fields['agenthost'] = str(socket.gethostname())\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['domain_id'] = \\r
str('%s_%s' % (cluster_id, osd_host))\r
data.fields['cluster_domain_id'] = str(cluster_id)\r
if mon_host not in hosts:\r
data = SAIHostFields()\r
data.fields['agenthost'] = str(socket.gethostname())\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['domain_id'] = \\r
str('%s_%s' % (cluster_id, mon_host))\r
data.fields['cluster_domain_id'] = str(cluster_id)\r
if mds_host not in hosts:\r
data = SAIHostFields()\r
data.fields['agenthost'] = str(socket.gethostname())\r
- data.tags['agenthost_domain_id'] = \\r
- str('%s_%s' % (cluster_id, data.fields['agenthost']))\r
+ data.tags['agenthost_domain_id'] = cluster_id\r
data.tags['domain_id'] = \\r
str('%s_%s' % (cluster_id, mds_host))\r
data.fields['cluster_domain_id'] = str(cluster_id)\r