Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A few fixes for my environment #1

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
A few fixes for my environment:
1. My `perccli` omits binary for the firmware version, which breaks JSON parsing.
   This fixes that.
2. I actually have a machine that needs `storcli` and `perccli` both.
   This adds `cmd=` to each metric to show which command generated it.
   Shouldn't cause any problems with existing deployments (I hope).
Neale Pickett committed Aug 27, 2019

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 846f54a9000db6c94fc993ad21ffe3bbb84c680e
34 changes: 19 additions & 15 deletions storcli.py
Original file line number Diff line number Diff line change
@@ -52,6 +52,8 @@ def main(args):
data = json.loads(get_storcli_json(args.storcli_path))
end = time.time()

cmd = os.path.split(args.storcli_path)[-1]

for ctrl in data['Controllers']:
dg_vd_map = {'-': None}

@@ -93,53 +95,53 @@ def main(args):

print('# HELP megaraid_scrape_duration_seconds Scrape duration')
print('# TYPE megaraid_scrape_duration_seconds gauge')
print('megaraid_scrape_duration_seconds {:f}'.format(end - start))
print('megaraid_scrape_duration_seconds{{cmd="{cmd}"}} {duration:f}'.format(cmd=cmd, duration=end - start))

print('# HELP megaraid_controllers MegaRAID controllers')
print('# TYPE megaraid_controllers gauge')
for ctrl in controllers:
print('megaraid_controllers{{controller="{controller}",model="{model}"}} 1'.format(**ctrl))
print('megaraid_controllers{{cmd="{cmd}",controller="{controller}",model="{model}"}} 1'.format(cmd=cmd, **ctrl))

print('# HELP megaraid_controller_memory_errors MegaRAID controller memory errors')
print('# TYPE megaraid_controller_memory_errors counter')
for ctrl in controllers:
print('megaraid_controller_memory_errors{{controller="{controller}",correctable="y"}} '
'{errors_correctable}'.format(**ctrl))
print('megaraid_controller_memory_errors{{controller="{controller}",correctable="n"}} '
'{errors_uncorrectable}'.format(**ctrl))
print('megaraid_controller_memory_errors{{cmd="{cmd}",controller="{controller}",correctable="y"}} '
'{errors_correctable}'.format(cmd=cmd, **ctrl))
print('megaraid_controller_memory_errors{{cmd="{cmd}",controller="{controller}",correctable="n"}} '
'{errors_uncorrectable}'.format(cmd=cmd, **ctrl))

print('# HELP megaraid_controller_bbu MegaRAID controller BBU presence')
print('# TYPE megaraid_controller_bbu gauge')
for ctrl in controllers:
print('megaraid_controller_bbu{{controller="{controller}"}} {bbu}'.format(**ctrl))
print('megaraid_controller_bbu{{cmd="{cmd}",controller="{controller}"}} {bbu}'.format(cmd=cmd, **ctrl))

print('# HELP megaraid_roc_temp_celcius MegaRAID controller ROC temperature')
print('# TYPE megaraid_roc_temp_celcius gauge')
for ctrl in controllers:
print('megaraid_roc_temp_celcius{{controller="{controller}"}} {roc_temp}'.format(**ctrl))
print('megaraid_roc_temp_celcius{{cmd="{cmd}",controller="{controller}"}} {roc_temp}'.format(cmd=cmd, **ctrl))

print('# HELP megaraid_virtual_drives MegaRAID virtual drives')
print('# TYPE megaraid_virtual_drives gauge')
for vd in vds:
print('megaraid_virtual_drives{{controller="{controller}",vd="{vd}",'
'type="{type}",state="{state}"}} 1'.format(**vd))
print('megaraid_virtual_drives{{cmd="{cmd}",controller="{controller}",vd="{vd}",'
'type="{type}",state="{state}"}} 1'.format(cmd=cmd, **vd))

print('# HELP megaraid_vd_size_bytes MegaRAID virtual drive size')
print('# TYPE megaraid_vd_size_bytes gauge')
for vd in vds:
print('megaraid_vd_size_bytes{{controller="{controller}",vd="{vd}"}} {size}'.format(**vd))
print('megaraid_vd_size_bytes{{cmd="{cmd}",controller="{controller}",vd="{vd}"}} {size}'.format(cmd=cmd, **vd))

print('# HELP megaraid_physical_drives MegaRAID physical drives')
print('# TYPE megaraid_physical_drives gauge')
for pd in pds:
print('megaraid_physical_drives{{controller="{controller}",enclosure="{enclosure}",'
'slot="{slot}",vd="{vd}",state="{state}"}} 1'.format(**pd))
print('megaraid_physical_drives{{cmd="{cmd}",controller="{controller}",enclosure="{enclosure}",'
'slot="{slot}",vd="{vd}",state="{state}"}} 1'.format(cmd=cmd, **pd))

print('# HELP megaraid_pd_size_bytes MegaRAID physical drive size')
print('# TYPE megaraid_pd_size_bytes gauge')
for pd in pds:
print('megaraid_pd_size_bytes{{controller="{controller}",enclosure="{enclosure}",'
'slot="{slot}"}} {size}'.format(**pd))
print('megaraid_pd_size_bytes{{cmd="{cmd}",controller="{controller}",enclosure="{enclosure}",'
'slot="{slot}"}} {size}'.format(cmd=cmd, **pd))


def get_storcli_json(storcli_path):
@@ -156,6 +158,8 @@ def get_storcli_json(storcli_path):
'{"Controllers":[{"Command Status": {"Status": "Failure", '
'"Description": "No Controller found"}}]}'
)
# Trim crap
output_json = re.sub(r'[\x00-\x1f\x7f-\xff]', '', output_json)

return output_json