Added MonitorData class to simplify writing monitored objects
1 files added
37 files modified
| | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.EntryCacheCfg; |
| | | import org.opends.server.monitors.EntryCacheMonitorProvider; |
| | | import org.opends.server.types.Attribute; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.InitializationException; |
| | |
| | | * be returned to the client if the corresponding monitor |
| | | * entry is requested. |
| | | */ |
| | | public abstract List<Attribute> getMonitorData(); |
| | | public abstract MonitorData getMonitorData(); |
| | | |
| | | /** |
| | | * Retrieves the current number of entries stored within the cache. |
| New file |
| | |
| | | /* |
| | | * The contents of this file are subject to the terms of the Common Development and |
| | | * Distribution License (the License). You may not use this file except in compliance with the |
| | | * License. |
| | | * |
| | | * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the |
| | | * specific language governing permission and limitations under the License. |
| | | * |
| | | * When distributing Covered Software, include this CDDL Header Notice in each file and include |
| | | * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL |
| | | * Header, with the fields enclosed by brackets [] replaced by your own identifying |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.api; |
| | | |
| | | import static org.opends.server.core.DirectoryServer.*; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.Collection; |
| | | import java.util.Date; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.forgerock.opendj.ldap.GeneralizedTime; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.forgerock.opendj.ldap.schema.CoreSchema; |
| | | import org.forgerock.opendj.ldap.schema.Syntax; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeBuilder; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.PublicAPI; |
| | | import org.opends.server.types.StabilityLevel; |
| | | |
| | | /** |
| | | * This class is used to hold monitoring data, i.e. a list of attributes. It provides convenient |
| | | * methods to easily build such data. |
| | | * <p> |
| | | * <strong>Note:</strong> <br> |
| | | * Creating monitor entries may become a lot easier once we've migrated to the SDK Entry class: |
| | | * |
| | | * <pre> |
| | | * Entry entry = ...; |
| | | * entry.addAttribute("stringStat", "aString") |
| | | * .addAttribute("integerStat", 12345) |
| | | * .addAttribute("dnStat", DN.valueOf("dc=aDN"); |
| | | * </pre> |
| | | * |
| | | * We could also envisage an annotation based approach where we determine the monitor content from |
| | | * annotated fields/methods in an object. |
| | | */ |
| | | @PublicAPI(stability = StabilityLevel.PRIVATE) |
| | | public final class MonitorData implements Iterable<Attribute> |
| | | { |
| | | private final List<Attribute> attrs; |
| | | |
| | | /** Constructor to use when the number of attributes to create is unknown. */ |
| | | public MonitorData() |
| | | { |
| | | attrs = new ArrayList<>(); |
| | | } |
| | | |
| | | /** |
| | | * Constructor that accepts the number of attributes to create. |
| | | * |
| | | * @param expectedAttributesCount |
| | | * number of attributes that will be added |
| | | */ |
| | | public MonitorData(int expectedAttributesCount) |
| | | { |
| | | attrs = new ArrayList<>(expectedAttributesCount); |
| | | } |
| | | |
| | | /** |
| | | * Adds an attribute with the provided name and value. |
| | | * |
| | | * @param attrName |
| | | * the attribute name |
| | | * @param attrValue |
| | | * the attribute value |
| | | */ |
| | | public void add(String attrName, Object attrValue) |
| | | { |
| | | Syntax syntax; |
| | | if (attrValue instanceof String |
| | | || attrValue instanceof ByteString |
| | | || attrValue instanceof Float |
| | | || attrValue instanceof Double) |
| | | { |
| | | // coming first because they are the most common types |
| | | syntax = getDefaultStringSyntax(); |
| | | } |
| | | else if (attrValue instanceof Number) |
| | | { |
| | | syntax = getDefaultIntegerSyntax(); |
| | | } |
| | | else if (attrValue instanceof Boolean) |
| | | { |
| | | syntax = getDefaultBooleanSyntax(); |
| | | } |
| | | else if (attrValue instanceof DN) |
| | | { |
| | | syntax = getDefaultDNSyntax(); |
| | | } |
| | | else if (attrValue instanceof Date) |
| | | { |
| | | syntax = CoreSchema.getGeneralizedTimeSyntax(); |
| | | attrValue = GeneralizedTime.valueOf((Date) attrValue); |
| | | } |
| | | else if (attrValue instanceof Calendar) |
| | | { |
| | | syntax = CoreSchema.getGeneralizedTimeSyntax(); |
| | | attrValue = GeneralizedTime.valueOf((Calendar) attrValue); |
| | | } |
| | | else if (attrValue instanceof UUID) |
| | | { |
| | | syntax = CoreSchema.getUUIDSyntax(); |
| | | } |
| | | else |
| | | { |
| | | syntax = getDefaultStringSyntax(); |
| | | } |
| | | add(attrName, syntax, attrValue); |
| | | } |
| | | |
| | | private void add(String attrName, Syntax syntax, Object attrValue) |
| | | { |
| | | AttributeType attrType = getAttributeType(attrName, syntax); |
| | | attrs.add(Attributes.create(attrType, String.valueOf(attrValue))); |
| | | } |
| | | |
| | | /** |
| | | * Adds an attribute with the provided name and value if the value is not null. |
| | | * |
| | | * @param attrName |
| | | * the attribute name |
| | | * @param attrValue |
| | | * the attribute value |
| | | */ |
| | | public void addIfNotNull(String attrName, Object attrValue) |
| | | { |
| | | if (attrValue != null) |
| | | { |
| | | add(attrName, attrValue); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Adds an attribute with the provided name and values. |
| | | * |
| | | * @param attrName |
| | | * the attribute name |
| | | * @param attrValues |
| | | * the attribute values |
| | | */ |
| | | public void add(String attrName, Collection<?> attrValues) |
| | | { |
| | | AttributeBuilder builder = new AttributeBuilder(attrName); |
| | | builder.addAllStrings(attrValues); |
| | | attrs.add(builder.toAttribute()); |
| | | } |
| | | |
| | | /** |
| | | * Adds all the properties from the provided bean as attributes, prepending the provided prefix. |
| | | * |
| | | * @param bean |
| | | * the bean from which to read the properties |
| | | * @param attributesPrefix |
| | | * the prefix to prepend to the attributes read from the bean |
| | | * @throws ReflectiveOperationException |
| | | * if a problem occurs while reading the properties of the bean |
| | | */ |
| | | public void addBean(Object bean, String attributesPrefix) throws ReflectiveOperationException |
| | | { |
| | | for (Method method : bean.getClass().getMethods()) |
| | | { |
| | | if (method.getName().startsWith("get")) |
| | | { |
| | | Class<?> returnType = method.getReturnType(); |
| | | if (returnType.equals(int.class) || returnType.equals(long.class) || returnType.equals(String.class)) |
| | | { |
| | | addStatAttribute(attributesPrefix, bean, method, 3); |
| | | } |
| | | } |
| | | else if (method.getName().startsWith("is") && method.getReturnType().equals(boolean.class)) |
| | | { |
| | | addStatAttribute(attributesPrefix, bean, method, 2); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void addStatAttribute(String attrPrefix, Object stats, Method method, int skipNameLen) |
| | | throws ReflectiveOperationException |
| | | { |
| | | String attrName = attrPrefix + method.getName().substring(skipNameLen); |
| | | add(attrName, method.invoke(stats)); |
| | | } |
| | | |
| | | @Override |
| | | public Iterator<Attribute> iterator() |
| | | { |
| | | return attrs.iterator(); |
| | | } |
| | | |
| | | /** |
| | | * Returns the number of attributes. |
| | | * |
| | | * @return the number of attributes |
| | | */ |
| | | public int size() |
| | | { |
| | | return attrs.size(); |
| | | } |
| | | |
| | | @Override |
| | | public String toString() |
| | | { |
| | | return getClass().getName() + attrs; |
| | | } |
| | | } |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014-2015 ForgeRock AS. |
| | | * Portions Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.api; |
| | | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.ScheduledExecutorService; |
| | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.DirectoryConfig; |
| | | import org.opends.server.types.InitializationException; |
| | | import org.opends.server.types.ObjectClass; |
| | | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | |
| | | /** |
| | | * This class defines the set of methods and structures that must be |
| | | * implemented by a Directory Server module that can provide usage, |
| | |
| | | * be returned to the client if the corresponding monitor |
| | | * entry is requested. |
| | | */ |
| | | public abstract List<Attribute> getMonitorData(); |
| | | public abstract MonitorData getMonitorData(); |
| | | } |
| | | |
| | |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.MonitorBackendCfg; |
| | | import org.opends.server.api.Backend; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.config.ConfigEntry; |
| | | import org.opends.server.core.AddOperation; |
| | |
| | | final ObjectClass monitorOC = monitorProvider.getMonitorObjectClass(); |
| | | final HashMap<ObjectClass, String> monitorClasses = newObjectClasses(monitorOC, monitorOC.getPrimaryName()); |
| | | |
| | | final List<Attribute> monitorAttrs = monitorProvider.getMonitorData(); |
| | | final HashMap<AttributeType, List<Attribute>> attrMap = new LinkedHashMap<>(monitorAttrs.size() + 1); |
| | | final MonitorData monitorAttrs = monitorProvider.getMonitorData(); |
| | | final Map<AttributeType, List<Attribute>> attrMap = asMap(monitorAttrs); |
| | | |
| | | // Make sure to include the RDN attribute. |
| | | final AVA ava = entryDN.rdn().getFirstAVA(); |
| | | final AttributeType rdnType = ava.getAttributeType(); |
| | | final ByteString rdnValue = ava.getAttributeValue(); |
| | | |
| | | attrMap.put(rdnType, Attributes.createAsList(rdnType, rdnValue)); |
| | | |
| | | // Take the rest of the information from the monitor data. |
| | | return newEntry(entryDN, monitorClasses, attrMap, new HashMap<AttributeType, List<Attribute>>(0)); |
| | | } |
| | | |
| | | private Map<AttributeType, List<Attribute>> asMap(MonitorData monitorAttrs) |
| | | { |
| | | final Map<AttributeType, List<Attribute>> results = new LinkedHashMap<>(monitorAttrs.size() + 1); |
| | | for (final Attribute a : monitorAttrs) |
| | | { |
| | | final AttributeType type = a.getAttributeDescription().getAttributeType(); |
| | | |
| | | List<Attribute> attrs = attrMap.get(type); |
| | | List<Attribute> attrs = results.get(type); |
| | | if (attrs == null) |
| | | { |
| | | attrs = new ArrayList<>(); |
| | | attrMap.put(type, attrs); |
| | | results.put(type, attrs); |
| | | } |
| | | attrs.add(a); |
| | | } |
| | | |
| | | return newEntry(entryDN, monitorClasses, attrMap, new HashMap<AttributeType, List<Attribute>>(0)); |
| | | return results; |
| | | } |
| | | |
| | | private HashMap<ObjectClass, String> newObjectClasses(ObjectClass objectClass, String objectClassName) |
| | |
| | | |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.forgerock.opendj.ldap.schema.Syntax; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | |
| | | import com.sleepycat.je.Environment; |
| | | import com.sleepycat.je.JEVersion; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | try |
| | | { |
| | | List<Attribute> monitorAttrs = new ArrayList<>(); |
| | | final StatsConfig statsConfig = new StatsConfig(); |
| | | |
| | | monitorAttrs.add(Attributes.create("JEVersion", JEVersion.CURRENT_VERSION.getVersionString())); |
| | | |
| | | StatsConfig statsConfig = new StatsConfig(); |
| | | addAttributesForStatsObject(monitorAttrs, "Environment", env.getStats(statsConfig)); |
| | | addAttributesForStatsObject(monitorAttrs, "Transaction", env.getTransactionStats(statsConfig)); |
| | | |
| | | final MonitorData monitorAttrs = new MonitorData(); |
| | | monitorAttrs.add("JEVersion", JEVersion.CURRENT_VERSION.getVersionString()); |
| | | monitorAttrs.addBean(env.getStats(statsConfig), "Environment"); |
| | | monitorAttrs.addBean(env.getTransactionStats(statsConfig), "Transaction"); |
| | | return monitorAttrs; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | return Collections.singletonList(Attributes.create("JEInfo", stackTraceToSingleLineString(e))); |
| | | } |
| | | } |
| | | |
| | | private void addAttributesForStatsObject(List<Attribute> monitorAttrs, String attrPrefix, Object stats) |
| | | { |
| | | for (Method method : stats.getClass().getMethods()) |
| | | { |
| | | final Class<?> returnType = method.getReturnType(); |
| | | if (method.getName().startsWith("get") |
| | | && (returnType.equals(int.class) || returnType.equals(long.class))) |
| | | { |
| | | addStatAttribute(monitorAttrs, attrPrefix, stats, method); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void addStatAttribute(List<Attribute> monitorAttrs, String attrPrefix, Object stats, Method method) |
| | | { |
| | | final Syntax integerSyntax = DirectoryServer.getDefaultIntegerSyntax(); |
| | | try |
| | | { |
| | | // Remove the 'get' from the method name and add the prefix. |
| | | String attrName = attrPrefix + method.getName().substring(3); |
| | | |
| | | AttributeType attrType = DirectoryServer.getAttributeType(attrName, integerSyntax); |
| | | monitorAttrs.add(Attributes.create(attrType, String.valueOf(method.invoke(stats)))); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | MonitorData monitorAttrs = new MonitorData(1); |
| | | monitorAttrs.add("JEInfo", stackTraceToSingleLineString(e)); |
| | | return monitorAttrs; |
| | | } |
| | | } |
| | | } |
| | |
| | | * Header, with the fields enclosed by brackets [] replaced by your own identifying |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2015 ForgeRock AS. |
| | | * Copyright 2015-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.backends.pdb; |
| | | |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.rmi.RemoteException; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | |
| | | import com.persistit.Management.BufferPoolInfo; |
| | | import com.persistit.Management.TreeInfo; |
| | | import com.persistit.Management.VolumeInfo; |
| | | import com.persistit.Management.WrappedRemoteException; |
| | | import com.persistit.Persistit; |
| | | |
| | | /** Monitoring class for PDB, populating cn=monitor statistics using reflection on objects methods. */ |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | try |
| | | { |
| | | List<Attribute> monitorAttrs = new ArrayList<>(); |
| | | monitorAttrs.add(Attributes.create("PDBVersion", db.getManagement().getVersion())); |
| | | MonitorData monitorAttrs = new MonitorData(); |
| | | monitorAttrs.add("PDBVersion", db.getManagement().getVersion()); |
| | | |
| | | for(BufferPoolInfo bufferInfo : db.getManagement().getBufferPoolInfoArray()) |
| | | { |
| | | addAttributesForStatsObject(monitorAttrs, "PDBBuffer", bufferInfo); |
| | | monitorAttrs.addBean(bufferInfo, "PDBBuffer"); |
| | | } |
| | | addAttributesForStatsObject(monitorAttrs, "PDBJournal", db.getManagement().getJournalInfo()); |
| | | addAttributesForStatsObject(monitorAttrs, "PDBTransaction", db.getManagement().getTransactionInfo()); |
| | | monitorAttrs.addBean(db.getManagement().getJournalInfo(), "PDBJournal"); |
| | | monitorAttrs.addBean(db.getManagement().getTransactionInfo(), "PDBTransaction"); |
| | | for (VolumeInfo vol : db.getManagement().getVolumeInfoArray()) |
| | | { |
| | | addAttributesForStatsObject(monitorAttrs, "PDBVolume", vol); |
| | | monitorAttrs.addBean(vol, "PDBVolume"); |
| | | for (TreeInfo tree : db.getManagement().getTreeInfoArray(vol.getName())) |
| | | { |
| | | // For the time being, depth is not reported. |
| | | monitorAttrs.add(Attributes.create("PDBVolumeTree", vol.getName() + tree.getName() |
| | | monitorAttrs.add("PDBVolumeTree", vol.getName() + tree.getName() |
| | | + ", traverse=" + tree.getTraverseCounter() |
| | | + ", fetch=" + tree.getFetchCounter() |
| | | + ", store=" + tree.getStoreCounter() |
| | | + ", remove=" + tree.getRemoveCounter())); |
| | | + ", remove=" + tree.getRemoveCounter()); |
| | | } |
| | | } |
| | | return monitorAttrs; |
| | | } |
| | | catch (RemoteException e) |
| | | catch (ReflectiveOperationException | RemoteException e) |
| | | { |
| | | return Collections.singletonList(Attributes.create("PDBInfo", stackTraceToSingleLineString(e))); |
| | | } |
| | | } |
| | | |
| | | private void addAttributesForStatsObject(List<Attribute> monitorAttrs, String attrPrefix, Object stats) |
| | | throws RemoteException |
| | | { |
| | | for (Method method : stats.getClass().getMethods()) |
| | | { |
| | | if (method.getName().startsWith("get")) |
| | | { |
| | | Class<?> returnType = method.getReturnType(); |
| | | if (returnType.equals(int.class) || returnType.equals(long.class) || returnType.equals(String.class)) |
| | | { |
| | | addStatAttribute(monitorAttrs, attrPrefix, stats, method, 3); |
| | | } |
| | | } |
| | | else if (method.getName().startsWith("is") && method.getReturnType().equals(boolean.class)) |
| | | { |
| | | addStatAttribute(monitorAttrs, attrPrefix, stats, method, 2); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void addStatAttribute(List<Attribute> monitorAttrs, String attrPrefix, Object stats, |
| | | Method method, int skipNameLen) throws WrappedRemoteException |
| | | { |
| | | try |
| | | { |
| | | String attrName = attrPrefix + method.getName().substring(skipNameLen); |
| | | monitorAttrs.add(Attributes.create(attrName, String.valueOf(method.invoke(stats)))); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new WrappedRemoteException(e); |
| | | MonitorData monitorAttrs = new MonitorData(1); |
| | | monitorAttrs.add("PDBInfo", stackTraceToSingleLineString(e)); |
| | | return monitorAttrs; |
| | | } |
| | | } |
| | | } |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014-2015 ForgeRock AS. |
| | | * Portions Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.backends.pluggable; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeBuilder; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.SearchFilter; |
| | | import org.opends.server.util.TimeThread; |
| | | |
| | |
| | | return name; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves a set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is requested. |
| | | * |
| | | * @return A set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is requested. |
| | | */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | List<Attribute> monitorAttrs = new ArrayList<>(); |
| | | MonitorData monitorAttrs = new MonitorData(5); |
| | | |
| | | AttributeBuilder needReindex = createNeedReindex("need-reindex"); |
| | | if (needReindex.size() > 0) |
| | | Collection<String> needReindexValues = createNeedReindexValues(); |
| | | if (needReindexValues.size() > 0) |
| | | { |
| | | monitorAttrs.add(needReindex.toAttribute()); |
| | | monitorAttrs.add("need-reindex", needReindexValues); |
| | | } |
| | | |
| | | if (filterUseEnabled) |
| | | { |
| | | monitorAttrs.add(createAttribute("filter-use-startTime", startTimeStamp)); |
| | | monitorAttrs.add(createFilterUse("filter-use")); |
| | | monitorAttrs.add(createAttribute("filter-use-indexed", indexedSearchCount)); |
| | | monitorAttrs.add(createAttribute("filter-use-unindexed", unindexedSearchCount)); |
| | | monitorAttrs.add("filter-use-startTime", startTimeStamp); |
| | | monitorAttrs.add("filter-use", createFilterUseValues()); |
| | | monitorAttrs.add("filter-use-indexed", indexedSearchCount); |
| | | monitorAttrs.add("filter-use-unindexed", unindexedSearchCount); |
| | | } |
| | | |
| | | return monitorAttrs; |
| | | } |
| | | |
| | | private AttributeBuilder createNeedReindex(String attrName) |
| | | private Collection<String> createNeedReindexValues() |
| | | { |
| | | AttributeBuilder needReindex = new AttributeBuilder(attrName); |
| | | Collection<String> values = new ArrayList<>(); |
| | | for (EntryContainer ec : rootContainer.getEntryContainers()) |
| | | { |
| | | for (Tree tree : ec.listTrees()) |
| | | { |
| | | if (tree instanceof Index && !((Index) tree).isTrusted()) |
| | | { |
| | | needReindex.add(tree.getName().toString()); |
| | | values.add(tree.getName().toString()); |
| | | } |
| | | } |
| | | } |
| | | return needReindex; |
| | | return values; |
| | | } |
| | | |
| | | private Attribute createFilterUse(String attrName) |
| | | private List<String> createFilterUseValues() |
| | | { |
| | | AttributeBuilder builder = new AttributeBuilder(attrName); |
| | | |
| | | List<String> values = new ArrayList<>(); |
| | | StringBuilder value = new StringBuilder(); |
| | | synchronized (filterToStats) |
| | | { |
| | |
| | | value.append(" hits:").append(entry.getValue().hits.get()); |
| | | value.append(" maxmatches:").append(entry.getValue().maxMatchingEntries); |
| | | value.append(" message:").append(entry.getValue().failureReason); |
| | | builder.add(value.toString()); |
| | | values.add(value.toString()); |
| | | value.setLength(0); |
| | | } |
| | | } |
| | | return builder.toAttribute(); |
| | | } |
| | | |
| | | private Attribute createAttribute(String attrName, Object value) |
| | | { |
| | | return Attributes.create(attrName, String.valueOf(value)); |
| | | return values; |
| | | } |
| | | |
| | | /** |
| | |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.AlertGenerator; |
| | | import org.opends.server.api.ClientConnection; |
| | |
| | | import org.opends.server.protocols.internal.SearchRequest; |
| | | import org.opends.server.protocols.jmx.Credential; |
| | | import org.opends.server.protocols.jmx.JmxClientConnection; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.InvokableMethod; |
| | |
| | | stringValues.add(value.toString()); |
| | | } |
| | | |
| | | String[] valueArray = new String[stringValues.size()]; |
| | | stringValues.toArray(valueArray); |
| | | String[] valueArray = stringValues.toArray(new String[stringValues.size()]); |
| | | return new Attribute(name, valueArray); |
| | | } |
| | | else |
| | |
| | | { |
| | | logger.traceException(e); |
| | | } |
| | | |
| | | // It's possible that this is a monitor attribute rather than a |
| | | // configurable one. Check all of those. |
| | | AttributeType attrType = DirectoryServer.getAttributeType(name); |
| | | |
| | | monitorLoop: |
| | | for (MonitorProvider<? extends MonitorProviderCfg> monitor : |
| | | monitorProviders) |
| | | Attribute attr = getJmxAttribute(name); |
| | | if (attr != null) |
| | | { |
| | | for (org.opends.server.types.Attribute a : monitor.getMonitorData()) |
| | | { |
| | | if (attrType.equals(a.getAttributeDescription().getAttributeType())) |
| | | { |
| | | if (a.isEmpty()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | Iterator<ByteString> iterator = a.iterator(); |
| | | ByteString value = iterator.next(); |
| | | |
| | | if (iterator.hasNext()) |
| | | { |
| | | List<String> stringValues = newArrayList(value.toString()); |
| | | while (iterator.hasNext()) |
| | | { |
| | | value = iterator.next(); |
| | | stringValues.add(value.toString()); |
| | | } |
| | | |
| | | String[] valueArray = new String[stringValues.size()]; |
| | | stringValues.toArray(valueArray); |
| | | attrList.add(new Attribute(name, valueArray)); |
| | | } |
| | | else |
| | | { |
| | | attrList.add(new Attribute(name, value.toString())); |
| | | } |
| | | break monitorLoop; |
| | | } |
| | | } |
| | | attrList.add(attr); |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | package org.opends.server.extensions; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.SortedMap; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigChangeResult; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.EntryCacheCfg; |
| | | import org.opends.server.api.Backend; |
| | | import org.opends.server.api.BackendInitializationListener; |
| | | import org.opends.server.api.EntryCache; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.types.Attribute; |
| | | import org.forgerock.opendj.config.server.ConfigChangeResult; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.InitializationException; |
| | |
| | | return new ConfigChangeResult(); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | // The sum of cache hits of all active entry cache implementations. |
| | | long entryCacheHits = 0; |
| | |
| | | ); |
| | | } catch (Exception e) { |
| | | logger.traceException(e); |
| | | return Collections.emptyList(); |
| | | return new MonitorData(0); |
| | | } |
| | | } |
| | | |
| | |
| | | package org.opends.server.extensions; |
| | | |
| | | import static org.opends.messages.CoreMessages.*; |
| | | import static org.opends.server.core.DirectoryServer.*; |
| | | import static org.opends.server.util.CollectionUtils.*; |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | |
| | |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.AlertGenerator; |
| | | import org.opends.server.api.DiskSpaceMonitorHandler; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.api.ServerShutdownListener; |
| | | import org.opends.server.core.DirectoryServer; |
| | |
| | | throws ConfigException, InitializationException { |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() { |
| | | final List<Attribute> monitorAttrs = new ArrayList<>(); |
| | | monitorAttrs.add(attr("disk-dir", getDefaultStringSyntax(), directory.getPath())); |
| | | monitorAttrs.add(attr("disk-free", getDefaultIntegerSyntax(), getFreeSpace())); |
| | | monitorAttrs.add(attr("disk-state", getDefaultStringSyntax(), getState())); |
| | | public MonitorData getMonitorData() |
| | | { |
| | | final MonitorData monitorAttrs = new MonitorData(3); |
| | | monitorAttrs.add("disk-dir", directory.getPath()); |
| | | monitorAttrs.add("disk-free", getFreeSpace()); |
| | | monitorAttrs.add("disk-state", getState()); |
| | | return monitorAttrs; |
| | | } |
| | | |
| | |
| | | // Not used... |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getMonitorInstanceName() { |
| | | return INSTANCENAME; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() { |
| | | return new ArrayList<>(); |
| | | public MonitorData getMonitorData() |
| | | { |
| | | return new MonitorData(0); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void run() |
| | | { |
| | |
| | | */ |
| | | package org.opends.server.extensions; |
| | | |
| | | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.LocalizableMessageDescriptor; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.types.SearchFilter; |
| | | |
| | | |
| | | |
| | | /** |
| | | * This class provides some common tools to all entry cache implementations. |
| | | */ |
| | | /** This class provides some common tools to all entry cache implementations. */ |
| | | public class EntryCacheCommon |
| | | { |
| | | |
| | |
| | | */ |
| | | public static enum ConfigPhase |
| | | { |
| | | /** |
| | | * Indicates that entry cache is in initialization check phase. |
| | | */ |
| | | /** Indicates that entry cache is in initialization check phase. */ |
| | | PHASE_INIT, |
| | | |
| | | /** |
| | | * Indicates that entry cache is in configuration check phase. |
| | | */ |
| | | /** Indicates that entry cache is in configuration check phase. */ |
| | | PHASE_ACCEPTABLE, |
| | | |
| | | /** |
| | | * Indicates that entry cache is applying its configuration. |
| | | */ |
| | | /** Indicates that entry cache is applying its configuration. */ |
| | | PHASE_APPLY |
| | | } |
| | | |
| | |
| | | * |
| | | * @return A set of generic attributes containing monitor data. |
| | | */ |
| | | public static List<Attribute> getGenericMonitorData( |
| | | public static MonitorData getGenericMonitorData( |
| | | Long cacheHits, |
| | | Long cacheMisses, |
| | | Long cacheSize, |
| | |
| | | Long cacheCount, |
| | | Long maxCacheCount) |
| | | { |
| | | List<Attribute> attrs = new ArrayList<>(); |
| | | MonitorData attrs = new MonitorData(); |
| | | |
| | | if (cacheHits != null) |
| | | { |
| | | attrs |
| | | .add(Attributes.create("entryCacheHits", cacheHits.toString())); |
| | | attrs.add("entryCacheHits", cacheHits); |
| | | |
| | | // Cache misses is required to get cache tries and hit ratio. |
| | | if (cacheMisses != null) |
| | | { |
| | | Long cacheTries = cacheHits + cacheMisses; |
| | | attrs.add(Attributes.create("entryCacheTries", cacheTries |
| | | .toString())); |
| | | attrs.add("entryCacheTries", cacheTries); |
| | | |
| | | Double hitRatioRaw = cacheTries > 0 ? cacheHits.doubleValue() |
| | | / cacheTries.doubleValue() : cacheHits.doubleValue() / 1; |
| | | Double hitRatio = hitRatioRaw * 100D; |
| | | attrs.add(Attributes.create("entryCacheHitRatio", Long |
| | | .toString(hitRatio.longValue()))); |
| | | attrs.add("entryCacheHitRatio", hitRatio); |
| | | } |
| | | } |
| | | |
| | | if (cacheSize != null) |
| | | { |
| | | attrs.add(Attributes.create("currentEntryCacheSize", cacheSize |
| | | .toString())); |
| | | } |
| | | |
| | | if (maxCacheSize != null) |
| | | { |
| | | attrs.add(Attributes.create("maxEntryCacheSize", maxCacheSize |
| | | .toString())); |
| | | } |
| | | |
| | | if (cacheCount != null) |
| | | { |
| | | attrs.add(Attributes.create("currentEntryCacheCount", cacheCount |
| | | .toString())); |
| | | } |
| | | |
| | | if (maxCacheCount != null) |
| | | { |
| | | attrs.add(Attributes.create("maxEntryCacheCount", maxCacheCount |
| | | .toString())); |
| | | } |
| | | attrs.addIfNotNull("currentEntryCacheSize", cacheSize); |
| | | attrs.addIfNotNull("maxEntryCacheSize", maxCacheSize); |
| | | attrs.addIfNotNull("currentEntryCacheCount", cacheCount); |
| | | attrs.addIfNotNull("maxEntryCacheCount", maxCacheCount); |
| | | |
| | | return attrs; |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | import static org.opends.messages.ExtensionMessages.*; |
| | | |
| | | import java.util.*; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReadWriteLock; |
| | |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigChangeResult; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.forgerock.util.Utils; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.EntryCacheCfg; |
| | | import org.opends.server.admin.std.server.FIFOEntryCacheCfg; |
| | | import org.opends.server.api.Backend; |
| | | import org.opends.server.api.EntryCache; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.CacheEntry; |
| | | import org.forgerock.opendj.config.server.ConfigChangeResult; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.InitializationException; |
| | | import org.opends.server.types.SearchFilter; |
| | |
| | | return errorHandler.getIsAcceptable(); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | try { |
| | | return EntryCacheCommon.getGenericMonitorData( |
| | | Long.valueOf(cacheHits.longValue()), |
| | | cacheHits.longValue(), |
| | | // If cache misses is maintained by default cache |
| | | // get it from there and if not point to itself. |
| | | DirectoryServer.getEntryCache().getCacheMisses(), |
| | | null, |
| | | Long.valueOf(maxAllowedMemory), |
| | | maxAllowedMemory, |
| | | Long.valueOf(dnMap.size()), |
| | | Long.valueOf( |
| | | (maxEntries != Integer.MAX_VALUE && maxEntries != Long.MAX_VALUE) ? maxEntries : 0) |
| | | ); |
| | | } catch (Exception e) { |
| | | logger.traceException(e); |
| | | return Collections.emptyList(); |
| | | return new MonitorData(0); |
| | | } |
| | | } |
| | | |
| | |
| | | import java.lang.ref.ReferenceQueue; |
| | | import java.lang.ref.SoftReference; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigChangeResult; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.util.Utils; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | |
| | | import org.opends.server.api.Backend; |
| | | import org.opends.server.api.DirectoryThread; |
| | | import org.opends.server.api.EntryCache; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.CacheEntry; |
| | | import org.forgerock.opendj.config.server.ConfigChangeResult; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.InitializationException; |
| | |
| | | } |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | try { |
| | | return EntryCacheCommon.getGenericMonitorData( |
| | | Long.valueOf(cacheHits.longValue()), |
| | | cacheHits.longValue(), |
| | | // If cache misses is maintained by default cache |
| | | // get it from there and if not point to itself. |
| | | DirectoryServer.getEntryCache().getCacheMisses(), |
| | |
| | | ); |
| | | } catch (Exception e) { |
| | | logger.traceException(e); |
| | | return Collections.emptyList(); |
| | | return new MonitorData(0); |
| | | } |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Long getCacheCount() |
| | | { |
| | |
| | | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | import java.util.Collection; |
| | | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.Backend; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.schema.BooleanSyntax; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.opends.server.types.*; |
| | | import org.opends.server.types.DirectoryConfig; |
| | | import org.opends.server.types.ObjectClass; |
| | | |
| | | /** |
| | | * This class implements a monitor provider that will report generic information |
| | |
| | | public class BackendMonitor |
| | | extends MonitorProvider<MonitorProviderCfg> |
| | | { |
| | | /** The attribute type that will be used to report the backend ID. */ |
| | | private AttributeType backendIDType; |
| | | /** The attribute type that will be used to report the set of base DNs. */ |
| | | private AttributeType baseDNType; |
| | | /** The attribute type that will be used to report the number of entries. */ |
| | | private AttributeType entryCountType; |
| | | /** The attribute type that will be used to report the number of entries per base DN. */ |
| | | private AttributeType baseDNEntryCountType; |
| | | /** The attribute type that will be used to indicate if a backend is private. */ |
| | | private AttributeType isPrivateType; |
| | | /** The attribute type that will be used to report the writability mode. */ |
| | | private AttributeType writabilityModeType; |
| | | |
| | | /** The backend with which this monitor is associated. */ |
| | | private Backend<?> backend; |
| | | |
| | |
| | | public void initializeMonitorProvider(MonitorProviderCfg configuration) |
| | | { |
| | | monitorName = backend.getBackendID() + " Backend"; |
| | | |
| | | backendIDType = DirectoryServer.getAttributeType(ATTR_MONITOR_BACKEND_ID); |
| | | baseDNType = DirectoryServer.getAttributeType(ATTR_MONITOR_BACKEND_BASE_DN); |
| | | entryCountType = DirectoryServer.getAttributeType(ATTR_MONITOR_BACKEND_ENTRY_COUNT); |
| | | baseDNEntryCountType = DirectoryServer.getAttributeType(ATTR_MONITOR_BASE_DN_ENTRY_COUNT); |
| | | isPrivateType = DirectoryServer.getAttributeType(ATTR_MONITOR_BACKEND_IS_PRIVATE); |
| | | writabilityModeType = DirectoryServer.getAttributeType(ATTR_MONITOR_BACKEND_WRITABILITY_MODE); |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | LinkedList<Attribute> attrs = new LinkedList<>(); |
| | | |
| | | attrs.add(Attributes.create(backendIDType, backend.getBackendID())); |
| | | |
| | | DN[] baseDNs = backend.getBaseDNs(); |
| | | |
| | | AttributeBuilder builder = new AttributeBuilder(baseDNType); |
| | | builder.addAllStrings(Arrays.asList(baseDNs)); |
| | | attrs.add(builder.toAttribute()); |
| | | MonitorData attrs = new MonitorData(6); |
| | | attrs.add(ATTR_MONITOR_BACKEND_ID, backend.getBackendID()); |
| | | attrs.add(ATTR_MONITOR_BACKEND_BASE_DN, Arrays.asList(baseDNs)); |
| | | attrs.add(ATTR_MONITOR_BACKEND_IS_PRIVATE, backend.isPrivateBackend()); |
| | | attrs.add(ATTR_MONITOR_BACKEND_ENTRY_COUNT, backend.getEntryCount()); |
| | | attrs.add(ATTR_MONITOR_BASE_DN_ENTRY_COUNT, getBackendEntryCounts(baseDNs)); |
| | | attrs.add(ATTR_MONITOR_BACKEND_WRITABILITY_MODE, backend.getWritabilityMode()); |
| | | return attrs; |
| | | } |
| | | |
| | | attrs.add(Attributes.create(isPrivateType, BooleanSyntax |
| | | .createBooleanValue(backend.isPrivateBackend()))); |
| | | |
| | | long backendCount = backend.getEntryCount(); |
| | | attrs.add(Attributes.create(entryCountType, String |
| | | .valueOf(backendCount))); |
| | | |
| | | builder = new AttributeBuilder(baseDNEntryCountType); |
| | | private Collection<String> getBackendEntryCounts(DN[] baseDNs) |
| | | { |
| | | Collection<String> results = new ArrayList<>(); |
| | | if (baseDNs.length != 1) |
| | | { |
| | | for (DN dn : baseDNs) |
| | |
| | | { |
| | | logger.traceException(ex); |
| | | } |
| | | builder.add(entryCount + " " + dn); |
| | | results.add(entryCount + " " + dn); |
| | | } |
| | | } |
| | | else |
| | |
| | | // This is done to avoid recalculating the number of entries |
| | | // using the numSubordinates method in the case where the |
| | | // backend has a single base DN. |
| | | builder.add(backendCount + " " + baseDNs[0]); |
| | | results.add(backend.getEntryCount() + " " + baseDNs[0]); |
| | | } |
| | | attrs.add(builder.toAttribute()); |
| | | |
| | | attrs.add(Attributes.create(writabilityModeType, String |
| | | .valueOf(backend.getWritabilityMode()))); |
| | | |
| | | return attrs; |
| | | return results; |
| | | } |
| | | } |
| | | |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014-2015 ForgeRock AS. |
| | | * Portions Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | | import java.util.List; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.TreeMap; |
| | | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.ClientConnectionMonitorProviderCfg; |
| | | import org.opends.server.api.ClientConnection; |
| | | import org.opends.server.api.ConnectionHandler; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeBuilder; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Retrieves a set of attributes containing monitor data that should |
| | | * be returned to the client if the corresponding monitor entry is |
| | | * requested. |
| | | * |
| | | * @return A set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry |
| | | * is requested. |
| | | */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | // Re-order the connections by connection ID. |
| | | TreeMap<Long, ClientConnection> connMap = new TreeMap<>(); |
| | | |
| | | if (handler == null) |
| | | if (handler != null) |
| | | { |
| | | for (ClientConnection conn : handler.getClientConnections()) |
| | | { |
| | | connMap.put(conn.getConnectionID(), conn); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // Get information about all the available connections. |
| | | for (ConnectionHandler<?> hdl : DirectoryServer.getConnectionHandlers()) |
| | |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | for (ClientConnection conn : handler.getClientConnections()) |
| | | { |
| | | connMap.put(conn.getConnectionID(), conn); |
| | | } |
| | | } |
| | | |
| | | AttributeBuilder builder = new AttributeBuilder("connection"); |
| | | Collection<String> connectionSummaries = new ArrayList<>(connMap.values().size()); |
| | | for (ClientConnection conn : connMap.values()) |
| | | { |
| | | builder.add(conn.getMonitorSummary()); |
| | | connectionSummaries.add(conn.getMonitorSummary()); |
| | | } |
| | | return builder.toAttributeList(); |
| | | MonitorData result = new MonitorData(1); |
| | | result.add("connection", connectionSummaries); |
| | | return result; |
| | | } |
| | | } |
| | |
| | | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | |
| | | import org.opends.server.admin.std.server.ConnectionHandlerCfg; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.ClientConnection; |
| | | import org.opends.server.api.ConnectionHandler; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.opends.server.types.*; |
| | | import org.opends.server.types.DirectoryConfig; |
| | | import org.opends.server.types.HostPort; |
| | | import org.opends.server.types.ObjectClass; |
| | | |
| | | /** |
| | | * This class implements a monitor provider that will report generic information |
| | |
| | | public class ConnectionHandlerMonitor |
| | | extends MonitorProvider<MonitorProviderCfg> |
| | | { |
| | | /** The attribute type that will be used to report the established connections. */ |
| | | private AttributeType connectionsType; |
| | | |
| | | /** The attribute type that will be used to report the listeners. */ |
| | | private AttributeType listenerType; |
| | | |
| | | /** |
| | | * The attribute type that will be used to report the number of established |
| | | * client connections. |
| | | */ |
| | | private AttributeType numConnectionsType; |
| | | |
| | | /** The attribute type that will be used to report the protocol. */ |
| | | private AttributeType protocolType; |
| | | |
| | | /** The attribute type that will be used to report the config dn . */ |
| | | private AttributeType configDnType; |
| | | |
| | | /** The connection handler with which this monitor is associated. */ |
| | | private ConnectionHandler<?> connectionHandler; |
| | | |
| | |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeMonitorProvider(MonitorProviderCfg configuration) |
| | | { |
| | | monitorName = connectionHandler.getConnectionHandlerName(); |
| | | |
| | | connectionsType = DirectoryServer.getAttributeType(ATTR_MONITOR_CONNHANDLER_CONNECTION); |
| | | listenerType = DirectoryServer.getAttributeType(ATTR_MONITOR_CONNHANDLER_LISTENER); |
| | | numConnectionsType = DirectoryServer.getAttributeType(ATTR_MONITOR_CONNHANDLER_NUMCONNECTIONS); |
| | | protocolType = DirectoryServer.getAttributeType(ATTR_MONITOR_CONNHANDLER_PROTOCOL); |
| | | configDnType = DirectoryServer.getAttributeType(ATTR_MONITOR_CONFIG_DN); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | LinkedList<Attribute> attrs = new LinkedList<>(); |
| | | |
| | | // Configuration DN |
| | | attrs.add(Attributes.create(configDnType, connectionHandler.getComponentEntryDN().toString())); |
| | | |
| | | int numConnections = 0; |
| | | LinkedList<ClientConnection> conns = new LinkedList<>(connectionHandler.getClientConnections()); |
| | | LinkedList<HostPort> listeners = new LinkedList<>(connectionHandler.getListeners()); |
| | | |
| | | attrs.add(Attributes.create(protocolType, connectionHandler.getProtocol())); |
| | | final MonitorData attrs = new MonitorData(5); |
| | | attrs.add(ATTR_MONITOR_CONFIG_DN, connectionHandler.getComponentEntryDN()); |
| | | attrs.add(ATTR_MONITOR_CONNHANDLER_PROTOCOL, connectionHandler.getProtocol()); |
| | | |
| | | if (!listeners.isEmpty()) |
| | | { |
| | | AttributeBuilder builder = new AttributeBuilder(listenerType); |
| | | builder.addAllStrings(listeners); |
| | | attrs.add(builder.toAttribute()); |
| | | attrs.add(ATTR_MONITOR_CONNHANDLER_LISTENER, listeners); |
| | | } |
| | | |
| | | attrs.add(ATTR_MONITOR_CONNHANDLER_NUMCONNECTIONS, conns.size()); |
| | | if (!conns.isEmpty()) |
| | | { |
| | | AttributeBuilder builder = new AttributeBuilder(connectionsType); |
| | | Collection<String> connectionSummaries = new ArrayList<>(); |
| | | for (ClientConnection c : conns) |
| | | { |
| | | numConnections++; |
| | | builder.add(c.getMonitorSummary()); |
| | | connectionSummaries.add(c.getMonitorSummary()); |
| | | } |
| | | attrs.add(builder.toAttribute()); |
| | | attrs.add(ATTR_MONITOR_CONNHANDLER_CONNECTION, connectionSummaries); |
| | | } |
| | | |
| | | attrs.add(Attributes.create(numConnectionsType, String |
| | | .valueOf(numConnections))); |
| | | |
| | | return attrs; |
| | | } |
| | | } |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2008-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014-2015 ForgeRock AS. |
| | | * Portions Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import static org.opends.messages.ConfigMessages.*; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.EntryCacheCfg; |
| | | import org.opends.server.admin.std.server.EntryCacheMonitorProviderCfg; |
| | | import org.opends.server.api.EntryCache; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.config.ConfigConstants; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.types.Attribute; |
| | | |
| | | import static org.opends.messages.ConfigMessages.*; |
| | | |
| | | /** |
| | | * This class defines a Directory Server monitor provider that can be used to |
| | |
| | | } |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getMonitorInstanceName() |
| | | { |
| | | return monitorName; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | if (entryCache != null && |
| | | monitorConfiguration != null && |
| | |
| | | // Get monitor data from the cache. |
| | | return entryCache.getMonitorData(); |
| | | } |
| | | return Collections.emptyList(); |
| | | return new MonitorData(0); |
| | | } |
| | | } |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2008-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014-2015 ForgeRock AS. |
| | | * Portions Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | |
| | | import java.lang.management.ManagementFactory; |
| | | import java.lang.management.MemoryPoolMXBean; |
| | | import java.lang.management.MemoryUsage; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.MemoryUsageMonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | /** |
| | |
| | | |
| | | |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | ArrayList<Attribute> attrs = new ArrayList<>(); |
| | | MonitorData attrs = new MonitorData(); |
| | | |
| | | for (GarbageCollectorMXBean gc : |
| | | ManagementFactory.getGarbageCollectorMXBeans()) |
| | |
| | | gcSafeNames.put(gcName, safeName); |
| | | } |
| | | |
| | | attrs.add(createAttribute(safeName + "-total-collection-count", gcCount)); |
| | | attrs.add(createAttribute(safeName + "-total-collection-duration", gcTime)); |
| | | attrs.add(createAttribute(safeName + "-average-collection-duration", avgGCDuration)); |
| | | attrs.add(createAttribute(safeName + "-recent-collection-duration", recentGCDuration)); |
| | | attrs.add(safeName + "-total-collection-count", gcCount); |
| | | attrs.add(safeName + "-total-collection-duration", gcTime); |
| | | attrs.add(safeName + "-average-collection-duration", avgGCDuration); |
| | | attrs.add(safeName + "-recent-collection-duration", recentGCDuration); |
| | | } |
| | | |
| | | for (MemoryPoolMXBean mp : ManagementFactory.getMemoryPoolMXBeans()) |
| | |
| | | } |
| | | |
| | | long currentBytesUsed = currentUsage != null ? currentUsage.getUsed() : 0; |
| | | attrs.add(createAttribute(safeName + "-current-bytes-used", currentBytesUsed)); |
| | | attrs.add(safeName + "-current-bytes-used", currentBytesUsed); |
| | | |
| | | long collectionBytesUsed = collectionUsage != null ? collectionUsage.getUsed() : 0; |
| | | attrs.add(createAttribute(safeName + "-bytes-used-after-last-collection", collectionBytesUsed)); |
| | | attrs.add(safeName + "-bytes-used-after-last-collection", collectionBytesUsed); |
| | | } |
| | | |
| | | return attrs; |
| | | } |
| | | |
| | | private Attribute createAttribute(String name, Object value) |
| | | { |
| | | return Attributes.create(name, String.valueOf(value)); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a "safe" version of the provided name, which is acceptable for |
| | | * use as part of an attribute name. |
| | |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | | import static org.opends.server.core.DirectoryServer.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.extensions.ParallelWorkQueue; |
| | | import org.opends.server.types.Attribute; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | /** |
| | |
| | | return "Work Queue"; |
| | | } |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void run() |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Retrieves a set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is requested. |
| | | * |
| | | * @return A set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is |
| | | * requested. |
| | | */ |
| | | @Override |
| | | public ArrayList<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | int backlog = workQueue.size(); |
| | | totalBacklog += backlog; |
| | |
| | | } |
| | | |
| | | long averageBacklog = (long) (1.0 * totalBacklog / numPolls); |
| | | long opsSubmitted = workQueue.getOpsSubmitted(); |
| | | |
| | | ArrayList<Attribute> monitorAttrs = new ArrayList<>(); |
| | | putAttribute(monitorAttrs, ATTR_CURRENT_BACKLOG, backlog); |
| | | putAttribute(monitorAttrs, ATTR_AVERAGE_BACKLOG, averageBacklog); |
| | | putAttribute(monitorAttrs, ATTR_MAX_BACKLOG, maxBacklog); |
| | | // The total number of operations submitted. |
| | | putAttribute(monitorAttrs, ATTR_OPS_SUBMITTED, opsSubmitted); |
| | | |
| | | final MonitorData monitorAttrs = new MonitorData(4); |
| | | monitorAttrs.add(ATTR_CURRENT_BACKLOG, backlog); |
| | | monitorAttrs.add(ATTR_AVERAGE_BACKLOG, averageBacklog); |
| | | monitorAttrs.add(ATTR_MAX_BACKLOG, maxBacklog); |
| | | monitorAttrs.add(ATTR_OPS_SUBMITTED, workQueue.getOpsSubmitted()); |
| | | return monitorAttrs; |
| | | } |
| | | |
| | | private void putAttribute(ArrayList<Attribute> monitorAttrs, String attrName, Object value) |
| | | { |
| | | AttributeType attrType = getAttributeType(attrName, getDefaultIntegerSyntax()); |
| | | monitorAttrs.add(Attributes.create(attrType, String.valueOf(value))); |
| | | } |
| | | } |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014-2015 ForgeRock AS. |
| | | * Portions Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | | import static org.opends.server.util.CollectionUtils.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | import java.util.TreeMap; |
| | | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.StackTraceMonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeBuilder; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | Map<Thread,StackTraceElement[]> threadStacks = Thread.getAllStackTraces(); |
| | | |
| | |
| | | orderedStacks.put(e.getKey().getId(), e); |
| | | } |
| | | |
| | | AttributeBuilder builder = new AttributeBuilder("jvmThread"); |
| | | Collection<String> jvmThreads = new ArrayList<>(); |
| | | for (Map.Entry<Thread,StackTraceElement[]> e : orderedStacks.values()) |
| | | { |
| | | Thread t = e.getKey(); |
| | | StackTraceElement[] stackElements = e.getValue(); |
| | | |
| | | long id = t.getId(); |
| | | builder.add("id=" + id + " ---------- " + t.getName() + " ----------"); |
| | | long tid = t.getId(); |
| | | jvmThreads.add("id=" + tid + " ---------- " + t.getName() + " ----------"); |
| | | |
| | | // Create an attribute for the stack trace. |
| | | if (stackElements != null) |
| | | { |
| | | for (int j=0; j < stackElements.length; j++) |
| | | for (int j = 0; j < stackElements.length; j++) |
| | | { |
| | | StringBuilder buffer = new StringBuilder(); |
| | | buffer.append("id="); |
| | | buffer.append(id); |
| | | buffer.append(" frame["); |
| | | buffer.append(j); |
| | | buffer.append("]="); |
| | | |
| | | buffer.append(stackElements[j].getClassName()); |
| | | buffer.append("."); |
| | | buffer.append(stackElements[j].getMethodName()); |
| | | buffer.append("("); |
| | | buffer.append(stackElements[j].getFileName()); |
| | | buffer.append(":"); |
| | | if (stackElements[j].isNativeMethod()) |
| | | { |
| | | buffer.append("native"); |
| | | } |
| | | else |
| | | { |
| | | buffer.append(stackElements[j].getLineNumber()); |
| | | } |
| | | buffer.append(")"); |
| | | |
| | | builder.add(buffer.toString()); |
| | | jvmThreads.add(toString(tid, j, stackElements[j])); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return newArrayList(builder.toAttribute()); |
| | | MonitorData result = new MonitorData(1); |
| | | result.add("jvmThread", jvmThreads); |
| | | return result; |
| | | } |
| | | |
| | | private String toString(long tid, int frame, StackTraceElement stackElement) |
| | | { |
| | | StringBuilder buffer = new StringBuilder(); |
| | | buffer.append("id=").append(tid); |
| | | buffer.append(" frame[").append(frame).append("]="); |
| | | |
| | | buffer.append(stackElement.getClassName()); |
| | | buffer.append("."); |
| | | buffer.append(stackElement.getMethodName()); |
| | | buffer.append("("); |
| | | buffer.append(stackElement.getFileName()); |
| | | buffer.append(":"); |
| | | if (stackElement.isNativeMethod()) |
| | | { |
| | | buffer.append("native"); |
| | | } |
| | | else |
| | | { |
| | | buffer.append(stackElement.getLineNumber()); |
| | | } |
| | | buffer.append(")"); |
| | | return buffer.toString(); |
| | | } |
| | | } |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2012-2015 ForgeRock AS. |
| | | * Portions Copyright 2012-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | |
| | | import java.lang.management.ManagementFactory; |
| | | import java.lang.management.RuntimeMXBean; |
| | | import java.net.InetAddress; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.SystemInfoMonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeBuilder; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | ArrayList<Attribute> attrs = new ArrayList<>(13); |
| | | MonitorData attrs = new MonitorData(13); |
| | | |
| | | attrs.add(createAttribute("javaVersion", System.getProperty("java.version"))); |
| | | attrs.add(createAttribute("javaVendor", System.getProperty("java.vendor"))); |
| | | attrs.add(createAttribute("jvmVersion", System.getProperty("java.vm.version"))); |
| | | attrs.add(createAttribute("jvmVendor", System.getProperty("java.vm.vendor"))); |
| | | attrs.add(createAttribute("javaHome", System.getProperty("java.home"))); |
| | | attrs.add(createAttribute("classPath", System.getProperty("java.class.path"))); |
| | | attrs.add(createAttribute("workingDirectory", System.getProperty("user.dir"))); |
| | | attrs.add("javaVersion", System.getProperty("java.version")); |
| | | attrs.add("javaVendor", System.getProperty("java.vendor")); |
| | | attrs.add("jvmVersion", System.getProperty("java.vm.version")); |
| | | attrs.add("jvmVendor", System.getProperty("java.vm.vendor")); |
| | | attrs.add("javaHome", System.getProperty("java.home")); |
| | | attrs.add("classPath", System.getProperty("java.class.path")); |
| | | attrs.add("workingDirectory", System.getProperty("user.dir")); |
| | | |
| | | String osInfo = System.getProperty("os.name") + " " + |
| | | System.getProperty("os.version") + " " + |
| | | System.getProperty("os.arch"); |
| | | attrs.add(createAttribute("operatingSystem", osInfo)); |
| | | attrs.add("operatingSystem", osInfo); |
| | | String sunOsArchDataModel = System.getProperty("sun.arch.data.model"); |
| | | if (sunOsArchDataModel != null) |
| | | { |
| | |
| | | { |
| | | jvmArch += "-bit"; |
| | | } |
| | | attrs.add(createAttribute("jvmArchitecture", jvmArch)); |
| | | attrs.add("jvmArchitecture", jvmArch); |
| | | } |
| | | else |
| | | { |
| | | attrs.add(createAttribute("jvmArchitecture","unknown")); |
| | | attrs.add("jvmArchitecture", "unknown"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | attrs.add(createAttribute("systemName", |
| | | InetAddress.getLocalHost().getCanonicalHostName())); |
| | | attrs.add("systemName", InetAddress.getLocalHost().getCanonicalHostName()); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | |
| | | |
| | | Runtime runtime = Runtime.getRuntime(); |
| | | attrs.add(createAttribute("availableCPUs", runtime.availableProcessors())); |
| | | attrs.add(createAttribute("maxMemory", runtime.maxMemory())); |
| | | attrs.add(createAttribute("usedMemory", runtime.totalMemory())); |
| | | attrs.add(createAttribute("freeUsedMemory", runtime.freeMemory())); |
| | | attrs.add("availableCPUs", runtime.availableProcessors()); |
| | | attrs.add("maxMemory", runtime.maxMemory()); |
| | | attrs.add("usedMemory", runtime.totalMemory()); |
| | | attrs.add("freeUsedMemory", runtime.freeMemory()); |
| | | String installPath = DirectoryServer.getServerRoot(); |
| | | if (installPath != null) |
| | | { |
| | | attrs.add(createAttribute("installPath", installPath)); |
| | | attrs.add("installPath", installPath); |
| | | } |
| | | String instancePath = DirectoryServer.getInstanceRoot(); |
| | | if (instancePath != null) |
| | | { |
| | | attrs.add(createAttribute("instancePath", instancePath)); |
| | | attrs.add("instancePath", instancePath); |
| | | } |
| | | |
| | | // Get the JVM input arguments. |
| | |
| | | argList.append("\""); |
| | | } |
| | | |
| | | attrs.add(createAttribute("jvmArguments", argList.toString())); |
| | | attrs.add("jvmArguments", argList); |
| | | } |
| | | |
| | | // Get the list of supported SSL protocols and ciphers. |
| | | Collection<String> supportedTlsProtocols; |
| | | Collection<String> supportedTlsCiphers; |
| | | try |
| | | { |
| | | final SSLContext context = SSLContext.getDefault(); |
| | | final SSLParameters parameters = context.getSupportedSSLParameters(); |
| | | supportedTlsProtocols = Arrays.asList(parameters.getProtocols()); |
| | | supportedTlsCiphers = Arrays.asList(parameters.getCipherSuites()); |
| | | attrs.add(ATTR_SUPPORTED_TLS_PROTOCOLS, Arrays.asList(parameters.getProtocols())); |
| | | attrs.add(ATTR_SUPPORTED_TLS_CIPHERS, Arrays.asList(parameters.getCipherSuites())); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | // A default SSL context should always be available. |
| | | supportedTlsProtocols = Collections.emptyList(); |
| | | supportedTlsCiphers = Collections.emptyList(); |
| | | attrs.add(ATTR_SUPPORTED_TLS_PROTOCOLS, Collections.emptyList()); |
| | | attrs.add(ATTR_SUPPORTED_TLS_CIPHERS, Collections.emptyList()); |
| | | } |
| | | |
| | | addAttribute(attrs, ATTR_SUPPORTED_TLS_PROTOCOLS, supportedTlsProtocols); |
| | | addAttribute(attrs, ATTR_SUPPORTED_TLS_CIPHERS, supportedTlsCiphers); |
| | | |
| | | return attrs; |
| | | } |
| | | |
| | | private void addAttribute(ArrayList<Attribute> attrs, String attrName, Collection<String> values) |
| | | { |
| | | AttributeBuilder builder = new AttributeBuilder(attrName); |
| | | builder.addAllStrings(values); |
| | | attrs.add(builder.toAttribute()); |
| | | } |
| | | |
| | | private Attribute createAttribute(String name, Object value) |
| | | { |
| | | return Attributes.create(name, String.valueOf(value)); |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | | import static org.opends.server.core.DirectoryServer.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.extensions.TraditionalWorkQueue; |
| | | import org.opends.server.types.Attribute; |
| | | import org.forgerock.opendj.ldap.schema.AttributeType; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | /** |
| | |
| | | return "Work Queue"; |
| | | } |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void run() |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Retrieves a set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is requested. |
| | | * |
| | | * @return A set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is |
| | | * requested. |
| | | */ |
| | | @Override |
| | | public ArrayList<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | int backlog = workQueue.size(); |
| | | totalBacklog += backlog; |
| | |
| | | { |
| | | maxBacklog = backlog; |
| | | } |
| | | |
| | | long averageBacklog = (long) (1.0 * totalBacklog / numPolls); |
| | | |
| | | long opsSubmitted = workQueue.getOpsSubmitted(); |
| | | long rejectedQueueFull = workQueue.getOpsRejectedDueToQueueFull(); |
| | | |
| | | ArrayList<Attribute> monitorAttrs = new ArrayList<>(); |
| | | putAttribute(monitorAttrs, ATTR_CURRENT_BACKLOG, backlog); |
| | | putAttribute(monitorAttrs, ATTR_AVERAGE_BACKLOG, averageBacklog); |
| | | putAttribute(monitorAttrs, ATTR_MAX_BACKLOG, maxBacklog); |
| | | // The total number of operations submitted. |
| | | putAttribute(monitorAttrs, ATTR_OPS_SUBMITTED, opsSubmitted); |
| | | // The total number of operations rejected due to a full work queue. |
| | | putAttribute(monitorAttrs, ATTR_OPS_REJECTED_QUEUE_FULL, rejectedQueueFull); |
| | | final MonitorData monitorAttrs = new MonitorData(5); |
| | | monitorAttrs.add(ATTR_CURRENT_BACKLOG, backlog); |
| | | monitorAttrs.add(ATTR_AVERAGE_BACKLOG, averageBacklog); |
| | | monitorAttrs.add(ATTR_MAX_BACKLOG, maxBacklog); |
| | | monitorAttrs.add(ATTR_OPS_SUBMITTED, workQueue.getOpsSubmitted()); |
| | | monitorAttrs.add(ATTR_OPS_REJECTED_QUEUE_FULL, workQueue.getOpsRejectedDueToQueueFull()); |
| | | return monitorAttrs; |
| | | } |
| | | |
| | | private void putAttribute(ArrayList<Attribute> monitorAttrs, String attrName, Object value) |
| | | { |
| | | AttributeType attrType = getAttributeType(attrName, getDefaultIntegerSyntax()); |
| | | monitorAttrs.add(Attributes.create(attrType, String.valueOf(value))); |
| | | } |
| | | } |
| | |
| | | */ |
| | | package org.opends.server.monitors; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.VersionMonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.InitializationException; |
| | | import org.opends.server.util.DynamicConstants; |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | ArrayList<Attribute> attrs = new ArrayList<>(12); |
| | | MonitorData attrs = new MonitorData(12); |
| | | |
| | | attrs.add(createAttribute(ATTR_PRODUCT_NAME, DynamicConstants.PRODUCT_NAME)); |
| | | attrs.add(createAttribute(ATTR_SHORT_NAME, DynamicConstants.SHORT_NAME)); |
| | | attrs.add(createAttribute(ATTR_MAJOR_VERSION, DynamicConstants.MAJOR_VERSION)); |
| | | attrs.add(createAttribute(ATTR_MINOR_VERSION, DynamicConstants.MINOR_VERSION)); |
| | | attrs.add(createAttribute(ATTR_POINT_VERSION, DynamicConstants.POINT_VERSION)); |
| | | attrs.add(ATTR_PRODUCT_NAME, DynamicConstants.PRODUCT_NAME); |
| | | attrs.add(ATTR_SHORT_NAME, DynamicConstants.SHORT_NAME); |
| | | attrs.add(ATTR_MAJOR_VERSION, DynamicConstants.MAJOR_VERSION); |
| | | attrs.add(ATTR_MINOR_VERSION, DynamicConstants.MINOR_VERSION); |
| | | attrs.add(ATTR_POINT_VERSION, DynamicConstants.POINT_VERSION); |
| | | |
| | | String versionQualifier = DynamicConstants.VERSION_QUALIFIER; |
| | | if (versionQualifier != null && versionQualifier.length() > 0) |
| | | { |
| | | attrs.add(createAttribute(ATTR_VERSION_QUALIFIER, versionQualifier)); |
| | | attrs.add(ATTR_VERSION_QUALIFIER, versionQualifier); |
| | | } |
| | | |
| | | int buildNumber = DynamicConstants.BUILD_NUMBER; |
| | | if (buildNumber > 0) |
| | | { |
| | | attrs.add(createAttribute(ATTR_BUILD_NUMBER, buildNumber)); |
| | | attrs.add(ATTR_BUILD_NUMBER, buildNumber); |
| | | } |
| | | |
| | | String fixIDs = DynamicConstants.FIX_IDS; |
| | | if (fixIDs != null && fixIDs.length() > 0) |
| | | { |
| | | attrs.add(createAttribute(ATTR_FIX_IDS, fixIDs)); |
| | | attrs.add(ATTR_FIX_IDS, fixIDs); |
| | | } |
| | | |
| | | attrs.add(createAttribute(ATTR_REVISION, DynamicConstants.REVISION)); |
| | | attrs.add(createAttribute(ATTR_BUILD_ID, DynamicConstants.BUILD_ID)); |
| | | attrs.add(createAttribute(ATTR_COMPACT_VERSION, DynamicConstants.COMPACT_VERSION_STRING)); |
| | | attrs.add(createAttribute(ATTR_FULL_VERSION, DynamicConstants.FULL_VERSION_STRING)); |
| | | attrs.add(ATTR_REVISION, DynamicConstants.REVISION); |
| | | attrs.add(ATTR_BUILD_ID, DynamicConstants.BUILD_ID); |
| | | attrs.add(ATTR_COMPACT_VERSION, DynamicConstants.COMPACT_VERSION_STRING); |
| | | attrs.add(ATTR_FULL_VERSION, DynamicConstants.FULL_VERSION_STRING); |
| | | |
| | | return attrs; |
| | | } |
| | | |
| | | private Attribute createAttribute(String name, Object value) |
| | | { |
| | | return Attributes.create(name, String.valueOf(value)); |
| | | } |
| | | } |
| | |
| | | * Header, with the fields enclosed by brackets [] replaced by your own identifying |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2013-2015 ForgeRock AS. |
| | | * Copyright 2013-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.protocols.http; |
| | | |
| | |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.concurrent.atomic.AtomicLong; |
| | | |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.protocols.ldap.LDAPStatistics; |
| | | import org.opends.server.types.Attribute; |
| | | |
| | | /** |
| | | * Collects statistics for HTTP. This class inherits from {@link LDAPStatistics} |
| | |
| | | super.clearStatistics(); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | // first take a snapshot of all the data as fast as possible |
| | | final int totalCount = this.requestsTotalCount.get(); |
| | | final Map<String, Integer> totalCountsSnapshot = new HashMap<>(); |
| | | for (Entry<String, AtomicInteger> entry : requestMethodsTotalCount.entrySet()) |
| | | { |
| | | totalCountsSnapshot.put(entry.getKey(), entry.getValue().get()); |
| | | } |
| | | final Map<String, Long> totalTimesSnapshot = new HashMap<>(); |
| | | for (Entry<String, AtomicLong> entry1 : requestMethodsTotalTime.entrySet()) |
| | | { |
| | | totalTimesSnapshot.put(entry1.getKey(), entry1.getValue().get()); |
| | | } |
| | | |
| | | // do the same with the underlying data |
| | | final List<Attribute> results = super.getMonitorData(); |
| | | addAll(results, totalCountsSnapshot, "ds-mon-http-", "-requests-total-count"); |
| | | addAll(results, totalTimesSnapshot, "ds-mon-resident-time-http-", "-requests-total-time"); |
| | | results.add(createAttribute("ds-mon-http-requests-total-count", Integer.toString(totalCount))); |
| | | final MonitorData results = super.getMonitorData(); |
| | | addAll(results, requestMethodsTotalCount, "ds-mon-http-", "-requests-total-count"); |
| | | addAll(results, requestMethodsTotalTime, "ds-mon-resident-time-http-", "-requests-total-time"); |
| | | results.add("ds-mon-http-requests-total-count", requestsTotalCount.get()); |
| | | return results; |
| | | } |
| | | |
| | | private void addAll(final List<Attribute> results, |
| | | private void addAll(final MonitorData results, |
| | | final Map<String, ?> toOutput, String prefix, String suffix) |
| | | { |
| | | for (Entry<String, ?> entry : toOutput.entrySet()) |
| | | { |
| | | final String httpMethod = entry.getKey(); |
| | | final String nb = entry.getValue().toString(); |
| | | results.add(createAttribute(prefix + httpMethod + suffix, nb)); |
| | | results.add(prefix + httpMethod + suffix, nb); |
| | | } |
| | | } |
| | | |
| | |
| | | import static org.opends.server.protocols.ldap.LDAPConstants.*; |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.concurrent.atomic.AtomicLong; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.DirectoryConfig; |
| | | import org.opends.server.types.ObjectClass; |
| | | import org.opends.server.types.OperationType; |
| | |
| | | return DirectoryConfig.getObjectClass(OC_MONITOR_CONNHANDLERSTATS, true); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Retrieves a set of attributes containing monitor data that should |
| | | * be returned to the client if the corresponding monitor entry is |
| | | * requested. |
| | | * |
| | | * @return A set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry |
| | | * is requested. |
| | | */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | List<Attribute> attrs = new ArrayList<>(); |
| | | |
| | | long tmpAbandonRequests = abandonRequests.get(); |
| | | long tmpAddRequests = addRequests.get(); |
| | | long tmpAddResponses = addResponses.get(); |
| | | long tmpBindRequests = bindRequests.get(); |
| | | long tmpBindResponses = bindResponses.get(); |
| | | long tmpBytesRead = bytesRead.get(); |
| | | long tmpBytesWritten = bytesWritten.get(); |
| | | long tmpCompareRequests = compareRequests.get(); |
| | | long tmpCompareResponses = compareResponses.get(); |
| | | long tmpConnectionsClosed = connectionsClosed.get(); |
| | | long tmpConnectionsEstablished = connectionsEstablished.get(); |
| | | long tmpDeleteRequests = deleteRequests.get(); |
| | | long tmpDeleteResponses = deleteResponses.get(); |
| | | long tmpExtendedRequests = extendedRequests.get(); |
| | | long tmpExtendedResponses = extendedResponses.get(); |
| | | long tmpMessagesRead = messagesRead.get(); |
| | | long tmpMessagesWritten = messagesWritten.get(); |
| | | long tmpModifyRequests = modifyRequests.get(); |
| | | long tmpModifyResponses = modifyResponses.get(); |
| | | long tmpModifyDNRequests = modifyDNRequests.get(); |
| | | long tmpModifyDNResponses = modifyDNResponses.get(); |
| | | long tmpOperationsAbandoned = operationsAbandoned.get(); |
| | | long tmpOperationsCompleted = operationsCompleted.get(); |
| | | long tmpOperationsInitiated = operationsInitiated.get(); |
| | | long tmpSearchRequests = searchRequests.get(); |
| | | long tmpSearchOneRequests = searchOneRequests.get(); |
| | | long tmpSearchSubRequests = searchSubRequests.get(); |
| | | long tmpSearchEntries = searchResultEntries.get(); |
| | | long tmpSearchReferences = searchResultReferences.get(); |
| | | long tmpSearchResultsDone = searchResultsDone.get(); |
| | | long tmpUnbindRequests = unbindRequests.get(); |
| | | long tmpAddOperationCount = addOperationCount.get(); |
| | | long tmpAddOperationTime = addOperationTime.get(); |
| | | long tmpSearchOperationCount = searchOperationCount.get(); |
| | | long tmpSearchOperationTime = searchOperationTime.get(); |
| | | long tmpDelOperationCount = delOperationCount.get(); |
| | | long tmpDelOperationTime = delOperationTime.get(); |
| | | long tmpBindOperationCount = bindOperationCount.get(); |
| | | long tmpBindOperationTime = bindOperationTime.get(); |
| | | long tmpUnbindOperationCount = unbindOperationCount.get(); |
| | | long tmpUnbindOperationTime = unbindOperationTime.get(); |
| | | long tmpCompOperationCount = compOperationCount.get(); |
| | | long tmpCompOperationTime = compOperationTime.get(); |
| | | long tmpModOperationCount = modOperationCount.get(); |
| | | long tmpModOperationTime = modOperationTime.get(); |
| | | long tmpModdnOperationCount = moddnOperationCount.get(); |
| | | long tmpModdnOperationTime = moddnOperationTime.get(); |
| | | long tmpAbandonOperationCount = abandonOperationCount.get(); |
| | | long tmpAbandonOperationTime = abandonOperationTime.get(); |
| | | long tmpExtOperationCount = extOperationCount.get(); |
| | | long tmpExtOperationTime = extOperationTime.get(); |
| | | |
| | | |
| | | // Construct the list of attributes to return. |
| | | /* TODO : the attribute names should be constant (in ServerConstants.java |
| | | * and associated with their objectclass |
| | | * OC_MONITOR_CONNHANDLERSTATS |
| | | */ |
| | | attrs.add(createAttribute("connectionsEstablished", tmpConnectionsEstablished)); |
| | | attrs.add(createAttribute("connectionsClosed", tmpConnectionsClosed)); |
| | | attrs.add(createAttribute("bytesRead", tmpBytesRead)); |
| | | attrs.add(createAttribute("bytesWritten", tmpBytesWritten)); |
| | | attrs.add(createAttribute("ldapMessagesRead", tmpMessagesRead)); |
| | | attrs.add(createAttribute("ldapMessagesWritten", tmpMessagesWritten)); |
| | | attrs.add(createAttribute("operationsAbandoned", tmpOperationsAbandoned)); |
| | | attrs.add(createAttribute("operationsInitiated", tmpOperationsInitiated)); |
| | | attrs.add(createAttribute("operationsCompleted", tmpOperationsCompleted)); |
| | | attrs.add(createAttribute("abandonRequests", tmpAbandonRequests)); |
| | | attrs.add(createAttribute("addRequests", tmpAddRequests)); |
| | | attrs.add(createAttribute("addResponses", tmpAddResponses)); |
| | | attrs.add(createAttribute("bindRequests", tmpBindRequests)); |
| | | attrs.add(createAttribute("bindResponses", tmpBindResponses)); |
| | | attrs.add(createAttribute("compareRequests", tmpCompareRequests)); |
| | | attrs.add(createAttribute("compareResponses", tmpCompareResponses)); |
| | | attrs.add(createAttribute("deleteRequests", tmpDeleteRequests)); |
| | | attrs.add(createAttribute("deleteResponses", tmpDeleteResponses)); |
| | | attrs.add(createAttribute("extendedRequests", tmpExtendedRequests)); |
| | | attrs.add(createAttribute("extendedResponses", tmpExtendedResponses)); |
| | | attrs.add(createAttribute("modifyRequests", tmpModifyRequests)); |
| | | attrs.add(createAttribute("modifyResponses", tmpModifyResponses)); |
| | | attrs.add(createAttribute("modifyDNRequests", tmpModifyDNRequests)); |
| | | attrs.add(createAttribute("modifyDNResponses", tmpModifyDNResponses)); |
| | | attrs.add(createAttribute("searchRequests", tmpSearchRequests)); |
| | | attrs.add(createAttribute("searchOneRequests", tmpSearchOneRequests)); |
| | | attrs.add(createAttribute("searchSubRequests", tmpSearchSubRequests)); |
| | | attrs.add(createAttribute("searchResultEntries", tmpSearchEntries)); |
| | | attrs.add(createAttribute("searchResultReferences", tmpSearchReferences)); |
| | | attrs.add(createAttribute("searchResultsDone", tmpSearchResultsDone)); |
| | | attrs.add(createAttribute("unbindRequests", tmpUnbindRequests)); |
| | | final MonitorData attrs = new MonitorData(31 + 10 * 2); |
| | | attrs.add("connectionsEstablished", connectionsEstablished); |
| | | attrs.add("connectionsClosed", connectionsClosed); |
| | | attrs.add("bytesRead", bytesRead); |
| | | attrs.add("bytesWritten", bytesWritten); |
| | | attrs.add("ldapMessagesRead", messagesRead); |
| | | attrs.add("ldapMessagesWritten", messagesWritten); |
| | | attrs.add("operationsAbandoned", operationsAbandoned); |
| | | attrs.add("operationsInitiated", operationsInitiated); |
| | | attrs.add("operationsCompleted", operationsCompleted); |
| | | attrs.add("abandonRequests", abandonRequests); |
| | | attrs.add("addRequests", addRequests); |
| | | attrs.add("addResponses", addResponses); |
| | | attrs.add("bindRequests", bindRequests); |
| | | attrs.add("bindResponses", bindResponses); |
| | | attrs.add("compareRequests", compareRequests); |
| | | attrs.add("compareResponses", compareResponses); |
| | | attrs.add("deleteRequests", deleteRequests); |
| | | attrs.add("deleteResponses", deleteResponses); |
| | | attrs.add("extendedRequests", extendedRequests); |
| | | attrs.add("extendedResponses", extendedResponses); |
| | | attrs.add("modifyRequests", modifyRequests); |
| | | attrs.add("modifyResponses", modifyResponses); |
| | | attrs.add("modifyDNRequests", modifyDNRequests); |
| | | attrs.add("modifyDNResponses", modifyDNResponses); |
| | | attrs.add("searchRequests", searchRequests); |
| | | attrs.add("searchOneRequests", searchOneRequests); |
| | | attrs.add("searchSubRequests", searchSubRequests); |
| | | attrs.add("searchResultEntries", searchResultEntries); |
| | | attrs.add("searchResultReferences", searchResultReferences); |
| | | attrs.add("searchResultsDone", searchResultsDone); |
| | | attrs.add("unbindRequests", unbindRequests); |
| | | |
| | | // adds |
| | | attrs.add(createAttribute("ds-mon-add-operations-total-count", tmpAddOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-add-operations-total-time", tmpAddOperationTime)); |
| | | attrs.add("ds-mon-add-operations-total-count", addOperationCount); |
| | | attrs.add("ds-mon-resident-time-add-operations-total-time", addOperationTime); |
| | | |
| | | // search |
| | | attrs.add(createAttribute("ds-mon-search-operations-total-count", tmpSearchOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-search-operations-total-time", tmpSearchOperationTime)); |
| | | attrs.add("ds-mon-search-operations-total-count", searchOperationCount); |
| | | attrs.add("ds-mon-resident-time-search-operations-total-time", searchOperationTime); |
| | | |
| | | // bind |
| | | attrs.add(createAttribute("ds-mon-bind-operations-total-count", tmpBindOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-bind-operations-total-time", tmpBindOperationTime)); |
| | | attrs.add("ds-mon-bind-operations-total-count", bindOperationCount); |
| | | attrs.add("ds-mon-resident-time-bind-operations-total-time", bindOperationTime); |
| | | |
| | | // unbind |
| | | attrs.add(createAttribute("ds-mon-unbind-operations-total-count", tmpUnbindOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-unbind-operations-total-time", tmpUnbindOperationTime)); |
| | | attrs.add("ds-mon-unbind-operations-total-count", unbindOperationCount); |
| | | attrs.add("ds-mon-resident-time-unbind-operations-total-time", unbindOperationTime); |
| | | |
| | | // compare |
| | | attrs.add(createAttribute("ds-mon-compare-operations-total-count", tmpCompOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-compare-operations-total-time", tmpCompOperationTime)); |
| | | attrs.add("ds-mon-compare-operations-total-count", compOperationCount); |
| | | attrs.add("ds-mon-resident-time-compare-operations-total-time", compOperationTime); |
| | | |
| | | // del |
| | | attrs.add(createAttribute("ds-mon-delete-operations-total-count", tmpDelOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-delete-operations-total-time", tmpDelOperationTime)); |
| | | attrs.add("ds-mon-delete-operations-total-count", delOperationCount); |
| | | attrs.add("ds-mon-resident-time-delete-operations-total-time", delOperationTime); |
| | | |
| | | // mod |
| | | attrs.add(createAttribute("ds-mon-mod-operations-total-count", tmpModOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-mod-operations-total-time", tmpModOperationTime)); |
| | | attrs.add("ds-mon-mod-operations-total-count", modOperationCount); |
| | | attrs.add("ds-mon-resident-time-mod-operations-total-time", modOperationTime); |
| | | |
| | | // moddn |
| | | attrs.add(createAttribute("ds-mon-moddn-operations-total-count", tmpModdnOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-moddn-operations-total-time", tmpModdnOperationTime)); |
| | | attrs.add("ds-mon-moddn-operations-total-count", moddnOperationCount); |
| | | attrs.add("ds-mon-resident-time-moddn-operations-total-time", moddnOperationTime); |
| | | |
| | | // abandon |
| | | attrs.add(createAttribute("ds-mon-abandon-operations-total-count", tmpAbandonOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-abandon-operations-total-time", tmpAbandonOperationTime)); |
| | | attrs.add("ds-mon-abandon-operations-total-count", abandonOperationCount); |
| | | attrs.add("ds-mon-resident-time-abandon-operations-total-time", abandonOperationTime); |
| | | |
| | | // extended |
| | | attrs.add(createAttribute("ds-mon-extended-operations-total-count", tmpExtOperationCount)); |
| | | attrs.add(createAttribute("ds-mon-resident-time-extended-operations-total-time", tmpExtOperationTime)); |
| | | attrs.add("ds-mon-extended-operations-total-count", extOperationCount); |
| | | attrs.add("ds-mon-resident-time-extended-operations-total-time", extOperationTime); |
| | | |
| | | return attrs; |
| | | } |
| | |
| | | operationsAbandoned.getAndIncrement(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Constructs an attribute using the provided information. It will |
| | | * use the server's schema definitions. |
| | | * |
| | | * @param name |
| | | * The name to use for the attribute. |
| | | * @param value |
| | | * The value to use for the attribute. |
| | | * @return the constructed attribute. |
| | | */ |
| | | protected Attribute createAttribute(String name, Object value) |
| | | { |
| | | return Attributes.create(name, String.valueOf(value)); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Retrieves the number of client connections that have been |
| | | * established. |
| | |
| | | import static org.opends.server.protocols.internal.Requests.*; |
| | | import static org.opends.server.replication.plugin.EntryHistorical.*; |
| | | import static org.opends.server.replication.protocol.OperationContext.*; |
| | | import static org.opends.server.replication.service.ReplicationMonitor.*; |
| | | import static org.opends.server.util.CollectionUtils.*; |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | |
| | | import org.opends.server.api.Backend.BackendOperation; |
| | | import org.opends.server.api.BackendInitializationListener; |
| | | import org.opends.server.api.DirectoryThread; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.ServerShutdownListener; |
| | | import org.opends.server.api.SynchronizationProvider; |
| | | import org.opends.server.backends.task.Task; |
| | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * Monitoring information for the LDAPReplicationDomain. |
| | | * |
| | | * @return Monitoring attributes specific to the LDAPReplicationDomain. |
| | | */ |
| | | @Override |
| | | public Collection<Attribute> getAdditionalMonitoring() |
| | | public void addAdditionalMonitoring(MonitorData attributes) |
| | | { |
| | | List<Attribute> attributes = new ArrayList<>(); |
| | | |
| | | // number of updates in the pending list |
| | | addMonitorData(attributes, "pending-updates", pendingChanges.size()); |
| | | |
| | | addMonitorData(attributes, "replayed-updates-ok", numReplayedPostOpCalled.get()); |
| | | addMonitorData(attributes, "resolved-modify-conflicts", numResolvedModifyConflicts.get()); |
| | | addMonitorData(attributes, "resolved-naming-conflicts", numResolvedNamingConflicts.get()); |
| | | addMonitorData(attributes, "unresolved-naming-conflicts", numUnresolvedNamingConflicts.get()); |
| | | addMonitorData(attributes, "remote-pending-changes-size", remotePendingChanges.getQueueSize()); |
| | | addMonitorData(attributes, "dependent-changes-size", remotePendingChanges.getDependentChangesSize()); |
| | | addMonitorData(attributes, "changes-in-progress-size", remotePendingChanges.changesInProgressSize()); |
| | | |
| | | return attributes; |
| | | attributes.add("pending-updates", pendingChanges.size()); |
| | | attributes.add("replayed-updates-ok", numReplayedPostOpCalled); |
| | | attributes.add("resolved-modify-conflicts", numResolvedModifyConflicts); |
| | | attributes.add("resolved-naming-conflicts", numResolvedNamingConflicts); |
| | | attributes.add("unresolved-naming-conflicts", numUnresolvedNamingConflicts); |
| | | attributes.add("remote-pending-changes-size", remotePendingChanges.getQueueSize()); |
| | | attributes.add("dependent-changes-size", remotePendingChanges.getDependentChangesSize()); |
| | | attributes.add("changes-in-progress-size", remotePendingChanges.changesInProgressSize()); |
| | | } |
| | | |
| | | /** |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2011-2015 ForgeRock AS. |
| | | * Portions Copyright 2011-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.replication.server; |
| | | |
| | |
| | | import static org.opends.server.replication.protocol.ProtocolVersion.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.*; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.replication.common.*; |
| | | import org.opends.server.replication.protocol.*; |
| | | import org.opends.server.types.*; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.replication.common.AssuredMode; |
| | | import org.opends.server.replication.common.DSInfo; |
| | | import org.opends.server.replication.common.ServerState; |
| | | import org.opends.server.replication.common.ServerStatus; |
| | | import org.opends.server.replication.common.StatusMachine; |
| | | import org.opends.server.replication.common.StatusMachineEvent; |
| | | import org.opends.server.replication.protocol.ChangeStatusMsg; |
| | | import org.opends.server.replication.protocol.ProtocolVersion; |
| | | import org.opends.server.replication.protocol.ReplServerStartDSMsg; |
| | | import org.opends.server.replication.protocol.ReplicationMsg; |
| | | import org.opends.server.replication.protocol.ServerStartMsg; |
| | | import org.opends.server.replication.protocol.Session; |
| | | import org.opends.server.replication.protocol.StartMsg; |
| | | import org.opends.server.replication.protocol.StartSessionMsg; |
| | | import org.opends.server.replication.protocol.StopMsg; |
| | | import org.opends.server.replication.protocol.TopologyMsg; |
| | | import org.opends.server.types.DirectoryException; |
| | | |
| | | /** |
| | | * This class defines a server handler, which handles all interaction with a |
| | |
| | | return newStatus; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | // Get the generic ones |
| | | List<Attribute> attributes = super.getMonitorData(); |
| | | MonitorData attributes = super.getMonitorData(); |
| | | |
| | | // Add the specific DS ones |
| | | attributes.add(Attributes.create("replica", serverURL)); |
| | | attributes.add(Attributes.create("connected-to", |
| | | this.replicationServer.getMonitorInstanceName())); |
| | | attributes.add("replica", serverURL); |
| | | attributes.add("connected-to", replicationServer.getMonitorInstanceName()); |
| | | |
| | | ReplicationDomainMonitorData md = |
| | | replicationServerDomain.getDomainMonitorData(); |
| | | ReplicationDomainMonitorData md = replicationServerDomain.getDomainMonitorData(); |
| | | |
| | | // Oldest missing update |
| | | long approxFirstMissingDate = md.getApproxFirstMissingDate(serverId); |
| | | if (approxFirstMissingDate > 0) |
| | | { |
| | | Date date = new Date(approxFirstMissingDate); |
| | | attributes.add(Attributes.create( |
| | | "approx-older-change-not-synchronized", date.toString())); |
| | | attributes.add(Attributes.create( |
| | | "approx-older-change-not-synchronized-millis", String |
| | | .valueOf(approxFirstMissingDate))); |
| | | attributes.add("approx-older-change-not-synchronized", new Date(approxFirstMissingDate)); |
| | | attributes.add("approx-older-change-not-synchronized-millis", approxFirstMissingDate); |
| | | } |
| | | |
| | | // Missing changes |
| | | attributes.add(Attributes.create("missing-changes", |
| | | String.valueOf(md.getMissingChanges(serverId)))); |
| | | |
| | | attributes.add("missing-changes", md.getMissingChanges(serverId)); |
| | | // Replication delay |
| | | attributes.add(Attributes.create("approximate-delay", |
| | | String.valueOf(md.getApproxDelay(serverId)))); |
| | | attributes.add("approximate-delay", md.getApproxDelay(serverId)); |
| | | |
| | | /* get the Server State */ |
| | | ServerState state = md.getLDAPServerState(serverId); |
| | | if (state != null) |
| | | { |
| | | AttributeBuilder builder = new AttributeBuilder("server-state"); |
| | | builder.addAllStrings(state.toStringSet()); |
| | | attributes.add(builder.toAttribute()); |
| | | attributes.add("server-state", state.toStringSet()); |
| | | } |
| | | |
| | | return attributes; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getMonitorInstanceName() |
| | | { |
| | |
| | | return status; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isDataServer() |
| | | { |
| | |
| | | refUrls, eclIncludes, eclIncludesForDeletes, getProtocolVersion()); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String toString() |
| | | { |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2008-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2011-2015 ForgeRock AS. |
| | | * Portions Copyright 2011-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.replication.server; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.replication.common.DSInfo; |
| | | import org.opends.server.replication.common.ServerState; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeBuilder; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | /** |
| | |
| | | + ",cn=" + replServerHandler.getMonitorInstanceName(); |
| | | } |
| | | |
| | | /** |
| | | * Retrieves a set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is requested. |
| | | * |
| | | * @return A set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is |
| | | * requested. |
| | | */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | List<Attribute> attributes = new ArrayList<>(); |
| | | MonitorData attributes = new MonitorData(8); |
| | | |
| | | final int serverId = dsInfo.getDsId(); |
| | | final ReplicationServerDomain domain = replServerHandler.getDomain(); |
| | | attributes.add(Attributes.create("server-id", String.valueOf(serverId))); |
| | | attributes.add(Attributes.create("domain-name", |
| | | domain.getBaseDN().toString())); |
| | | attributes.add(Attributes.create("connected-to", |
| | | replServerHandler.getMonitorInstanceName())); |
| | | attributes.add("server-id", serverId); |
| | | attributes.add("domain-name", domain.getBaseDN()); |
| | | attributes.add("connected-to", replServerHandler.getMonitorInstanceName()); |
| | | |
| | | // Retrieves the topology counters |
| | | final ReplicationDomainMonitorData md = domain.getDomainMonitorData(); |
| | |
| | | remoteState = new ServerState(); |
| | | } |
| | | |
| | | // get the Server State |
| | | AttributeBuilder builder = new AttributeBuilder("server-state"); |
| | | builder.addAllStrings(remoteState.toStringSet()); |
| | | if (builder.size() == 0) |
| | | Set<String> serverState = remoteState.toStringSet(); |
| | | if (serverState.isEmpty()) |
| | | { |
| | | builder.add("unknown"); |
| | | attributes.add("server-state", "unknown"); |
| | | } |
| | | attributes.add(builder.toAttribute()); |
| | | else |
| | | { |
| | | attributes.add("server-state", serverState); |
| | | } |
| | | |
| | | // Oldest missing update |
| | | long approxFirstMissingDate = md.getApproxFirstMissingDate(serverId); |
| | | if (approxFirstMissingDate > 0) |
| | | { |
| | | Date date = new Date(approxFirstMissingDate); |
| | | attributes.add(Attributes.create( |
| | | "approx-older-change-not-synchronized", date.toString())); |
| | | attributes.add(Attributes.create( |
| | | "approx-older-change-not-synchronized-millis", String |
| | | .valueOf(approxFirstMissingDate))); |
| | | attributes.add("approx-older-change-not-synchronized", new Date(approxFirstMissingDate)); |
| | | attributes.add("approx-older-change-not-synchronized-millis", approxFirstMissingDate); |
| | | } |
| | | |
| | | // Missing changes |
| | | long missingChanges = md.getMissingChanges(serverId); |
| | | attributes.add(Attributes.create("missing-changes", |
| | | String.valueOf(missingChanges))); |
| | | |
| | | // Replication delay |
| | | long delay = md.getApproxDelay(serverId); |
| | | attributes.add(Attributes.create("approximate-delay", |
| | | String.valueOf(delay))); |
| | | attributes.add("missing-changes", md.getMissingChanges(serverId)); |
| | | attributes.add("approximate-delay", md.getApproxDelay(serverId)); |
| | | |
| | | return attributes; |
| | | } |
| | |
| | | package org.opends.server.replication.server; |
| | | |
| | | import static org.opends.messages.ReplicationMessages.*; |
| | | import static org.opends.server.types.Attributes.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.replication.common.CSN; |
| | |
| | | import org.opends.server.replication.protocol.UpdateMsg; |
| | | import org.opends.server.replication.server.changelog.api.ChangelogException; |
| | | import org.opends.server.replication.server.changelog.api.DBCursor; |
| | | import org.opends.server.types.Attribute; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.InitializationException; |
| | |
| | | return inCount; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | List<Attribute> attributes = new ArrayList<>(); |
| | | attributes.add(create("handler", getMonitorInstanceName())); |
| | | attributes.add(create("queue-size", String.valueOf(msgQueue.count()))); |
| | | attributes.add(create("queue-size-bytes", String.valueOf(msgQueue.bytesCount()))); |
| | | attributes.add(create("following", String.valueOf(following))); |
| | | MonitorData attributes = new MonitorData(4); |
| | | attributes.add("handler", getMonitorInstanceName()); |
| | | attributes.add("queue-size", msgQueue.count()); |
| | | attributes.add("queue-size-bytes", msgQueue.bytesCount()); |
| | | attributes.add("following", following); |
| | | return attributes; |
| | | } |
| | | |
| | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.replication.common.CSN; |
| | |
| | | import org.opends.server.replication.server.changelog.api.DBCursor; |
| | | import org.opends.server.replication.server.changelog.api.DBCursor.CursorOptions; |
| | | import org.opends.server.replication.server.changelog.api.ReplicationDomainDB; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.HostPort; |
| | |
| | | + ",cn=Replication"; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | // publish the server id and the port number. |
| | | List<Attribute> attributes = new ArrayList<>(); |
| | | attributes.add(Attributes.create("replication-server-id", |
| | | String.valueOf(localReplicationServer.getServerId()))); |
| | | attributes.add(Attributes.create("replication-server-port", |
| | | String.valueOf(localReplicationServer.getReplicationPort()))); |
| | | attributes.add(Attributes.create("domain-name", |
| | | baseDN.toString())); |
| | | attributes.add(Attributes.create("generation-id", |
| | | baseDN + " " + generationId)); |
| | | int serverId = localReplicationServer.getServerId(); |
| | | |
| | | // Missing changes |
| | | long missingChanges = getDomainMonitorData().getMissingChangesRS( |
| | | localReplicationServer.getServerId()); |
| | | attributes.add(Attributes.create("missing-changes", |
| | | String.valueOf(missingChanges))); |
| | | |
| | | final MonitorData attributes = new MonitorData(5); |
| | | attributes.add("replication-server-id", serverId); |
| | | attributes.add("replication-server-port", localReplicationServer.getReplicationPort()); |
| | | attributes.add("domain-name", baseDN); |
| | | attributes.add("generation-id", baseDN + " " + generationId); |
| | | attributes.add("missing-changes", getDomainMonitorData().getMissingChangesRS(serverId)); |
| | | return attributes; |
| | | } |
| | | |
| | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.replication.common.DSInfo; |
| | | import org.opends.server.replication.common.RSInfo; |
| | | import org.opends.server.replication.common.ServerState; |
| | | import org.opends.server.replication.common.ServerStatus; |
| | | import org.opends.server.replication.protocol.*; |
| | | import org.opends.server.types.*; |
| | | import org.opends.server.replication.protocol.ProtocolVersion; |
| | | import org.opends.server.replication.protocol.ReplServerStartMsg; |
| | | import org.opends.server.replication.protocol.ReplicationMsg; |
| | | import org.opends.server.replication.protocol.Session; |
| | | import org.opends.server.replication.protocol.StopMsg; |
| | | import org.opends.server.replication.protocol.TopologyMsg; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.HostPort; |
| | | |
| | | /** |
| | | * This class defines a server handler, which handles all interaction with a |
| | |
| | | + ",cn=" + replicationServerDomain.getMonitorInstanceName(); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | // Get the generic ones |
| | | List<Attribute> attributes = super.getMonitorData(); |
| | | MonitorData attributes = super.getMonitorData(); |
| | | |
| | | // Add the specific RS ones |
| | | attributes.add(Attributes.create("Replication-Server", serverURL)); |
| | | ReplicationDomainMonitorData md = replicationServerDomain.getDomainMonitorData(); |
| | | attributes.add("Replication-Server", serverURL); |
| | | attributes.add("missing-changes", md.getMissingChangesRS(serverId)); |
| | | |
| | | ReplicationDomainMonitorData md = |
| | | replicationServerDomain.getDomainMonitorData(); |
| | | |
| | | // Missing changes |
| | | attributes.add(Attributes.create("missing-changes", |
| | | String.valueOf(md.getMissingChangesRS(serverId)))); |
| | | |
| | | // get the Server State |
| | | ServerState state = md.getRSStates(serverId); |
| | | if (state != null) |
| | | { |
| | | AttributeBuilder builder = new AttributeBuilder("server-state"); |
| | | builder.addAllStrings(state.toStringSet()); |
| | | attributes.add(builder.toAttribute()); |
| | | attributes.add("server-state", state.toStringSet()); |
| | | } |
| | | |
| | | return attributes; |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2011-2015 ForgeRock AS. |
| | | * Portions Copyright 2011-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.replication.server; |
| | | |
| | | import static org.opends.messages.ReplicationMessages.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | import java.util.concurrent.Semaphore; |
| | | import java.util.concurrent.TimeUnit; |
| | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.replication.common.AssuredMode; |
| | | import org.opends.server.replication.common.CSN; |
| | | import org.opends.server.replication.common.RSInfo; |
| | | import org.opends.server.replication.common.ServerStatus; |
| | | import org.opends.server.replication.protocol.*; |
| | | import org.opends.server.replication.protocol.AckMsg; |
| | | import org.opends.server.replication.protocol.ChangeTimeHeartbeatMsg; |
| | | import org.opends.server.replication.protocol.HeartbeatThread; |
| | | import org.opends.server.replication.protocol.MonitorMsg; |
| | | import org.opends.server.replication.protocol.MonitorRequestMsg; |
| | | import org.opends.server.replication.protocol.ProtocolVersion; |
| | | import org.opends.server.replication.protocol.ReplServerStartMsg; |
| | | import org.opends.server.replication.protocol.ReplicationMsg; |
| | | import org.opends.server.replication.protocol.ResetGenerationIdMsg; |
| | | import org.opends.server.replication.protocol.RoutableMsg; |
| | | import org.opends.server.replication.protocol.Session; |
| | | import org.opends.server.replication.protocol.StartMsg; |
| | | import org.opends.server.replication.protocol.StartSessionMsg; |
| | | import org.opends.server.replication.protocol.TopologyMsg; |
| | | import org.opends.server.replication.protocol.UpdateMsg; |
| | | import org.opends.server.replication.protocol.WindowMsg; |
| | | import org.opends.server.replication.server.changelog.api.ChangelogException; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | |
| | | return heartbeatInterval; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | // Get the generic ones |
| | | List<Attribute> attributes = super.getMonitorData(); |
| | | MonitorData attributes = super.getMonitorData(); |
| | | |
| | | attributes.add(Attributes.create("server-id", String.valueOf(serverId))); |
| | | attributes.add(Attributes.create("domain-name", String.valueOf(getBaseDN()))); |
| | | attributes.add("server-id", serverId); |
| | | attributes.add("domain-name", getBaseDN()); |
| | | |
| | | // Deprecated |
| | | attributes.add(Attributes.create("max-waiting-changes", String |
| | | .valueOf(maxQueueSize))); |
| | | attributes.add(Attributes.create("sent-updates", String |
| | | .valueOf(getOutCount()))); |
| | | attributes.add(Attributes.create("received-updates", String |
| | | .valueOf(getInCount()))); |
| | | attributes.add("max-waiting-changes", maxQueueSize); |
| | | attributes.add("sent-updates", getOutCount()); |
| | | attributes.add("received-updates", getInCount()); |
| | | |
| | | // Assured counters |
| | | attributes.add(Attributes.create("assured-sr-received-updates", String |
| | | .valueOf(getAssuredSrReceivedUpdates()))); |
| | | attributes.add(Attributes.create("assured-sr-received-updates-timeout", |
| | | String .valueOf(getAssuredSrReceivedUpdatesTimeout()))); |
| | | attributes.add(Attributes.create("assured-sr-sent-updates", String |
| | | .valueOf(getAssuredSrSentUpdates()))); |
| | | attributes.add(Attributes.create("assured-sr-sent-updates-timeout", String |
| | | .valueOf(getAssuredSrSentUpdatesTimeout()))); |
| | | attributes.add(Attributes.create("assured-sd-received-updates", String |
| | | .valueOf(getAssuredSdReceivedUpdates()))); |
| | | attributes.add("assured-sr-received-updates", getAssuredSrReceivedUpdates()); |
| | | attributes.add("assured-sr-received-updates-timeout", getAssuredSrReceivedUpdatesTimeout()); |
| | | attributes.add("assured-sr-sent-updates", getAssuredSrSentUpdates()); |
| | | attributes.add("assured-sr-sent-updates-timeout", getAssuredSrSentUpdatesTimeout()); |
| | | attributes.add("assured-sd-received-updates", getAssuredSdReceivedUpdates()); |
| | | if (!isDataServer()) |
| | | { |
| | | attributes.add(Attributes.create("assured-sd-sent-updates", |
| | | String.valueOf(getAssuredSdSentUpdates()))); |
| | | attributes.add(Attributes.create("assured-sd-sent-updates-timeout", |
| | | String.valueOf(getAssuredSdSentUpdatesTimeout()))); |
| | | attributes.add("assured-sd-sent-updates", getAssuredSdSentUpdates()); |
| | | attributes.add("assured-sd-sent-updates-timeout", getAssuredSdSentUpdatesTimeout()); |
| | | } else |
| | | { |
| | | attributes.add(Attributes.create("assured-sd-received-updates-timeout", |
| | | String.valueOf(getAssuredSdReceivedUpdatesTimeout()))); |
| | | attributes.add("assured-sd-received-updates-timeout", getAssuredSdReceivedUpdatesTimeout()); |
| | | } |
| | | |
| | | // Window stats |
| | | attributes.add(Attributes.create("max-send-window", String.valueOf(sendWindowSize))); |
| | | attributes.add(Attributes.create("current-send-window", String.valueOf(sendWindow.availablePermits()))); |
| | | attributes.add(Attributes.create("max-rcv-window", String.valueOf(maxRcvWindow))); |
| | | attributes.add(Attributes.create("current-rcv-window", String.valueOf(rcvWindow))); |
| | | attributes.add("max-send-window", sendWindowSize); |
| | | attributes.add("current-send-window", sendWindow.availablePermits()); |
| | | attributes.add("max-rcv-window", maxRcvWindow); |
| | | attributes.add("current-rcv-window", rcvWindow); |
| | | |
| | | // Encryption |
| | | attributes.add(Attributes.create("ssl-encryption", String.valueOf(session.isEncrypted()))); |
| | | attributes.add("ssl-encryption", session.isEncrypted()); |
| | | |
| | | // Data generation |
| | | attributes.add(Attributes.create("generation-id", String.valueOf(generationId))); |
| | | attributes.add("generation-id", generationId); |
| | | |
| | | return attributes; |
| | | } |
| | |
| | | |
| | | import static org.opends.messages.ReplicationMessages.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | import java.util.concurrent.atomic.AtomicLong; |
| | | import java.util.concurrent.locks.ReentrantReadWriteLock; |
| | |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.forgerock.opendj.ldap.ByteStringBuilder; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.replication.common.CSN; |
| | |
| | | import org.opends.server.replication.server.changelog.api.ChangeNumberIndexRecord; |
| | | import org.opends.server.replication.server.changelog.api.ChangelogException; |
| | | import org.opends.server.replication.server.changelog.api.DBCursor; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | |
| | | private class DbMonitorProvider extends MonitorProvider<MonitorProviderCfg> |
| | | { |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | long firstCN = readChangeNumber(ChangeNumberType.FIRST); |
| | | long lastCN = readChangeNumber(ChangeNumberType.LAST); |
| | | long numberOfChanges = lastCN == NO_KEY ? 0 : lastCN - firstCN + 1; |
| | | |
| | | final List<Attribute> attributes = new ArrayList<>(); |
| | | attributes.add(toAttribute(ChangeNumberType.FIRST, firstCN)); |
| | | attributes.add(toAttribute(ChangeNumberType.LAST, lastCN)); |
| | | attributes.add(Attributes.create("count", Long.toString(numberOfChanges))); |
| | | final MonitorData attributes = new MonitorData(3); |
| | | attributes.add(ChangeNumberType.FIRST.getAttributeName(), firstCN); |
| | | attributes.add(ChangeNumberType.LAST.getAttributeName(), lastCN); |
| | | attributes.add("count", numberOfChanges); |
| | | return attributes; |
| | | } |
| | | |
| | | private Attribute toAttribute(final ChangeNumberType cnType, long changeNumber) |
| | | { |
| | | return Attributes.create(cnType.getAttributeName(), String.valueOf(changeNumber)); |
| | | } |
| | | |
| | | private long readChangeNumber(final ChangeNumberType type) |
| | | { |
| | | try |
| | |
| | | |
| | | import static org.opends.messages.ReplicationMessages.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | |
| | | import net.jcip.annotations.Immutable; |
| | |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.replication.common.CSN; |
| | |
| | | import org.opends.server.replication.server.changelog.api.DBCursor.KeyMatchingStrategy; |
| | | import org.opends.server.replication.server.changelog.api.DBCursor.PositionStrategy; |
| | | import org.opends.server.replication.server.changelog.file.Log.RepositionableCursor; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.Attributes; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | |
| | | */ |
| | | private class DbMonitorProvider extends MonitorProvider<MonitorProviderCfg> |
| | | { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | final List<Attribute> attributes = new ArrayList<>(); |
| | | create(attributes, "replicationServer-database",String.valueOf(serverId)); |
| | | create(attributes, "domain-name", baseDN.toString()); |
| | | final MonitorData attributes = new MonitorData(4); |
| | | attributes.add("replicationServer-database", serverId); |
| | | attributes.add("domain-name", baseDN); |
| | | final CSNLimits limits = csnLimits; |
| | | if (limits.oldestCSN != null) |
| | | { |
| | | create(attributes, "first-change", encode(limits.oldestCSN)); |
| | | attributes.add("first-change", encode(limits.oldestCSN)); |
| | | } |
| | | if (limits.newestCSN != null) |
| | | { |
| | | create(attributes, "last-change", encode(limits.newestCSN)); |
| | | attributes.add("last-change", encode(limits.newestCSN)); |
| | | } |
| | | return attributes; |
| | | } |
| | | |
| | | private void create(final List<Attribute> attributes, final String name, final String value) |
| | | { |
| | | attributes.add(Attributes.create(name, value)); |
| | | } |
| | | |
| | | private String encode(final CSN csn) |
| | | { |
| | | return csn + " " + new Date(csn.getTime()); |
| | |
| | | import java.io.InputStream; |
| | | import java.io.OutputStream; |
| | | import java.net.SocketTimeoutException; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | |
| | | import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.AssuredType; |
| | | import org.opends.server.admin.std.server.ReplicationDomainCfg; |
| | | import org.opends.server.api.DirectoryThread; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.backends.task.Task; |
| | | import org.opends.server.replication.common.*; |
| | | import org.opends.server.replication.protocol.*; |
| | | import org.opends.server.replication.common.AssuredMode; |
| | | import org.opends.server.replication.common.CSN; |
| | | import org.opends.server.replication.common.CSNGenerator; |
| | | import org.opends.server.replication.common.DSInfo; |
| | | import org.opends.server.replication.common.RSInfo; |
| | | import org.opends.server.replication.common.ServerState; |
| | | import org.opends.server.replication.common.ServerStatus; |
| | | import org.opends.server.replication.common.StatusMachine; |
| | | import org.opends.server.replication.common.StatusMachineEvent; |
| | | import org.opends.server.replication.protocol.AckMsg; |
| | | import org.opends.server.replication.protocol.ChangeStatusMsg; |
| | | import org.opends.server.replication.protocol.DoneMsg; |
| | | import org.opends.server.replication.protocol.EntryMsg; |
| | | import org.opends.server.replication.protocol.ErrorMsg; |
| | | import org.opends.server.replication.protocol.HeartbeatMsg; |
| | | import org.opends.server.replication.protocol.InitializeRcvAckMsg; |
| | | import org.opends.server.replication.protocol.InitializeRequestMsg; |
| | | import org.opends.server.replication.protocol.InitializeTargetMsg; |
| | | import org.opends.server.replication.protocol.ProtocolVersion; |
| | | import org.opends.server.replication.protocol.ReplSessionSecurity; |
| | | import org.opends.server.replication.protocol.ReplicationMsg; |
| | | import org.opends.server.replication.protocol.ResetGenerationIdMsg; |
| | | import org.opends.server.replication.protocol.RoutableMsg; |
| | | import org.opends.server.replication.protocol.TopologyMsg; |
| | | import org.opends.server.replication.protocol.UpdateMsg; |
| | | import org.opends.server.tasks.InitializeTargetTask; |
| | | import org.opends.server.tasks.InitializeTask; |
| | | import org.opends.server.types.Attribute; |
| | | import org.forgerock.opendj.ldap.DN; |
| | | import org.opends.server.types.DirectoryException; |
| | | |
| | |
| | | * Subclasses should use this method to add additional monitoring information |
| | | * in the ReplicationDomain. |
| | | * |
| | | * @return Additional monitoring attributes that will be added in the |
| | | * ReplicationDomain monitoring entry. |
| | | * @param monitorData where to additional monitoring attributes |
| | | */ |
| | | public Collection<Attribute> getAdditionalMonitoring() |
| | | public void addAdditionalMonitoring(MonitorData monitorData) |
| | | { |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | /** |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2013-2015 ForgeRock AS. |
| | | * Portions copyright 2013-2016 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.replication.service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | import java.util.Map.Entry; |
| | | |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.replication.service.ReplicationDomain.ImportExportContext; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeBuilder; |
| | | import org.opends.server.types.Attributes; |
| | | |
| | | /** |
| | | * Class used to generate monitoring information for the replication. |
| | |
| | | + ",cn=Replication"; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves a set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is requested. |
| | | * |
| | | * @return A set of attributes containing monitor data that should be |
| | | * returned to the client if the corresponding monitor entry is |
| | | * requested. |
| | | */ |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | List<Attribute> attributes = new ArrayList<>(); |
| | | final MonitorData attributes = new MonitorData(41); |
| | | |
| | | addMonitorData(attributes, "domain-name", domain.getBaseDN()); |
| | | addMonitorData(attributes, "connected-to", domain.getReplicationServer()); |
| | | addMonitorData(attributes, "lost-connections", domain.getNumLostConnections()); |
| | | addMonitorData(attributes, "received-updates", domain.getNumRcvdUpdates()); |
| | | addMonitorData(attributes, "sent-updates", domain.getNumSentUpdates()); |
| | | attributes.add("domain-name", domain.getBaseDN()); |
| | | attributes.add("server-id", domain.getServerId()); |
| | | attributes.add("connected-to", domain.getReplicationServer()); |
| | | attributes.add("lost-connections", domain.getNumLostConnections()); |
| | | |
| | | // get number of changes replayed |
| | | addMonitorData(attributes, "replayed-updates", domain.getNumProcessedUpdates()); |
| | | |
| | | addMonitorData(attributes, "server-id", domain.getServerId()); |
| | | attributes.add("received-updates", domain.getNumRcvdUpdates()); |
| | | attributes.add("sent-updates", domain.getNumSentUpdates()); |
| | | attributes.add("replayed-updates", domain.getNumProcessedUpdates()); |
| | | |
| | | // get window information |
| | | addMonitorData(attributes, "max-rcv-window", domain.getMaxRcvWindow()); |
| | | addMonitorData(attributes, "current-rcv-window", domain.getCurrentRcvWindow()); |
| | | addMonitorData(attributes, "max-send-window", domain.getMaxSendWindow()); |
| | | addMonitorData(attributes, "current-send-window", domain.getCurrentSendWindow()); |
| | | attributes.add("max-rcv-window", domain.getMaxRcvWindow()); |
| | | attributes.add("current-rcv-window", domain.getCurrentRcvWindow()); |
| | | attributes.add("max-send-window", domain.getMaxSendWindow()); |
| | | attributes.add("current-send-window", domain.getCurrentSendWindow()); |
| | | |
| | | // get the Server State |
| | | final String ATTR_SERVER_STATE = "server-state"; |
| | | AttributeBuilder builder = new AttributeBuilder(ATTR_SERVER_STATE); |
| | | builder.addAllStrings(domain.getServerState().toStringSet()); |
| | | attributes.add(builder.toAttribute()); |
| | | |
| | | addMonitorData(attributes, "ssl-encryption", domain.isSessionEncrypted()); |
| | | addMonitorData(attributes, "generation-id", domain.getGenerationID()); |
| | | attributes.add("server-state", domain.getServerState().toStringSet()); |
| | | attributes.add("ssl-encryption", domain.isSessionEncrypted()); |
| | | attributes.add("generation-id", domain.getGenerationID()); |
| | | |
| | | // Add import/export monitoring attributes |
| | | final ImportExportContext ieContext = domain.getImportExportContext(); |
| | | if (ieContext != null) |
| | | { |
| | | addMonitorData(attributes, "total-update", ieContext.importInProgress() ? "import" : "export"); |
| | | addMonitorData(attributes, "total-update-entry-count", ieContext.getTotalEntryCount()); |
| | | addMonitorData(attributes, "total-update-entry-left", ieContext.getLeftEntryCount()); |
| | | attributes.add("total-update", ieContext.importInProgress() ? "import" : "export"); |
| | | attributes.add("total-update-entry-count", ieContext.getTotalEntryCount()); |
| | | attributes.add("total-update-entry-left", ieContext.getLeftEntryCount()); |
| | | } |
| | | |
| | | |
| | | // Add the concrete Domain attributes |
| | | attributes.addAll(domain.getAdditionalMonitoring()); |
| | | domain.addAdditionalMonitoring(attributes); |
| | | |
| | | /* |
| | | * Add assured replication related monitoring fields |
| | | * (see domain.getXXX() method comment for field meaning) |
| | | */ |
| | | addMonitorData(attributes, "assured-sr-sent-updates", domain.getAssuredSrSentUpdates()); |
| | | addMonitorData(attributes, "assured-sr-acknowledged-updates", domain.getAssuredSrAcknowledgedUpdates()); |
| | | addMonitorData(attributes, "assured-sr-not-acknowledged-updates", domain.getAssuredSrNotAcknowledgedUpdates()); |
| | | addMonitorData(attributes, "assured-sr-timeout-updates", domain.getAssuredSrTimeoutUpdates()); |
| | | addMonitorData(attributes, "assured-sr-wrong-status-updates", domain.getAssuredSrWrongStatusUpdates()); |
| | | addMonitorData(attributes, "assured-sr-replay-error-updates", domain.getAssuredSrReplayErrorUpdates()); |
| | | addMonitorData(attributes, "assured-sr-server-not-acknowledged-updates", domain |
| | | .getAssuredSrServerNotAcknowledgedUpdates()); |
| | | addMonitorData(attributes, "assured-sr-received-updates", domain.getAssuredSrReceivedUpdates()); |
| | | addMonitorData(attributes, "assured-sr-received-updates-acked", domain.getAssuredSrReceivedUpdatesAcked()); |
| | | addMonitorData(attributes, "assured-sr-received-updates-not-acked", domain.getAssuredSrReceivedUpdatesNotAcked()); |
| | | addMonitorData(attributes, "assured-sd-sent-updates", domain.getAssuredSdSentUpdates()); |
| | | addMonitorData(attributes, "assured-sd-acknowledged-updates", domain.getAssuredSdAcknowledgedUpdates()); |
| | | addMonitorData(attributes, "assured-sd-timeout-updates", domain.getAssuredSdTimeoutUpdates()); |
| | | attributes.add("assured-sr-sent-updates", domain.getAssuredSrSentUpdates()); |
| | | attributes.add("assured-sr-acknowledged-updates", domain.getAssuredSrAcknowledgedUpdates()); |
| | | attributes.add("assured-sr-not-acknowledged-updates", domain.getAssuredSrNotAcknowledgedUpdates()); |
| | | attributes.add("assured-sr-timeout-updates", domain.getAssuredSrTimeoutUpdates()); |
| | | attributes.add("assured-sr-wrong-status-updates", domain.getAssuredSrWrongStatusUpdates()); |
| | | attributes.add("assured-sr-replay-error-updates", domain.getAssuredSrReplayErrorUpdates()); |
| | | addMonitorData(attributes, |
| | | "assured-sr-server-not-acknowledged-updates", |
| | | domain.getAssuredSrServerNotAcknowledgedUpdates()); |
| | | attributes.add("assured-sr-received-updates", domain.getAssuredSrReceivedUpdates()); |
| | | attributes.add("assured-sr-received-updates-acked", domain.getAssuredSrReceivedUpdatesAcked()); |
| | | attributes.add("assured-sr-received-updates-not-acked", domain.getAssuredSrReceivedUpdatesNotAcked()); |
| | | attributes.add("assured-sd-sent-updates", domain.getAssuredSdSentUpdates()); |
| | | attributes.add("assured-sd-acknowledged-updates", domain.getAssuredSdAcknowledgedUpdates()); |
| | | attributes.add("assured-sd-timeout-updates", domain.getAssuredSdTimeoutUpdates()); |
| | | addMonitorData(attributes, "assured-sd-server-timeout-updates", domain.getAssuredSdServerTimeoutUpdates()); |
| | | |
| | | // Status related monitoring fields |
| | | addMonitorData(attributes, "last-status-change-date", domain.getLastStatusChangeDate()); |
| | | |
| | | addMonitorData(attributes, "status", domain.getStatus()); |
| | | attributes.add("last-status-change-date", domain.getLastStatusChangeDate()); |
| | | attributes.add("status", domain.getStatus()); |
| | | |
| | | return attributes; |
| | | } |
| | | |
| | | private void addMonitorData(List<Attribute> attributes, String attrName, |
| | | Map<Integer, Integer> serverIdToNb) |
| | | private void addMonitorData(MonitorData attributes, String attrName, Map<Integer, Integer> serverIdToNb) |
| | | { |
| | | if (!serverIdToNb.isEmpty()) |
| | | { |
| | | final AttributeBuilder builder = new AttributeBuilder(attrName); |
| | | Collection<String> values = new ArrayList<>(); |
| | | for (Entry<Integer, Integer> entry : serverIdToNb.entrySet()) |
| | | { |
| | | final Integer serverId = entry.getKey(); |
| | | final Integer nb = entry.getValue(); |
| | | builder.add(serverId + ":" + nb); |
| | | values.add(serverId + ":" + nb); |
| | | } |
| | | attributes.add(builder.toAttribute()); |
| | | attributes.add(attrName, values); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Adds an attribute with a value to the list of monitoring attributes. |
| | | * |
| | | * @param attributes the list of monitoring attributes |
| | | * @param attrName the name of the attribute to add. |
| | | * @param value The value of he attribute to add. |
| | | */ |
| | | public static void addMonitorData(List<Attribute> attributes, String attrName, Object value) |
| | | { |
| | | attributes.add(Attributes.create(attrName, String.valueOf(value))); |
| | | } |
| | | } |
| | |
| | | * information: "Portions Copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014 ForgeRock AS. |
| | | * Portions Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | |
| | | package org.opends.server.monitors; |
| | | |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.types.InitializationException; |
| | | import org.opends.server.types.Attribute; |
| | | |
| | | import java.util.List; |
| | | import java.util.Collections; |
| | | |
| | | /** |
| | | * This test monitor provider has a DN embedded in its instance name. |
| | | */ |
| | | class TestMonitorProvider extends MonitorProvider<MonitorProviderCfg> |
| | | { |
| | | @Override |
| | | public void initializeMonitorProvider(MonitorProviderCfg configuration) |
| | | throws ConfigException, InitializationException |
| | | { |
| | | // No implementation required. |
| | | } |
| | | |
| | | @Override |
| | | public String getMonitorInstanceName() |
| | | { |
| | | return "Test monitor for dc=example,dc=com"; |
| | | } |
| | | |
| | | public List<Attribute> getMonitorData() |
| | | @Override |
| | | public MonitorData getMonitorData() |
| | | { |
| | | return Collections.emptyList(); |
| | | return new MonitorData(0); |
| | | } |
| | | } |
| | |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.TestCaseUtils; |
| | | import org.opends.server.admin.std.server.MonitorProviderCfg; |
| | | import org.opends.server.api.MonitorData; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.core.AddOperation; |
| | | import org.opends.server.core.DirectoryServer; |
| | |
| | | import org.opends.server.replication.protocol.AddMsg; |
| | | import org.opends.server.replication.protocol.ReplicationMsg; |
| | | import org.opends.server.replication.service.ReplicationBroker; |
| | | import org.opends.server.types.*; |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.InitializationException; |
| | | import org.opends.server.types.Modification; |
| | | import org.opends.server.types.Operation; |
| | | import org.opends.server.types.OperationType; |
| | | import org.testng.annotations.BeforeClass; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Stress test for the synchronization code using the ReplicationBroker API. |
| | | */ |
| | | /** Stress test for the synchronization code using the ReplicationBroker API. */ |
| | | @SuppressWarnings("javadoc") |
| | | public class StressTest extends ReplicationTestCase |
| | | { |
| | | |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | |
| | | private static final String REPLICATION_STRESS_TEST = |
| | | "Replication Stress Test"; |
| | | private static final String REPLICATION_STRESS_TEST = "Replication Stress Test"; |
| | | |
| | | private BrokerReader reader; |
| | | |
| | | /** A "person" entry. */ |
| | | private Entry personEntry; |
| | | |
| | | private int replServerPort; |
| | | |
| | | |
| | | /** |
| | | * Stress test from LDAP server to client using the ReplicationBroker API. |
| | | */ |
| | | /** Stress test from LDAP server to client using the ReplicationBroker API. */ |
| | | @Test(enabled=false, groups="slow") |
| | | public void fromServertoBroker() throws Exception |
| | | { |
| | |
| | | this.count = count; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void run() |
| | | { |
| | |
| | | { |
| | | private ReplicationBroker broker; |
| | | private int count; |
| | | private Boolean finished = false; |
| | | private boolean finished; |
| | | |
| | | /** |
| | | * Creates a new Stress Test Reader. |
| | | */ |
| | | /** Creates a new Stress Test Reader. */ |
| | | public BrokerReader(ReplicationBroker broker) |
| | | { |
| | | this.broker = broker; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void run() |
| | | { |
| | |
| | | private class Monitor extends MonitorProvider<MonitorProviderCfg> |
| | | { |
| | | @Override |
| | | public List<Attribute> getMonitorData() |
| | | public MonitorData getMonitorData() |
| | | { |
| | | String value = reader != null ? String.valueOf(reader.getCurrentCount()) : "not yet started"; |
| | | List<Attribute> list = new LinkedList<>(); |
| | | list.add(Attributes.create("received-messages", value)); |
| | | list.add(Attributes.create("base-dn", "ou=People," + TEST_ROOT_DN_STRING)); |
| | | return list; |
| | | MonitorData attrs = new MonitorData(2); |
| | | if (reader != null) |
| | | { |
| | | attrs.add("received-messages", reader.getCurrentCount()); |
| | | } |
| | | else |
| | | { |
| | | attrs.add("received-messages", "not yet started"); |
| | | } |
| | | attrs.add("base-dn", "ou=People," + TEST_ROOT_DN_STRING); |
| | | return attrs; |
| | | } |
| | | |
| | | @Override |
| | |
| | | throws ConfigException, InitializationException |
| | | { |
| | | // nothing to do |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | } |