001: package com.sun.portal.rproxy.monitoring;
002:
003: import com.sun.portal.log.common.PortalLogger;
004: import com.sun.portal.netlet.monitoring.NetletConnectionsStatistic;
005: import com.sun.portal.util.SRAEvent;
006: import com.sun.portal.util.SRAEventListener;
007: import com.sun.portal.util.ServiceIdentifier;
008: import com.sun.portal.monitoring.*;
009:
010: import java.util.List;
011: import java.util.LinkedList;
012: import java.util.Properties;
013: import java.util.logging.Logger;
014: import java.util.logging.Level;
015: import java.io.File;
016: import java.io.FileInputStream;
017: import java.io.IOException;
018:
019: /**
020: * author: Noble Paul
021: * Date: Feb 4, 2005, 11:52:56 AM
022: */
023: public class MonitoringSubsystem {
024: private static Subsystem subsystem;
025: private static boolean monitoringDisabled = true;
026: private static List eventListeners = new LinkedList();
027: private static Logger logger = PortalLogger
028: .getLogger(MonitoringSubsystem.class);
029:
030: public static Subsystem getInstance() {
031: if (subsystem == null) {
032: try {
033: subsystem = new SubsystemImpl(getMonitoringProperties()) {
034: public void start() throws MonitoringException {
035: monitoringDisabled = false;
036: super .start();
037: initialize();
038: }
039:
040: public void stop(Boolean unregisterMBeans)
041: throws MonitoringException {
042: monitoringDisabled = true;
043: super .stop(unregisterMBeans);
044: shutdown();
045: }
046: };
047: } catch (MonitoringException e) {
048: logger.log(Level.SEVERE, "PSMN_CSPM0001", e);
049: }
050:
051: try {
052: subsystem.start();
053: } catch (Exception e) {
054: logger.log(Level.SEVERE, "PSMN_CSPM0001", e);
055: }
056: }
057: return subsystem;
058: }
059:
060: private static Properties getMonitoringProperties()
061: throws MonitoringException {
062: String monConfigDir = System.getProperty("SRAP_CONFIG_DIR")
063: + File.separator
064: + System.getProperty("conf.suffix")
065: + File.separator
066: + System
067: .getProperty("com.sun.portal.sra.component.type");
068: Properties properties = new Properties();
069: try {
070: properties.load(new FileInputStream(monConfigDir
071: + File.separator + "monitoring.properties"));
072: } catch (IOException e) {
073: throw new MonitoringException(e);
074: }
075: properties
076: .setProperty(
077: MonitoringContext.class.getName()
078: + "."
079: + MonitoringContext.PROPERTY_SUFFIX_CONFIGURATION_DIRECTORY,
080: monConfigDir);
081: properties.setProperty(ConnectorContext.class.getName() + "."
082: + ConnectorContext.PROPERTY_SUFFIX_SSL_DISABLE, "true");
083: properties
084: .setProperty(
085: ConnectorContext.class.getName()
086: + "."
087: + ConnectorContext.PROPERTY_SUFFIX_SASL_DISABLE,
088: "true");
089:
090: return properties;
091: }
092:
093: private static void initialize() {
094: try {
095: if (subsystem.isDisabled().booleanValue())
096: return;
097: if (ServiceIdentifier.isGateway()
098: || ServiceIdentifier.isRewriterProxy()) {
099: registerListeners(new RProxyResponseTimeStatistic(
100: subsystem).initMBeans());
101: registerListeners(new RProxyRequestsStatistic(subsystem)
102: .initMBeans());
103: registerListeners(new InternalServerStatistic(subsystem));
104: }
105: registerListeners(new ISNotificationsStatistic(subsystem)
106: .initMBeans());
107: registerListeners(new ISLoggingStatistics(subsystem)
108: .initMBeans());
109: registerListeners(new UserProfileCacheStatistic(subsystem)
110: .initMBeans());
111: // registerListeners(new SocketsStatistic(subsystem).initMBeans());
112: registerListeners(new SSOOperationStatistic(subsystem)
113: .initMBeans());
114: registerListeners(new ThreadPoolStatistic(subsystem)
115: .initMBeans());
116: if (ServiceIdentifier.isGateway()
117: || ServiceIdentifier.isNetletProxy()) {
118: registerListeners(new NetletConnectionsStatistic(
119: subsystem));
120: }
121: registerListeners(new ThreadActivityStatistic(subsystem));
122: monitoringDisabled = false;
123: } catch (Exception e) {
124: logger.log(Level.SEVERE, "PSMN_CSPM0001", e);
125: }
126: }
127:
128: private static void registerListeners(SRAEventListener eventListener) {
129: SRAEvent[] events = eventListener.getInterestedEvents();
130: for (int i = 0; i < events.length; i++) {
131: events[i].addListener(eventListener);
132: }
133: eventListeners.add(eventListener);
134: }
135:
136: private static void shutdown() {
137: for (int i = 0; i < eventListeners.size(); i++) {
138: SRAEventListener eventListener = (SRAEventListener) eventListeners
139: .get(i);
140: SRAEvent[] events = eventListener.getInterestedEvents();
141: for (int j = 0; j < events.length; j++) {
142: try {
143: events[j].removeListener(eventListener);
144: } catch (Exception e) {
145: logger.log(Level.SEVERE, "PSMN_CSPM0001", e);
146: }
147: }
148: eventListeners.remove(eventListener);
149: }
150: }
151:
152: public static boolean isMonitoringDisabled() {
153: return monitoringDisabled;
154: }
155:
156: public static void handleEvent(SRAEvent event) {
157: if (monitoringDisabled)
158: return;
159: try {
160: event.fireEvent(null);
161: } catch (Exception e) {
162: logger.log(Level.SEVERE, "PSMN_CSPM0001", e);
163: }
164: }
165:
166: public static void handleEvent(SRAEvent event, Object obj) {
167: if (monitoringDisabled)
168: return;
169: try {
170: event.fireEvent(obj);
171: } catch (Exception e) {
172: logger.log(Level.SEVERE, "PSMN_CSPM0001", e);
173: }
174: }
175: }
|