|
Server : Apache System : Linux cvar2.toservers.com 3.10.0-962.3.2.lve1.5.73.el7.x86_64 #1 SMP Wed Aug 24 21:31:23 UTC 2022 x86_64 User : njnconst ( 1116) PHP Version : 8.4.18 Disable Function : NONE Directory : /proc/self/root/opt/alt-old/python37/lib/python3.7/site-packages/lvestats/core/ |
Upload File : |
# coding=utf-8
#
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
from __future__ import absolute_import
import imp
import inspect
import logging
import os
from lvestats.core.plugin import LveStatsPlugin
class PluginLoader(object):
def check_incorrect_symlink(self, path):
"""
Check correcting symlink. If symlink incorrect return True
:param str path: path to file or symlink
:return bool:
"""
if os.path.islink(path) and not os.path.exists(os.path.realpath(path)):
self.log.warning('Incorrect symlink %s', path)
return True
def __init__(self, plugins_folder):
self.log = logging.getLogger(__name__)
classes_loaded = []
if os.path.isdir(plugins_folder):
file_names = (fn for fn in os.listdir(plugins_folder) if fn.endswith('.py'))
for file_name in file_names:
imp.acquire_lock()
try:
module_name, _ = os.path.splitext(file_name)
full_path = os.path.join(plugins_folder, file_name)
if self.check_incorrect_symlink(full_path):
continue
module = imp.load_source(module_name, full_path)
# Load only subclasses of LveStatsPlugin
classes = [x for x in list(module.__dict__.values())
if inspect.isclass(x) and issubclass(x, LveStatsPlugin) and x is not LveStatsPlugin]
if not classes:
self.log.error('No classes to load found in %s', file_name)
classes_loaded.extend(classes)
except Exception as ex:
self.log.exception('Unable to load %s due to exception %s', file_name, ex)
finally:
imp.release_lock()
self.plugins = classes_loaded