/************************************************************************************** * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ package com.espertech.esper.client; import com.espertech.esper.type.*; import com.espertech.esper.collection.Pair; import java.io.Serializable; import java.util.*; /** * Configuratiom for metrics reporting. */ public class ConfigurationMetricsReporting implements Serializable { private boolean enableMetricsReporting; private boolean isThreading; private long engineInterval; private long statementInterval; private Map<String, StmtGroupMetrics> statementGroups; private static final long serialVersionUID = -7265780298667075895L; /** * Ctor. */ public ConfigurationMetricsReporting() { enableMetricsReporting = false; isThreading = true; engineInterval = 10 * 1000; // 10 seconds statementInterval = 10 * 1000; statementGroups = new LinkedHashMap<String, StmtGroupMetrics>(); } /** * Add a statement group, allowing control of metrics reporting interval per statement or * per multiple statements. The reporting interval and be changed at runtime. * <p> * Add pattern include and exclude criteria to control which * @param name of statement group, not connected to statement name, assigned as an * arbitrary identifier for runtime changes to the interval * @param config the statement group metrics configuration */ public void addStmtGroup(String name, StmtGroupMetrics config) { statementGroups.put(name, config); } /** * Returns true if metrics reporting is turned on, false if not. * @return indicator whether metrics reporting is turned on */ public boolean isEnableMetricsReporting() { return enableMetricsReporting; } /** * Set to true to turn metrics reporting on, or false to turn metrics reporting off. * @param enableMetricsReporting indicator whether metrics reporting should be turned on */ public void setEnableMetricsReporting(boolean enableMetricsReporting) { this.enableMetricsReporting = enableMetricsReporting; } /** * Returns true to indicate that metrics reporting takes place in a separate thread (default), * or false to indicate that metrics reporting takes place as part of timer processing. * @return indicator whether metrics reporting is threaded */ public boolean isThreading() { return isThreading; } /** * Set to true to indicate that metrics reporting should take place in a separate thread, * or false to indicate that metrics reporting takes place as part of timer processing. * @param threading indicator whether metrics reporting is threaded */ public void setThreading(boolean threading) { isThreading = threading; } /** * Returns the engine metrics production interval in milliseconds. * @return engine metrics production interval */ public long getEngineInterval() { return engineInterval; } /** * Sets the engine metrics production interval in milliseconds. * <p> * Use a negative or zero value to disable engine metrics production. * @param engineInterval engine metrics production interval */ public void setEngineInterval(long engineInterval) { this.engineInterval = engineInterval; } /** * Returns the statement metrics production interval in milliseconds, * unless statement groups have been defined that override this setting for certain statements. * @return statement metrics production interval */ public long getStatementInterval() { return statementInterval; } /** * Sets the statement metrics production interval in milliseconds, * unless statement groups have been defined that override this setting for certain statements. * @param statementInterval statement metrics production interval */ public void setStatementInterval(long statementInterval) { this.statementInterval = statementInterval; } /** * Returns a map of statement group and metrics configuration for the statement group. * @return map of statement group and metrics configuration */ public Map<String, StmtGroupMetrics> getStatementGroups() { return statementGroups; } /** * Sets a new interval for a statement group identified by name. * @param stmtGroupName name of statement group as assigned through configuration * @param newInterval new interval, or a -1 or zero value to disable reporting */ public void setStatementGroupInterval(String stmtGroupName, long newInterval) { StmtGroupMetrics metrics = statementGroups.get(stmtGroupName); if (metrics != null) { metrics.setInterval(newInterval); } else { throw new ConfigurationException("Statement group by name '" + stmtGroupName + "' could not be found"); } } /** * Class to configure statement metrics reporting for a group of one or more statements. */ public static class StmtGroupMetrics implements Serializable { private List<Pair<StringPatternSet, Boolean>> patterns; private int numStatements; private long interval; private boolean reportInactive; private boolean defaultInclude; private static final long serialVersionUID = 5449418752480520879L; /** * Ctor. */ public StmtGroupMetrics() { patterns = new ArrayList<Pair<StringPatternSet, Boolean>>(); interval = 10000; numStatements = 100; } /** * Include all statements in the statement group that match the SQL like-expression by statement name. * @param likeExpression to match */ public void addIncludeLike(String likeExpression) { patterns.add(new Pair<StringPatternSet, Boolean>(new StringPatternSetLike(likeExpression), true)); } /** * Exclude all statements from the statement group that match the SQL like-expression by statement name. * @param likeExpression to match */ public void addExcludeLike(String likeExpression) { patterns.add(new Pair<StringPatternSet, Boolean>(new StringPatternSetLike(likeExpression), false)); } /** * Include all statements in the statement group that match the regular expression by statement name. * @param regexExpression to match */ public void addIncludeRegex(String regexExpression) { patterns.add(new Pair<StringPatternSet, Boolean>(new StringPatternSetRegex(regexExpression), true)); } /** * Exclude all statements in the statement group that match the regular expression by statement name. * @param regexExpression to match */ public void addExcludeRegEx(String regexExpression) { patterns.add(new Pair<StringPatternSet, Boolean>(new StringPatternSetRegex(regexExpression), false)); } /** * Returns the reporting interval for statement metrics for statements in the statement group. * @return interval */ public long getInterval() { return interval; } /** * Sets the reporting interval for statement metrics for statements in the statement group. * @param interval a negative or zero value to disable reporting for this group of statements */ public void setInterval(long interval) { this.interval = interval; } /** * Returns a list of patterns that indicate whether a statement, by the statement name matching or * not matching each pattern, falls within the statement group. * <p> * Include-patterns are boolean true in the pair of pattern and boolean. Exclude-patterns are * boolean false. * @return list of include and exclude pattern */ public List<Pair<StringPatternSet, Boolean>> getPatterns() { return patterns; } /** * Returns the initial capacity number of statements held by the statement group. * @return initial capacity */ public int getNumStatements() { return numStatements; } /** * Sets the initial capacity number of statements held by the statement group. * @param numStatements initial capacity */ public void setNumStatements(int numStatements) { this.numStatements = numStatements; } /** * Returns true to indicate that inactive statements (statements without events or timer activity) * are also reported. * @return true for reporting inactive statements */ public boolean isReportInactive() { return reportInactive; } /** * Set to true to indicate that inactive statements (statements without events or timer activity) * are also reported, or false to omit reporting for inactive statements. * @param reportInactive set to true for reporting inactive statements */ public void setReportInactive(boolean reportInactive) { this.reportInactive = reportInactive; } /** * If this flag is set then all statement names are automatically included in this * statement group, and through exclude-pattern certain statement names can be omitted * <P> * If this flag is not set then all statement names are automatically excluded in this * statement group, and through include-pattern certain statement names can be included. * <p> * The default is false, i.e. statements must be explicitly included. * @return true for include all statements, false for explicitly include */ public boolean isDefaultInclude() { return defaultInclude; } /** * Set this flag to true and all statement names are automatically included in this * statement group, and through exclude-pattern certain statement names can be omitted * <P> * Set this flag to false and all statement names are automatically excluded in this * statement group, and through include-pattern certain statement names can be included. * <p> * The default is false, i.e. statements must be explicitly included. * @param defaultInclude true for include all statements, false for explicitly include statements */ public void setDefaultInclude(boolean defaultInclude) { this.defaultInclude = defaultInclude; } } }