Uname:
Linux yisu-647059427c03a 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64
Software:
nginx/1.22.1
PHP version:
7.3.31 [ PHP INFO ] PHP os:
Linux
Server Ip:
103.146.158.90
Your Ip:
216.73.216.141
User:
www (1000) | Group:
www (1000)
Safe Mode:
OFF
Disable Function:
passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
import interfaces
import inspect
import tuned.patterns
class ExportsController(tuned.patterns.Singleton):
"""
Controls and manages object interface exporting.
"""
def __init__(self):
super(self.__class__, self).__init__()
self._exporters = []
self._objects = []
self._exports_initialized = False
def register_exporter(self, instance):
"""Register objects exporter."""
self._exporters.append(instance)
def register_object(self, instance):
"""Register object to be exported."""
self._objects.append(instance)
def _is_exportable_method(self, method):
"""Check if method was marked with @exports.export wrapper."""
return inspect.ismethod(method) and hasattr(method, "export_params")
def _is_exportable_signal(self, method):
"""Check if method was marked with @exports.signal wrapper."""
return inspect.ismethod(method) and hasattr(method, "signal_params")
def _export_method(self, method):
"""Register method to all exporters."""
for exporter in self._exporters:
args = method.export_params[0]
kwargs = method.export_params[1]
exporter.export(method, *args, **kwargs)
def _export_signal(self, method):
"""Register signal to all exporters."""
for exporter in self._exporters:
args = method.signal_params[0]
kwargs = method.signal_params[1]
exporter.signal(method, *args, **kwargs)
def _initialize_exports(self):
if self._exports_initialized:
return
for instance in self._objects:
for name, method in inspect.getmembers(instance, self._is_exportable_method):
self._export_method(method)
for name, method in inspect.getmembers(instance, self._is_exportable_signal):
self._export_signal(method)
self._exports_initialized = True
def start(self):
"""Start the exports."""
self._initialize_exports()
for exporter in self._exporters:
exporter.start()
def stop(self):
"""Stop the exports."""
for exporter in self._exporters:
exporter.stop()