/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.server.snmp;
import com.sun.management.snmp.agent.SnmpMib;
import java.util.Iterator;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.server.loggers.debug.DebugLogger;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.DebugLogLevel;
/**
* The class is used for implementing the "DsTableEntry" group implementation.
* The group is defined with the following oid: 1.3.6.1.2.1.66.1.1.
*/
public class DsTableEntryImpl extends DsTableEntry implements DsEntry {
/**
* The serial version identifier required to satisfy the compiler because
* this class implements the <CODE>java.io.Serializable</CODE> interface.
* This value was generated using the <CODE>serialver</CODE> command-line
* utility included with the Java SDK.
*/
private static final long serialVersionUID = -3346380035687141480L;
/**
* The debug log tracer for this class.
*/
private static final DebugTracer TRACER = DebugLogger.getTracer();
/**
* Directory Server MBeanServer.
*/
private MBeanServer server;
/**
* Mapping Class.
*/
private SNMPMonitor monitor;
/**
* ObjectName of the entry.
*/
private ObjectName entryName;
/**
* Index of the Directory Server Instance (applIndex).
*/
private Integer applIndex;
/**
* Creates a DsTableEntry.
* @param mib the SNMP Mib where the entry will be created
* @param server where the mapping objects will be found
* @param index of the entry in the DsTable
*/
public DsTableEntryImpl(SnmpMib mib,
MBeanServer server,
int index) {
super(mib);
this.server = server;
this.monitor = SNMPMonitor.getMonitor(server);
this.applIndex = new Integer(index);
}
/**
* Getter for the "DsServerType" variable.
* @return a Byte[] representing the Ds Server Type
*/
public Byte[] getDsServerType() {
try {
String value1 = (String) this.monitor.getAttribute(
SNMPConnectionHandlerDefinitions.MONITOR_VERSION_OBJECTNAME,
"fullVersion");
String value2 = (String) this.monitor.getAttribute(
SNMPConnectionHandlerDefinitions.MONITOR_VERSION_OBJECTNAME,
"buildID");
return SNMPMonitor.string2ByteArray(value1 + " - " + value2);
} catch (Exception ex) {
if (DebugLogger.debugEnabled()) {
TRACER.debugCaught(DebugLogLevel.ERROR, ex);
}
return null;
}
}
/**
* {@inheritDoc}
* @return DsCacheHits as Long
*/
@Override
public Long getDsCacheHits() {
try {
Long value = Long.parseLong((String) this.monitor.getAttribute(
SNMPConnectionHandlerDefinitions.MONITOR_ENTRY_CACHES_OBJECTNANE,
"entryCacheHits"));
return SNMPMonitor.counter32Value(value);
} catch (Exception ex) {
if (DebugLogger.debugEnabled()) {
TRACER.debugCaught(DebugLogLevel.ERROR, ex);
}
}
return 0L;
}
/**
* {@inheritDoc}
* @return DsCacheEntries as Long
*/
@Override
public Long getDsCacheEntries() {
try {
Long value = Long.parseLong((String) this.monitor.getAttribute(
SNMPConnectionHandlerDefinitions.MONITOR_ENTRY_CACHES_OBJECTNANE,
"currentEntryCacheCount"));
return SNMPMonitor.gauge32Value(value);
} catch (Exception ex) {
if (DebugLogger.debugEnabled()) {
TRACER.debugCaught(DebugLogLevel.ERROR, ex);
}
}
return 0L;
}
/**
* {@inheritDoc}
* @return DsMasterEntries as Long
*/
@Override
public Long getDsMasterEntries() {
Set monitorBackends = null;
Long result = 0L;
try {
monitorBackends = this.server.queryNames(SNMPMonitor.pattern, null);
for (Iterator iter = monitorBackends.iterator(); iter.hasNext();) {
ObjectName name = (ObjectName) iter.next();
Object value = this.monitor.getAttribute(name,
"ds-backend-entry-count");
if (value != null) {
result = result + new Long((String) value);
}
}
return SNMPMonitor.gauge32Value(result);
} catch (Exception ex) {
if (DebugLogger.debugEnabled()) {
TRACER.debugCaught(DebugLogLevel.ERROR, ex);
}
}
return 0L;
}
/**
* {@inheritDoc}
* @return DsServerDescription as String
*/
@Override
public String getDsServerDescription() {
return Utilities.getServerRootDirectory().getAbsolutePath();
}
/**
* Gets the object of the entry.
* @return ObjectName of the entry
*/
public ObjectName getObjectName() {
if (this.entryName == null) {
try {
this.entryName = new ObjectName(
SNMPConnectionHandlerDefinitions.SNMP_DOMAIN +
"type=DsTableEntry,name=" +
SNMPConnectionHandlerDefinitions.MONITOR_SYSTEM_INFORMATION_OBJECTNAME);
} catch (Exception ex) {
if (DebugLogger.debugEnabled()) {
TRACER.debugCaught(DebugLogLevel.ERROR, ex);
}
}
}
return this.entryName;
}
}