summaryrefslogtreecommitdiff
path: root/ironic/common
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/common')
-rw-r--r--ironic/common/service.py34
1 files changed, 33 insertions, 1 deletions
diff --git a/ironic/common/service.py b/ironic/common/service.py
index e0a8f1852..db83c147a 100644
--- a/ironic/common/service.py
+++ b/ironic/common/service.py
@@ -15,15 +15,29 @@
# under the License.
from oslo_log import log
+try:
+ from oslo_reports import guru_meditation_report as gmr
+ from oslo_reports import opts as gmr_opts
+except ImportError:
+ gmr = None
from oslo_service import service
from ironic.common import config
+from ironic.common import profiler
from ironic.conf import CONF
from ironic.conf import opts
from ironic import objects
+from ironic import version
-def prepare_service(argv=None):
+LOG = log.getLogger(__name__)
+
+
+def prepare_command(argv=None):
+ """Prepare any Ironic command for execution.
+
+ Sets up configuration and logging, registers objects.
+ """
argv = [] if argv is None else argv
log.register_options(CONF)
opts.update_opt_defaults()
@@ -35,5 +49,23 @@ def prepare_service(argv=None):
objects.register_all()
+def prepare_service(name, argv=None, conf=CONF):
+ """Prepare an Ironic service executable.
+
+ In addition to what `prepare_command` does, set up guru meditation
+ reporting and profiling.
+ """
+ prepare_command(argv)
+
+ if gmr is not None:
+ gmr_opts.set_defaults(CONF)
+ gmr.TextGuruMeditation.setup_autorun(version, conf=CONF)
+ else:
+ LOG.debug('Guru meditation reporting is disabled '
+ 'because oslo.reports is not installed')
+
+ profiler.setup(name, CONF.host)
+
+
def process_launcher():
return service.ProcessLauncher(CONF, restart_method='mutate')