001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.monitors;
028
029 import java.util.ArrayList;
030 import org.opends.messages.Message;
031
032 import org.opends.server.admin.std.server.EntryCacheCfg;
033 import org.opends.server.admin.std.server.EntryCacheMonitorProviderCfg;
034 import org.opends.server.api.EntryCache;
035 import org.opends.server.api.MonitorProvider;
036 import org.opends.server.config.ConfigConstants;
037 import org.opends.server.config.ConfigException;
038 import org.opends.server.core.DirectoryServer;
039 import org.opends.server.types.Attribute;
040
041 import static org.opends.server.loggers.debug.DebugLogger.*;
042 import static org.opends.server.loggers.ErrorLogger.*;
043 import static org.opends.messages.ConfigMessages.*;
044
045 /**
046 * This class defines a Directory Server monitor provider that can be used to
047 * obtain information about the entry cache state. Note that the information
048 * reported is obtained with no locking, so it may not be entirely consistent.
049 */
050 public class EntryCacheMonitorProvider
051 extends MonitorProvider<EntryCacheMonitorProviderCfg>
052 {
053 // The name for this monitor.
054 private String monitorName;
055
056 // The entry cache common name.
057 private String entryCacheName;
058
059 // The entry cache with which this monitor is associated.
060 private EntryCache<? extends EntryCacheCfg> entryCache;
061
062 // Global entry cache monitor configuration.
063 private static EntryCacheMonitorProviderCfg monitorConfiguration;
064
065 /**
066 * Creates default instance of this monitor provider.
067 */
068 public EntryCacheMonitorProvider()
069 {
070 super("Entry Caches Monitor Provider");
071 this.entryCacheName = "Entry Caches";
072 this.entryCache = (EntryCache<? extends EntryCacheCfg>)
073 DirectoryServer.getEntryCache();
074 }
075
076 /**
077 * Creates implementation specific instance of this monitor provider.
078 *
079 * @param entryCacheName The name to use for this monitor provider.
080 * @param entryCache The entry cache to associate this monitor
081 * provider with.
082 */
083 public EntryCacheMonitorProvider(
084 String entryCacheName,
085 EntryCache<? extends EntryCacheCfg> entryCache)
086 {
087 super(entryCacheName + " Entry Cache Monitor Provider");
088 this.entryCacheName = entryCacheName + " Entry Cache";
089 this.entryCache = entryCache;
090 }
091
092 /**
093 * {@inheritDoc}
094 */
095 public void initializeMonitorProvider(
096 EntryCacheMonitorProviderCfg configuration)
097 throws ConfigException
098 {
099 monitorName = entryCacheName;
100
101 if (configuration != null) {
102 monitorConfiguration = configuration;
103 }
104 if (monitorConfiguration == null) {
105 Message message =
106 INFO_WARN_CONFIG_ENTRYCACHE_NO_MONITOR_CONFIG_ENTRY.get(
107 ConfigConstants.DN_ENTRY_CACHE_MONITOR_CONFIG,
108 monitorName);
109 logError(message);
110 throw new ConfigException(message);
111 }
112 if (!monitorConfiguration.isEnabled()) {
113 Message message =
114 INFO_WARN_CONFIG_ENTRYCACHE_MONITOR_CONFIG_DISABLED.get(
115 ConfigConstants.DN_ENTRY_CACHE_MONITOR_CONFIG,
116 monitorName);
117 logError(message);
118 throw new ConfigException(message);
119 }
120 }
121
122 /**
123 * {@inheritDoc}
124 */
125 public String getMonitorInstanceName()
126 {
127 return monitorName;
128 }
129
130 /**
131 * {@inheritDoc}
132 */
133 public long getUpdateInterval()
134 {
135 // This monitor does not need to run periodically.
136 return 0;
137 }
138
139 /**
140 * {@inheritDoc}
141 */
142 public void updateMonitorData()
143 {
144 // This monitor does not need to run periodically.
145 return;
146 }
147
148 /**
149 * {@inheritDoc}
150 */
151 public ArrayList<Attribute> getMonitorData()
152 {
153 ArrayList<Attribute> attrs = new ArrayList<Attribute>();
154
155 if ((entryCache != null) &&
156 (monitorConfiguration != null) &&
157 (monitorConfiguration.isEnabled())) {
158 // Get monitor data from the cache.
159 attrs = entryCache.getMonitorData();
160 }
161
162 return attrs;
163 }
164 }