Skip to content

Commit

Permalink
Add some helper tools for viewing saved summaries
Browse files Browse the repository at this point in the history
  • Loading branch information
dosaboy committed Jan 24, 2025
1 parent 5a351cb commit b59c09f
Show file tree
Hide file tree
Showing 9 changed files with 122 additions and 1 deletion.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,4 @@ dependencies = {file = ["requirements.txt"]}

[project.scripts]
hotsos = "hotsos.cli:main"
hotsos-view = "hotsos.tools.summary.view:main"
3 changes: 3 additions & 0 deletions scripts/hotsos-view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
export PYTHONPATH=$PYTHONPATH:$(dirname $0)/..
$(dirname $0)/../tools/summary/view.py $@
Empty file added tools/__init__.py
Empty file.
Empty file added tools/summary/__init__.py
Empty file.
15 changes: 15 additions & 0 deletions tools/summary/diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
#
# Description: diff two hotsos summary outputs.
#
src=${1:-""}
dst=${2:-""}
format={3:-yaml}
if [[ -z $src ]] || [[ -z $dst ]]; then
echo "USAGE: `basename $0` <src dir> <dst dir>"
exit
fi

for f in `find $src -maxdepth 1 -name *summary.${format}`; do
diff -y $dst/$f $f| less
done
12 changes: 12 additions & 0 deletions tools/summary/issues-and-bugs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash
#
# Description: display only bugs and issues from summary outputs.
#
path=${1:-hotsos-output}
for f in `find $path -maxdepth 1 -name *summary.json`; do
clear
jq -r '"\nHostname: " + .system.hostname,
"Issues:", (.[]|to_entries[]|select(.key=="potential-issues")|.value|to_entries[]|.key, .value),
"Bugs:", (.[]|to_entries[]|select(.key=="known-bugs")|.value|to_entries[]|.key, .value)' $f
read -p "Next? [ENTER]"
done
8 changes: 8 additions & 0 deletions tools/summary/less
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/bin/bash
#
# Description: less each hotsos summary in path
#
path=${1:-hotsos-output}
for f in `find $path -maxdepth 1 -name *summary.yaml`; do
less $f
done
77 changes: 77 additions & 0 deletions tools/summary/view.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/usr/bin/env python3
"""
Create a structured summary of key information from hotsos summary outputs.
"""
import glob
import os
import json
import sys
import subprocess

from hotsos.core import plugintools


def find_output(root):
if root is None:
root = '.'

for entry in os.listdir(root):
if not os.path.isdir(entry):
continue

results = glob.glob(os.path.join(entry, '*.json'))
if results:
return results[0]


if __name__ == "__main__":
if len(sys.argv) > 1:
path = os.path.join(sys.argv[1], '*.json')
else:
path = None

path = find_output(None)
with open(path) as fd:
subprocess.call(['clear'])
s = json.loads(fd.read())
print("host: {} ".format(s['system']['hostname']))
print("date: {}".format(s['system']['date']))
_enabled = []
_services = {}
_has_bugs = {}
_has_potential_issues = {}
for plugin in plugintools.PLUGINS:
if plugin in s:
_enabled.append(plugin)
if 'services' in s[plugin]:
enabled = s[plugin]['services']
enabled = enabled.get('systemd', {})
_services[plugin] = enabled.get('enabled')

if 'known-bugs' in s[plugin]:
_has_bugs.update(s[plugin]['known-bugs'])

if 'potential-issues' in s[plugin]:
_has_potential_issues.update(
s[plugin]['potential-issues'])

# print("enabled: {}".format(', '.join(sorted(_enabled))))
print("services:")
for plugin, svcs in _services.items():
print(" {}: {}".format(plugin, ', '.join(svcs)))

if _has_bugs:
print("bugs:")
for btype, content in _has_bugs.items():
print(" {}: {}\n".format(btype, '\n'.join(content)))

if _has_potential_issues:
print("issues:")
for btype, content in _has_potential_issues.items():
print(" {}:".format(btype))
for msg in content:
print(" {}".format(msg))

input("\nNext? [ENTER]")

print("")
7 changes: 6 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,12 @@ commands =
commands = sphinx-build -j auto -d {toxinidir}/doc/build/doctrees -b html {toxinidir}/doc/source doc/build/html

[testenv:bashate]
commands = bashate --verbose {toxinidir}/tools/test/functest.sh
allowlist_externals = bashate
commands = bashate --verbose {toxinidir}/build.sh \
{toxinidir}/tools/test/functest.sh \
{toxinidir}/tools/summary/diff \
{toxinidir}/tools/summary/less \
{toxinidir}/tools/summary/issues-and-bugs

[testenv:yamllint]
commands = yamllint -c yamllintrc {toxinidir}/hotsos {toxinidir}/tests {posargs}
Expand Down

0 comments on commit b59c09f

Please sign in to comment.