| /* |
| * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * - Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * - Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * - Neither the name of Oracle nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| /* |
| * This source code is provided to illustrate the usage of a given feature |
| * or technique and has been deliberately simplified. Additional steps |
| * required for a production-quality application, such as security checks, |
| * input validation and proper error handling, might not be present in |
| * this sample code. |
| */ |
| |
| |
| package com.sun.jmx.examples.scandir; |
| |
| import com.sun.jmx.examples.scandir.config.ResultRecord; |
| import java.io.IOException; |
| import javax.management.InstanceNotFoundException; |
| |
| /** |
| * The <code>ResultLogManagerMXBean</code> is in charge of managing result logs. |
| * {@link DirectoryScanner DirectoryScanners} can be configured to log a |
| * {@link ResultRecord} whenever they take action upon a file that |
| * matches their set of matching criteria. |
| * The <code>ResultLogManagerMXBean</code> is responsible for storing these |
| * results in its result logs. |
| * <p>The <code>ResultLogManagerMXBean</code> |
| * will let you interactively clear these result logs, change their |
| * capacity, and decide where (memory or file or both) the |
| * {@link ResultRecord ResultRecords} should be stored. |
| * <p>The memory log is useful in so far that its content can be interactively |
| * returned by the <code>ResultLogManagerMXBean</code>. |
| * The file log doesn't have this facility. |
| * <p>The result logs are intended to be used by e.g. an offline program that |
| * would take some actions on the files that were matched by the scanners |
| * criteria: |
| * <p>The <i>scandir</i> application could be configured to only produce logs |
| * (i.e. takes no action but logging the matching files), and the real |
| * action (e.g. mail the result log to the engineer which maintains the lab, |
| * or parse the log and prepare and send a single mail to the matching |
| * files owners, containing the list of file he/she should consider deleting) |
| * could be performed by such another program/module. |
| * |
| * @author Sun Microsystems, 2006 - All rights reserved. |
| */ |
| public interface ResultLogManagerMXBean { |
| |
| /** |
| * Creates a new log file in which to store results. |
| * <p>When this method is called, the {@link ResultLogManager} will stop |
| * logging in its current log file and use the new specified file instead. |
| * If that file already exists, it will be renamed by appending a '~' to |
| * its name, and a new empty file with the name specified by |
| * <var>basename</var> will be created. |
| * </p> |
| * <p>Calling this method has no side effect on the {@link |
| * com.sun.jmx.examples.scandir.config.ScanManagerConfig#getInitialResultLogConfig |
| * InitialResultLogConfig} held in the {@link ScanDirConfigMXBean} |
| * configuration. To apply these new values to the |
| * {@link ScanDirConfigMXBean} |
| * configuration, you must call {@link |
| * ScanManagerMXBean#applyCurrentResultLogConfig |
| * ScanManagerMXBean.applyCurrentResultLogConfig}. |
| *<p> |
| * @param basename The name of the new log file. This will be the |
| * new name returned by {@link #getLogFileName}. |
| * @param maxRecord maximum number of records to log in the specified file |
| * before creating a new file. <var>maxRecord</var> will be the |
| * new value returned by {@link #getLogFileCapacity}. |
| * When that maximum number of |
| * records is reached the {@link ResultLogManager} will rename |
| * the file by appending a '~' to its name, and a new empty |
| * log file will be created. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void newLogFile(String basename, long maxRecord) |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Logs a result record to the active result logs (memory,file,both,or none) |
| * depending on how this MBean is currently configured. |
| * @see #getLogFileName() |
| * @see #getMemoryLogCapacity() |
| * @param record The result record to log. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| */ |
| public void log(ResultRecord record) |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Gets the name of the current result log file. |
| * <p><code>null</code> means that no log file is configured: logging |
| * to file is disabled. |
| * </p> |
| * @return The name of the current result log file, or <code>null</code> |
| * if logging to file is disabled. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public String getLogFileName() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Gets the whole content of the memory log. This cannot exceed |
| * {@link #getMemoryLogCapacity} records. |
| * |
| * @return the whole content of the memory log. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public ResultRecord[] getMemoryLog() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Gets the maximum number of records that can be logged in the |
| * memory log. |
| * <p> |
| * A non positive value - <code>0</code> or negative - means that |
| * logging in memory is disabled. |
| * </p> |
| * <p>The memory log is a FIFO: when its maximum capacity is reached, its |
| * head element is removed to make place for a new element at its tail. |
| * </p> |
| * @return The maximum number of records that can be logged in the |
| * memory log. A value {@code <= 0} means that logging in memory is |
| * disabled. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public int getMemoryLogCapacity() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Sets the maximum number of records that can be logged in the |
| * memory log. |
| * <p>The memory log is a FIFO: when its maximum capacity is reached, its |
| * head element is removed to make place for a new element at its tail. |
| * </p> |
| * @param size The maximum number of result records that can be logged in the memory log. <p> |
| * A non positive value - <code>0</code> or negative - means that |
| * logging in memory is disabled. It will also have the side |
| * effect of clearing the memory log. |
| * </p> |
| * |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| */ |
| public void setMemoryLogCapacity(int size) |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Sets the maximum number of records that can be logged in the result log |
| * file. |
| * <p>When that maximum number of |
| * records is reached the {@link ResultLogManager} will rename |
| * the result log file by appending a '~' to its name, and a new empty |
| * log file will be created. |
| * </p> |
| * <p>If logging to file is disabled calling this method |
| * is irrelevant. |
| * </p> |
| * @param maxRecord maximum number of records to log in the result log file. |
| * @see #getLogFileName() |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void setLogFileCapacity(long maxRecord) |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Gets the maximum number of records that can be logged in the result log |
| * file. |
| * <p>When that maximum number of |
| * records is reached the {@link ResultLogManager} will rename |
| * the result log file by appending a '~' to its name, and a new empty |
| * log file will be created. |
| * </p> |
| * @see #getLogFileName() |
| * @return The maximum number of records that can be logged in the result |
| * log file. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public long getLogFileCapacity() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Gets The number of records that have been logged in the |
| * current result log file. This will always be less than |
| * {@link #getLogFileCapacity()}. |
| * @return The number of records in the |
| * current result log file. |
| * |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public long getLoggedCount() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Clears the memory log and result log file. |
| * |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void clearLogs() |
| throws IOException, InstanceNotFoundException; |
| } |