001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the license for the specific language governing permissions and
015 * limitations under the license.
016 */
017package org.apache.logging.log4j.core.jmx;
018
019/**
020 * The MBean interface for monitoring and managing an LMAX Disruptor ring
021 * buffer.
022 */
023public interface RingBufferAdminMBean {
024    /**
025     * ObjectName pattern ({@value}) for the RingBufferAdmin MBean that instruments
026     * the global {@code AsyncLogger} ring buffer.
027     * This pattern contains one variable: the name of the context.
028     * <p>
029     * You can find the registered RingBufferAdmin MBean for the global AsyncLogger like this:
030     * </p>
031     * <pre>
032     * MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
033     * String pattern = String.format(RingBufferAdminMBean.PATTERN_ASYNC_LOGGER, &quot;*&quot;);
034     * Set&lt;ObjectName&gt; asyncLoggerNames = mbs.queryNames(new ObjectName(pattern), null);
035     * </pre>
036     */
037    String PATTERN_ASYNC_LOGGER = Server.DOMAIN + ":type=%s,component=AsyncLoggerRingBuffer";
038
039    /**
040     * ObjectName pattern ({@value}) for RingBufferAdmin MBeans that instrument
041     * {@code AsyncLoggerConfig} ring buffers.
042     * This pattern contains three variables, where the first is the name of the
043     * context, the second and third are identical and the name of the instrumented logger config.
044     * <p>
045     * You can find all registered RingBufferAdmin MBeans like this:
046     * </p>
047     * <pre>
048     * MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
049     * String pattern = String.format(RingBufferAdminMBean.PATTERN_ASYNC_LOGGER_CONFIG, &quot;*&quot;, &quot;*&quot;);
050     * Set&lt;ObjectName&gt; asyncConfigNames = mbs.queryNames(new ObjectName(pattern), null);
051     * </pre>
052     */
053    String PATTERN_ASYNC_LOGGER_CONFIG = Server.DOMAIN + ":type=%s,component=Loggers,name=%s,subtype=RingBuffer";
054
055    /**
056     * Returns the number of slots that the ring buffer was configured with.
057     * Disruptor ring buffers are bounded-size data structures, this number does
058     * not change during the life of the ring buffer.
059     *
060     * @return the number of slots that the ring buffer was configured with
061     */
062    long getBufferSize();
063
064    /**
065     * Returns the number of available slots in the ring buffer. May vary wildly
066     * between invocations.
067     *
068     * @return the number of available slots in the ring buffer
069     */
070    long getRemainingCapacity();
071}