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