package edu.umd.rhsmith.diads.meater.core.config; import java.util.logging.Level; import edu.umd.rhsmith.diads.meater.core.app.MEaterInitializer; import edu.umd.rhsmith.diads.meater.core.config.props.DoubleProperty; import edu.umd.rhsmith.diads.meater.core.config.props.IntProperty; import edu.umd.rhsmith.diads.meater.core.config.props.LongProperty; import edu.umd.rhsmith.diads.meater.core.config.props.StringProperty; public class MEaterGeneralConfig extends ConfigUnit implements MEaterInitializer { public MEaterGeneralConfig() { super(); this.registerConfigProperty(loggingLevel); this.registerConfigProperty(loggingMaxLogs); this.registerConfigProperty(loggingMaxSizeMb); this.registerConfigProperty(mailSmtp); this.registerConfigProperty(mailFromEmail); this.registerConfigProperty(mailToEmail); this.registerConfigProperty(resourceLimitLogThreshold); this.registerConfigProperty(resourceLimitLogIntervalS); this.registerConfigProperty(resourceLimitEmailThreshold); this.registerConfigProperty(resourceLimitEmailIntervalS); this.registerConfigProperty(threadPoolCoreSize); this.registerConfigProperty(threadPoolMinSize); this.registerConfigProperty(threadPoolKeepAliveTimeS); this.registerConfigProperty(resourceLimitRejectionThreshold); } /* * -------------------------------- * Config properties * -------------------------------- */ // logging info private static final String CKEY_LOGGING_MAX_SIZE_MB = "loggingMaxSizeMb"; private static final int DEFAULT_LOGGING_MAX_SIZE_MB = 10; private static final String UINAME_LOGGING_MAX_SIZE_MB = "Maximum log size (mb)"; private static final String UIDESC_LOGGING_MAX_SIZE_MB = "Maximum size of a TwEater log file."; private final IntProperty loggingMaxSizeMb = new IntProperty( CKEY_LOGGING_MAX_SIZE_MB, DEFAULT_LOGGING_MAX_SIZE_MB, UINAME_LOGGING_MAX_SIZE_MB, UIDESC_LOGGING_MAX_SIZE_MB); private static final String CKEY_LOGGING_LEVEL = "loggingLevel"; private static final String DEFAULT_LOGGING_LEVEL = Level.INFO.toString(); private static final String UINAME_LOGGING_LEVE = "Logging level"; private static final String UIDESC_LOGGING_LEVE = "Granularity of log messages; valid values (from rarest to most frequent) are: SEVERE, WARNING, INFO, FINE, FINER, FINEST"; private final StringProperty loggingLevel = new StringProperty( CKEY_LOGGING_LEVEL, DEFAULT_LOGGING_LEVEL, UINAME_LOGGING_LEVE, UIDESC_LOGGING_LEVE); private static final String CKEY_LOGGING_MAX_LOGS = "loggingMaxLogs"; private static final int DEFAULT_LOGGING_MAX_LOGS = 10; private static final String UINAME_LOGGING_MAX_LOGS = "Maximum log files"; private static final String UIDESC_LOGGING_MAX_LOGS = "Maximum number of Tweater log files. After this many logs reach the maximum size, the first file will be overwritten."; private final IntProperty loggingMaxLogs = new IntProperty( CKEY_LOGGING_MAX_LOGS, DEFAULT_LOGGING_MAX_LOGS, UINAME_LOGGING_MAX_LOGS, UIDESC_LOGGING_MAX_LOGS); // email doodads private static final String CKEY_MAIL_STMP = "mailSmtp"; private static final String DEFAULT_MAIL_STMP = ""; private static final String UINAME_MAIL_FROM_EMAIL = "Mail-from"; private static final String UIDESC_MAIL_FROM_EMAIL = "Email address from which email alerts will originate"; private final StringProperty mailSmtp = new StringProperty(CKEY_MAIL_STMP, DEFAULT_MAIL_STMP, UINAME_MAIL_STMP, UIDESC_MAIL_STMP); private static final String CKEY_MAIL_TO_EMAIL = "mailToEmail"; private static final String DEFAULT_MAIL_TO_EMAIL = ""; private static final String UINAME_MAIL_TO_EMAIL = "Mail-to"; private static final String UIDESC_MAIL_TO_EMAIL = "Email address to which to send email alerts"; private final StringProperty mailToEmail = new StringProperty( CKEY_MAIL_TO_EMAIL, DEFAULT_MAIL_TO_EMAIL, UINAME_MAIL_TO_EMAIL, UIDESC_MAIL_TO_EMAIL); private static final String CKEY_MAIL_FROM_EMAIL = "mailFromEmail"; private static final String DEFAULT_MAIL_FROM_EMAIL = ""; private static final String UINAME_MAIL_STMP = "Mail SMTP"; private static final String UIDESC_MAIL_STMP = "SMTP server from which to send email alerts"; private final StringProperty mailFromEmail = new StringProperty( CKEY_MAIL_FROM_EMAIL, DEFAULT_MAIL_FROM_EMAIL, UINAME_MAIL_FROM_EMAIL, UIDESC_MAIL_FROM_EMAIL); // resource limit notifications private static final String CKEY_RES_LOG_INTERVAL_S = "resourceLimitLogIntervalS"; private static final int DEFAULT_RES_LOG_INTERVAL_S = 600; private static final String UINAME_RES_LOG_INTERVAL_S = "Resource-limit warning log interval (seconds)"; private static final String UIDESC_RES_LOG_INTERVAL_S = ""; private final IntProperty resourceLimitLogIntervalS = new IntProperty( CKEY_RES_LOG_INTERVAL_S, DEFAULT_RES_LOG_INTERVAL_S, UINAME_RES_LOG_INTERVAL_S, UIDESC_RES_LOG_INTERVAL_S); private static final String CKEY_RES_LOG_THRESH = "resourceLimitLogThreshold"; private static final double DEFAULT_RES_LOG_THRESH = 0.8; private static final String UINAME_RES_LOG_THRESH = "Resource-limit warning log fraction"; private static final String UIDESC_RES_LOG_THRESH = ""; private final DoubleProperty resourceLimitLogThreshold = new DoubleProperty( CKEY_RES_LOG_THRESH, DEFAULT_RES_LOG_THRESH, UINAME_RES_LOG_THRESH, UIDESC_RES_LOG_THRESH); private static final String CKEY_RES_EMAIL_INTERVAL = "resourceLimitEmailIntervalS"; private static final int DEFAULT_RES_EMAIL_INTERVAL = 3600; private static final String UINAME_RES_EMAIL_INTERVAL = "Resource-limit warning entry interval (seconds)"; private static final String UIDESC_RES_EMAIL_INTERVAL = ""; private final IntProperty resourceLimitEmailIntervalS = new IntProperty( CKEY_RES_EMAIL_INTERVAL, DEFAULT_RES_EMAIL_INTERVAL, UINAME_RES_EMAIL_INTERVAL, UIDESC_RES_EMAIL_INTERVAL); private static final String CKEY_RES_EMAIL_THRESH = "resourceLimitEmailThreshold"; private static final double DEFAULT_RES_EMAIL_THRESH = 0.95; private static final String UINAME_RES_EMAIL_THRESH = "Resource-limit warning email fraction"; private static final String UIDESC_RES_EMAIL_THRESH = ""; private final DoubleProperty resourceLimitEmailThreshold = new DoubleProperty( CKEY_RES_EMAIL_THRESH, DEFAULT_RES_EMAIL_THRESH, UINAME_RES_EMAIL_THRESH, UIDESC_RES_EMAIL_THRESH); // processing thread-pool private static final String CKEY_RES_REJECTION_THRESH = "resourceLimitRejectionThreshold"; private static final double DEFAULT_RES_REJECTION_THRESH = 0.95; private static final String UINAME_RES_REJECTION_THRESH = "Resource-limit media rejection threshold"; private static final String UIDESC_RES_REJECTION_THRESH = "Fraction of memory usage above which to reject new media instances"; private final DoubleProperty resourceLimitRejectionThreshold = new DoubleProperty( CKEY_RES_REJECTION_THRESH, DEFAULT_RES_REJECTION_THRESH, UINAME_RES_REJECTION_THRESH, UIDESC_RES_REJECTION_THRESH); private static final String CKEY_CORE_THREADPOOL_SIZE = "coreThreads"; private static final int DEFAULT_CORE_THREADPOOL_SIZE = 50; private static final String UINAME_CORE_THREADPOOL_SIZE = "Processing thread-pool minimum size"; private static final String UIDESC_CORE_THREADPOOL_SIZE = ""; private final IntProperty threadPoolCoreSize = new IntProperty( CKEY_CORE_THREADPOOL_SIZE, DEFAULT_CORE_THREADPOOL_SIZE, UINAME_CORE_THREADPOOL_SIZE, UIDESC_CORE_THREADPOOL_SIZE); private static final String CKEY_MAX_THREADPOOL_SIZE = "maxThreads"; private static final int DEFAULT_MAX_THREADPOOL_SIZE = 50; private static final String UINAME_MAX_THREADPOOL_SIZE = "Processing thread-pool max size"; private static final String UIDESC_MAX_THREADPOOL_SIZE = ""; private final IntProperty threadPoolMinSize = new IntProperty( CKEY_MAX_THREADPOOL_SIZE, DEFAULT_MAX_THREADPOOL_SIZE, UINAME_MAX_THREADPOOL_SIZE, UIDESC_MAX_THREADPOOL_SIZE); private static final String CKEY_THREADPOOL_KEEPALIVE_S = "idleTimeout"; private static final long DEFAULT_THREADPOOL_KEEPALIVE_S = 600; private static final String UINAME_THREADPOOL_KEEPALIVE_S = "Processing thread-pool idle timeout (seconds)"; private static final String UIDESC_THREADPOOL_KEEPALIVE_S = ""; private final LongProperty threadPoolKeepAliveTimeS = new LongProperty( CKEY_THREADPOOL_KEEPALIVE_S, DEFAULT_THREADPOOL_KEEPALIVE_S, UINAME_THREADPOOL_KEEPALIVE_S, UIDESC_THREADPOOL_KEEPALIVE_S); @Override public int getLoggingMaxSizeMb() { return this.loggingMaxSizeMb.getVal(); } @Override public int getLoggingMaxLogs() { return this.loggingMaxLogs.getVal(); } @Override public Level getLoggingLevel() { try { return Level.parse(this.loggingLevel.getVal()); } catch (IllegalArgumentException e) { return null; } } @Override public int getResourceLimitLogIntervalS() { return resourceLimitLogIntervalS.getVal(); } @Override public double getResourceLimitLogThreshold() { return resourceLimitLogThreshold.getVal(); } @Override public int getResourceLimitEmailIntervalS() { return resourceLimitEmailIntervalS.getVal(); } @Override public double getResourceLimitEmailThreshold() { return resourceLimitEmailThreshold.getVal(); } @Override public String getMailSmtp() { return this.mailSmtp.getVal(); } @Override public String getMailToEmail() { return this.mailToEmail.getVal(); } @Override public String getMailFromEmail() { return this.mailFromEmail.getVal(); } @Override public double getResourceLimitRejectionThreshold() { return this.resourceLimitRejectionThreshold.getVal(); } @Override public int getCoreThreadPoolSize() { return this.threadPoolCoreSize.getVal(); } @Override public int getMaxThreadPoolSize() { return this.threadPoolMinSize.getVal(); } @Override public long getThreadPoolKeepAliveTimeS() { return this.threadPoolKeepAliveTimeS.getVal(); } /* * -------------------------------- * Config operations * -------------------------------- */ /* * -------------------------------- * UI * -------------------------------- */ @Override public String getUiName() { return UINAME; } @Override public String getUiDescription() { return UIDESC; } /* * -------------------------------- * Message strings * -------------------------------- */ private static final String UINAME = "MEater Main - General Settings"; private static final String UIDESC = "This contains general settings for the MEater " + "application, such as logging and email-alerts"; }