1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.jmx;
18
19 import javax.management.ObjectName;
20
21 import org.apache.logging.log4j.core.util.Assert;
22
23 import com.lmax.disruptor.RingBuffer;
24
25
26
27
28 public class RingBufferAdmin implements RingBufferAdminMBean {
29
30 private final RingBuffer<?> ringBuffer;
31 private final ObjectName objectName;
32
33 public static RingBufferAdmin forAsyncLogger(final RingBuffer<?> ringBuffer, final String contextName) {
34 final String ctxName = Server.escape(contextName);
35 final String name = String.format(PATTERN_ASYNC_LOGGER, ctxName);
36 return new RingBufferAdmin(ringBuffer, name);
37 }
38
39 public static RingBufferAdmin forAsyncLoggerConfig(final RingBuffer<?> ringBuffer,
40 final String contextName, final String configName) {
41 final String ctxName = Server.escape(contextName);
42 final String cfgName = Server.escape(configName);
43 final String name = String.format(PATTERN_ASYNC_LOGGER_CONFIG, ctxName, cfgName);
44 return new RingBufferAdmin(ringBuffer, name);
45 }
46
47 protected RingBufferAdmin(final RingBuffer<?> ringBuffer, final String mbeanName) {
48 this.ringBuffer = Assert.requireNonNull(ringBuffer, "ringbuffer");
49 try {
50 objectName = new ObjectName(mbeanName);
51 } catch (final Exception e) {
52 throw new IllegalStateException(e);
53 }
54 }
55
56 @Override
57 public long getBufferSize() {
58 return ringBuffer.getBufferSize();
59 }
60
61 @Override
62 public long getRemainingCapacity() {
63 return ringBuffer.remainingCapacity();
64 }
65
66
67
68
69
70
71
72
73 public ObjectName getObjectName() {
74 return objectName;
75 }
76
77 }