Add logging infrastructure to tuna
This commit is contained in:
parent
04d02bece7
commit
bf664cde78
31
tuna-Add-cleanlogs-rule-to-Makefile.patch
Normal file
31
tuna-Add-cleanlogs-rule-to-Makefile.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From 681304a9a57a9c2b05fcc2cc372e3d921b5ff415 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Leshchinsky <lleshchi@redhat.com>
|
||||||
|
Date: Tue, 10 May 2022 11:59:08 -0400
|
||||||
|
Subject: [PATCH 2/2] tuna: Add cleanlogs rule to Makefile
|
||||||
|
|
||||||
|
The logging infrastructure creates directories that contain log files.
|
||||||
|
It may be tedious for users to manually remove these directories and
|
||||||
|
files.
|
||||||
|
|
||||||
|
Add a Makefile rule that allows for easy removal of multiple logging
|
||||||
|
directories. The rule can be called via 'make cleanlogs'.
|
||||||
|
|
||||||
|
Signed-off-by: Leah Leshchinsky <lleshchi@redhat.com>
|
||||||
|
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/Makefile b/Makefile
|
||||||
|
index 2c72feaa398c..50ded3985743 100644
|
||||||
|
--- a/Makefile
|
||||||
|
+++ b/Makefile
|
||||||
|
@@ -45,4 +45,8 @@ tags:
|
||||||
|
cleantags:
|
||||||
|
rm -f tags
|
||||||
|
|
||||||
|
+.PHONY: cleanlogs
|
||||||
|
+cleanlogs:
|
||||||
|
+ rm -rf tuna-20*
|
||||||
|
+
|
||||||
|
clean: pyclean rpmclean
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
159
tuna-Add-logging-infrastructure-to-tuna-cmd.patch
Normal file
159
tuna-Add-logging-infrastructure-to-tuna-cmd.patch
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
From 85330a8ab1afec5370676e7c3d753a4528f24e6f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Leah Leshchinsky <lleshchi@redhat.com>
|
||||||
|
Date: Tue, 10 May 2022 11:59:07 -0400
|
||||||
|
Subject: [PATCH 1/2] tuna: Add logging infrastructure to tuna-cmd
|
||||||
|
|
||||||
|
Currently, tuna does not have an easy way for developers and maintainers
|
||||||
|
to access necessary information about the state of the program.
|
||||||
|
|
||||||
|
Add logging infrastructure that allows the user to specify, at the
|
||||||
|
command line, what level of logging to print from the following levels:
|
||||||
|
(notset, debug, info, warning, error, critical). Levels may also be
|
||||||
|
specified numerically, ranging from 0-5.
|
||||||
|
|
||||||
|
A directory will be created with the current date and test run.
|
||||||
|
Logging statements will print to a log file within the created directory,
|
||||||
|
and can be specified with the '-L' and '--logging' flags. The '-D' and
|
||||||
|
'--debug' flags will print all debug information to the console.
|
||||||
|
|
||||||
|
Logging of other files outside of tuna-cmd.py can be implemented by
|
||||||
|
importing the logging directory and adding the necessary logging
|
||||||
|
statments.
|
||||||
|
|
||||||
|
Signed-off-by: Leah Leshchinsky <lleshchi@redhat.com>
|
||||||
|
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||||
|
|
||||||
|
diff --git a/tuna-cmd.py b/tuna-cmd.py
|
||||||
|
index ac21481df554..57b62298c48a 100755
|
||||||
|
--- a/tuna-cmd.py
|
||||||
|
+++ b/tuna-cmd.py
|
||||||
|
@@ -29,6 +29,50 @@ import ethtool
|
||||||
|
import tuna.tuna_sched as tuna_sched
|
||||||
|
import procfs
|
||||||
|
from tuna import tuna, sysfs
|
||||||
|
+import logging
|
||||||
|
+import time
|
||||||
|
+
|
||||||
|
+def get_loglevel(level):
|
||||||
|
+ if level.isdigit() and int(level) in range(0,5):
|
||||||
|
+ # logging built-in module levels:
|
||||||
|
+ # 0 - NOTSET
|
||||||
|
+ # 10 - DEBUG
|
||||||
|
+ # 20 - INFO,
|
||||||
|
+ # 30 - WARNING
|
||||||
|
+ # 40 - ERROR
|
||||||
|
+ return int(level) * 10
|
||||||
|
+ level_str = level.upper()
|
||||||
|
+ if level_str == "CRITICAL":
|
||||||
|
+ raise ValueError("CRITICAL level is not supported by tuna")
|
||||||
|
+ return level_str
|
||||||
|
+
|
||||||
|
+def setup_logging(logger_name):
|
||||||
|
+
|
||||||
|
+ logger = logging.getLogger(logger_name)
|
||||||
|
+ logger.setLevel(logging.DEBUG)
|
||||||
|
+ logger.propagate = False
|
||||||
|
+ return logger
|
||||||
|
+
|
||||||
|
+def add_handler(loglevel, tofile=False):
|
||||||
|
+
|
||||||
|
+ formatter = logging.Formatter('[%(levelname)s] %(message)s')
|
||||||
|
+
|
||||||
|
+ if tofile:
|
||||||
|
+ lognum = 1
|
||||||
|
+ date = time.strftime("%Y%m%d")
|
||||||
|
+ while os.path.exists("tuna-{}-{}".format(date, lognum)):
|
||||||
|
+ lognum += 1
|
||||||
|
+
|
||||||
|
+ path = "tuna-{}-{}/log/Log".format(date,lognum)
|
||||||
|
+ os.makedirs(os.path.dirname(path), exist_ok=True, mode=0o777)
|
||||||
|
+ handler = logging.FileHandler(path)
|
||||||
|
+ else:
|
||||||
|
+ handler = logging.StreamHandler(sys.stderr)
|
||||||
|
+
|
||||||
|
+ handler.setFormatter(formatter)
|
||||||
|
+ handler.setLevel(loglevel)
|
||||||
|
+
|
||||||
|
+ return handler
|
||||||
|
|
||||||
|
try:
|
||||||
|
import inet_diag
|
||||||
|
@@ -61,6 +105,7 @@ def usage():
|
||||||
|
_('Operation will affect children threads')))
|
||||||
|
print(fmt % ('-d, --disable_perf',
|
||||||
|
_('Explicitly disable usage of perf in GUI for process view')))
|
||||||
|
+ print(fmt % ('-D, --debug', _('Print DEBUG level logging details to console')))
|
||||||
|
print(fmt % ('-f, --filter',
|
||||||
|
_('Display filter the selected entities')))
|
||||||
|
print(fmt % ('-i, --isolate', _('Move all allowed threads and IRQs away from %(cpulist)s') %
|
||||||
|
@@ -69,6 +114,8 @@ def usage():
|
||||||
|
{"cpulist": _('CPU-LIST')}))
|
||||||
|
print(fmt % ('-K, --no_kthreads',
|
||||||
|
_('Operations will not affect kernel threads')))
|
||||||
|
+ print(fmt % ('-L, --logging',
|
||||||
|
+ _('Log application details to log file for given LOG-LEVEL')))
|
||||||
|
print(fmt % ('-m, --move', _('Move selected entities to %(cpulist)s') %
|
||||||
|
{"cpulist": _('CPU-LIST')}))
|
||||||
|
print(fmt % ('-N, --nohz_full',
|
||||||
|
@@ -490,14 +537,14 @@ def main():
|
||||||
|
|
||||||
|
i18n_init()
|
||||||
|
try:
|
||||||
|
- short = "a:c:dCfgGhiIKlmNp:PQq:r:R:s:S:t:UvWx"
|
||||||
|
+ short = "a:c:dDCfgGhiIKlmNp:PQq:r:R:s:S:t:UvWxL:"
|
||||||
|
long = ["cpus=", "affect_children", "filter", "gui", "help",
|
||||||
|
"isolate", "include", "no_kthreads", "move", "nohz_full",
|
||||||
|
"show_sockets", "priority=", "show_threads",
|
||||||
|
"show_irqs", "irqs=",
|
||||||
|
"save=", "sockets=", "threads=", "no_uthreads",
|
||||||
|
"version", "what_is", "spread", "cgroup", "config_file_apply=",
|
||||||
|
- "config_file_list", "run=", "refresh=", "disable_perf"]
|
||||||
|
+ "config_file_list", "run=", "refresh=", "disable_perf", "logging=", "debug"]
|
||||||
|
if have_inet_diag:
|
||||||
|
short += "n"
|
||||||
|
long.append("show_sockets")
|
||||||
|
@@ -512,8 +559,10 @@ def main():
|
||||||
|
uthreads = True
|
||||||
|
cgroups = False
|
||||||
|
cpu_list = None
|
||||||
|
+ debug = False
|
||||||
|
irq_list = None
|
||||||
|
irq_list_str = None
|
||||||
|
+ log = False
|
||||||
|
rtprio = None
|
||||||
|
policy = None
|
||||||
|
thread_list = []
|
||||||
|
@@ -529,6 +578,30 @@ def main():
|
||||||
|
if o in ("-h", "--help"):
|
||||||
|
usage()
|
||||||
|
return
|
||||||
|
+ if o in ("-D", "--debug"):
|
||||||
|
+ if debug:
|
||||||
|
+ my_logger.warning("Debugging already set")
|
||||||
|
+ continue
|
||||||
|
+ debug = True
|
||||||
|
+ if not log:
|
||||||
|
+ my_logger = setup_logging("my_logger")
|
||||||
|
+ my_logger.addHandler(add_handler("DEBUG", tofile=False))
|
||||||
|
+ my_logger.info("Debug option set")
|
||||||
|
+ if o in ("-L", "--logging"):
|
||||||
|
+ if log:
|
||||||
|
+ my_logger.warning("Logging already set")
|
||||||
|
+ continue
|
||||||
|
+ log = True
|
||||||
|
+ loglevel = get_loglevel(a)
|
||||||
|
+ if not debug:
|
||||||
|
+ my_logger = setup_logging("my_logger")
|
||||||
|
+ try:
|
||||||
|
+ my_logger.addHandler(add_handler(loglevel, tofile=True))
|
||||||
|
+ except ValueError as e:
|
||||||
|
+ print(e, "tuna: --logging requires valid logging level\n")
|
||||||
|
+ print("Valid log levels: NOTSET, DEBUG, INFO, WARNING, ERROR")
|
||||||
|
+ print("Log levels may be specified numerically (0-4)")
|
||||||
|
+ my_logger.info("Logging option set")
|
||||||
|
if o in ("-a", "--config_file_apply"):
|
||||||
|
apply_config(a)
|
||||||
|
elif o in ("-l", "--config_file_list"):
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
11
tuna.spec
11
tuna.spec
@ -1,6 +1,6 @@
|
|||||||
Name: tuna
|
Name: tuna
|
||||||
Version: 0.17
|
Version: 0.17
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Summary: Application tuning GUI & command line utility
|
Summary: Application tuning GUI & command line utility
|
||||||
URL: https://git.kernel.org/pub/scm/utils/tuna/tuna.git
|
URL: https://git.kernel.org/pub/scm/utils/tuna/tuna.git
|
||||||
@ -18,6 +18,8 @@ Patch1: tuna-Fix-ModuleNotFoundError.patch
|
|||||||
Patch2: tuna-Fix-typo-for-variable-parm.patch
|
Patch2: tuna-Fix-typo-for-variable-parm.patch
|
||||||
Patch3: tuna-Handle-get_policy_and_rtprio-exceptions.patch
|
Patch3: tuna-Handle-get_policy_and_rtprio-exceptions.patch
|
||||||
Patch4: tuna-Remove-finally-block-in-get_policy_and_rtprio.patch
|
Patch4: tuna-Remove-finally-block-in-get_policy_and_rtprio.patch
|
||||||
|
Patch5: tuna-Add-logging-infrastructure-to-tuna-cmd.patch
|
||||||
|
Patch6: tuna-Add-cleanlogs-rule-to-Makefile.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Provides interface for changing scheduler and IRQ tunables, at whole CPU and at
|
Provides interface for changing scheduler and IRQ tunables, at whole CPU and at
|
||||||
@ -34,6 +36,8 @@ installed.
|
|||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%py3_build
|
%py3_build
|
||||||
@ -75,6 +79,11 @@ done
|
|||||||
%{_datadir}/polkit-1/actions/org.tuna.policy
|
%{_datadir}/polkit-1/actions/org.tuna.policy
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed May 11 2022 Leah Leshchinsky <lleshchi@redhat.com> - 0.17-4
|
||||||
|
- Add logging infrastructure to tuna cmd
|
||||||
|
- Add cleanlogs rule to Makefile
|
||||||
|
Resolves: rhbz#2062881
|
||||||
|
|
||||||
* Mon Apr 11 2022 Leah Leshchinsky <lleshchi@redhat.com> - 0.17-3
|
* Mon Apr 11 2022 Leah Leshchinsky <lleshchi@redhat.com> - 0.17-3
|
||||||
- Fix typo for variable parm
|
- Fix typo for variable parm
|
||||||
- Handle get_policy_and_rtprio exceptions
|
- Handle get_policy_and_rtprio exceptions
|
||||||
|
Loading…
Reference in New Issue
Block a user