dc2677951f0e1967319aba75532d739752b342d4
[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 ch.qos.logback.core.status.Status;
19 import org.slf4j.LoggerFactory;
20
21 import ch.qos.logback.classic.LoggerContext;
22 import ch.qos.logback.core.status.StatusBase;
23 import ch.qos.logback.core.status.StatusListener;
24 import ch.qos.logback.core.status.StatusManager;
25
26 public class LogbackStatusListener implements StatusListener,
27         LogbackRuntimeMXBean, Closeable {
28
29     private final List<StatusTO> receivedStatuses;
30     private final LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper;
31     private LogbackRuntimeRegistration reg;
32
33     public LogbackStatusListener(
34             LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
35         receivedStatuses = new ArrayList<>();
36         this.rootRuntimeBeanRegistratorWrapper = rootRuntimeBeanRegistratorWrapper;
37     }
38
39     @Override
40     public synchronized List<StatusTO> getStatusTO() {
41         return Collections.unmodifiableList(receivedStatuses);
42     }
43
44     @Override
45     public synchronized void reset() {
46         receivedStatuses.clear();
47     }
48
49     public LogbackRuntimeRegistration register() {
50         reg = registerToJMX(rootRuntimeBeanRegistratorWrapper);
51         registerToLogback();
52         return reg;
53     }
54
55     private LogbackRuntimeRegistration registerToJMX(
56             LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
57         return rootRuntimeBeanRegistratorWrapper.register(this);
58     }
59
60     private synchronized void registerToLogback() {
61         LoggerContext context = (LoggerContext) LoggerFactory
62                 .getILoggerFactory();
63         final StatusManager statusManager = context.getStatusManager();
64
65         statusManager.remove(this);
66         reset();
67
68         statusManager.add(this);
69         addInitialStatuses(statusManager);
70     }
71
72     private void addInitialStatuses(StatusManager statusManager) {
73         for (ch.qos.logback.core.status.Status status : statusManager
74                 .getCopyOfStatusList()) {
75             addStatusEvent(status);
76         }
77     }
78
79     @Override
80     public synchronized void addStatusEvent(
81             ch.qos.logback.core.status.Status status) {
82         receivedStatuses.add(transformStatus(status));
83     }
84
85     private StatusTO transformStatus(ch.qos.logback.core.status.Status status) {
86         StatusTO transformed = new StatusTO();
87
88         transformed.setDate(status.getDate());
89         transformed.setLevel(transformStatusLevel(status.getLevel()));
90         transformed.setMessage(status.getMessage());
91
92         return transformed;
93     }
94
95     private String transformStatusLevel(int status) {
96         switch (status) {
97         case StatusBase.INFO:
98             return "INFO";
99         case StatusBase.WARN:
100             return "WARN";
101         case StatusBase.ERROR:
102             return "ERROR";
103         default:
104             throw new IllegalStateException("Unknown status level " + status);
105         }
106     }
107
108     @Override
109     public void close() throws IOException {
110         if (reg != null)
111             reg.close();
112         unregisterFromLogback();
113     }
114
115     private void unregisterFromLogback() {
116         LoggerContext context = (LoggerContext) LoggerFactory
117                 .getILoggerFactory();
118         final StatusManager statusManager = context.getStatusManager();
119         statusManager.remove(this);
120     }
121 }