/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.toolkitbridge.internal; import de.rcenvironment.core.utils.common.VersionUtils; import de.rcenvironment.toolkit.core.api.Toolkit; import de.rcenvironment.toolkit.core.api.ToolkitException; import de.rcenvironment.toolkit.core.setup.ToolkitSetup; import de.rcenvironment.toolkit.modules.concurrency.setup.ConcurrencyModule; import de.rcenvironment.toolkit.modules.concurrency.setup.ConcurrencyModuleConfiguration; import de.rcenvironment.toolkit.modules.statistics.api.StatisticsFilterLevel; import de.rcenvironment.toolkit.modules.statistics.setup.StatisticsModule; /** * Defines the RCE-specific {@link Toolkit} setup, ie the selection of toolkit modules and their configuration. * * @author Robert Mischke */ public final class LiveToolkitConfiguration extends DefaultToolkitConfiguration { // system property to override the default thread pool size private static final String SYSTEM_PROPERTY_COMMMON_THREAD_POOL_SIZE = "rce.threadpool.common.size"; // system property to schedule a task that periodically logs thread pool information (similar to the "tasks -a" command); // this is useful in cases where the main pool is too congested to execute new console commands private static final String SYSTEM_PROPERTY_ENABLE_PERIODIC_DEBUG_TASK_LOGGING = "rce.threadpool.enableDebugLogging"; // TODO >=8.0.0: make this configurable via property, too? private static final int PERIODIC_DEBUG_TASK_LOGGING_INTERVAL_MSEC = 60 * 1000; @Override public void configure(ToolkitSetup setup) throws ToolkitException { super.configure(setup); // inherit default modules // set concurrency parameters applyConcurrencySettings(setup.configureModule(ConcurrencyModule.class)); // // set statistics tracking level final StatisticsFilterLevel statisticsLevel; if (VersionUtils.isReleaseOrReleaseCandidateBuild()) { statisticsLevel = StatisticsFilterLevel.RELEASE; } else { statisticsLevel = StatisticsFilterLevel.DEVELOPMENT; // edit here to temporarily set DEBUG level } setup.configureModule(StatisticsModule.class).setStatisticsFilterLevel(statisticsLevel); } private void applyConcurrencySettings(ConcurrencyModuleConfiguration configuration) { if (System.getProperty(SYSTEM_PROPERTY_COMMMON_THREAD_POOL_SIZE) != null) { int commonPoolSize = Integer.parseInt(System.getProperty(SYSTEM_PROPERTY_COMMMON_THREAD_POOL_SIZE)); if (commonPoolSize < 1) { throw new IllegalArgumentException("Invalid thread pool size value: " + commonPoolSize); } configuration.setThreadPoolSize(commonPoolSize); } configuration.setThreadPoolName("MainThreadPool"); if (System.getProperty(SYSTEM_PROPERTY_ENABLE_PERIODIC_DEBUG_TASK_LOGGING) != null) { configuration.setPeriodicTaskLoggingIntervalMsec(PERIODIC_DEBUG_TASK_LOGGING_INTERVAL_MSEC); } } }