9e63e574895879612858e3a65049d04a456c8395
[controller.git] / opendaylight / config / logback-config / src / main / java / org / opendaylight / controller / config / yang / logback / config / LogbackStatusListener.java
1 /**
2  * Generated file
3
4  * Generated from: yang module name: config-test  yang module local name: testing
5  * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
6  * Generated at: Fri Sep 27 14:06:33 CEST 2013
7  *
8  * Do not modify this file unless it is present under src/main directory
9  */
10 package org.opendaylight.controller.config.yang.logback.config;
11
12 import java.io.Closeable;
13 import java.io.IOException;
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.List;
17
18 import org.slf4j.LoggerFactory;
19
20 import ch.qos.logback.classic.LoggerContext;
21 import ch.qos.logback.core.status.StatusBase;
22 import ch.qos.logback.core.status.StatusListener;
23 import ch.qos.logback.core.status.StatusManager;
24
25 public class LogbackStatusListener implements StatusListener, LogbackRuntimeMXBean, Closeable {
26
27     private final List<StatusTO> receivedStatuses;
28     private final LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper;
29     private LogbackRuntimeRegistration reg;
30
31     public LogbackStatusListener(LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
32         receivedStatuses = new ArrayList<>();
33         this.rootRuntimeBeanRegistratorWrapper = rootRuntimeBeanRegistratorWrapper;
34     }
35
36     @Override
37     public synchronized List<StatusTO> getStatusTO() {
38         return Collections.unmodifiableList(receivedStatuses);
39     }
40
41     @Override
42     public synchronized void reset() {
43         receivedStatuses.clear();
44     }
45
46     public LogbackRuntimeRegistration register() {
47         reg = registerToJMX(rootRuntimeBeanRegistratorWrapper);
48         registerToLogback();
49         return reg;
50     }
51
52     private LogbackRuntimeRegistration registerToJMX(LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
53         return rootRuntimeBeanRegistratorWrapper.register(this);
54     }
55
56     private synchronized void registerToLogback() {
57         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
58         final StatusManager statusManager = context.getStatusManager();
59
60         statusManager.remove(this);
61         reset();
62
63         statusManager.add(this);
64         addInitialStatuses(statusManager);
65     }
66
67     private void addInitialStatuses(StatusManager statusManager) {
68         for (ch.qos.logback.core.status.Status status : statusManager.getCopyOfStatusList()) {
69             addStatusEvent(status);
70         }
71     }
72
73     @Override
74     public synchronized void addStatusEvent(ch.qos.logback.core.status.Status status) {
75         receivedStatuses.add(transformStatus(status));
76     }
77
78     private StatusTO transformStatus(ch.qos.logback.core.status.Status status) {
79         StatusTO transformed = new StatusTO();
80
81         transformed.setDate(status.getDate());
82         transformed.setLevel(transformStatusLevel(status.getLevel()));
83         transformed.setMessage(status.getMessage());
84
85         return transformed;
86     }
87
88     private String transformStatusLevel(int status) {
89         switch (status) {
90         case StatusBase.INFO:
91             return "INFO";
92         case StatusBase.WARN:
93             return "WARN";
94         case StatusBase.ERROR:
95             return "ERROR";
96         default:
97             throw new IllegalStateException("Unknown status level " + status);
98         }
99     }
100
101     @Override
102     public void close() throws IOException {
103         if (reg != null)
104             reg.close();
105         unregisterFromLogback();
106     }
107
108     private void unregisterFromLogback() {
109         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
110         final StatusManager statusManager = context.getStatusManager();
111         statusManager.remove(this);
112     }
113 }