From 8bdfb229e4b8789bb1954fa0da8c1098c382bd4e Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Tue, 10 Mar 2009 08:56:32 +0000
Subject: [PATCH] fix for 3804 : improve replication monitoring

---
 opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java |   89 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 87 insertions(+), 2 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 498dac4..d7a71f5 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -31,6 +31,9 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 
+import org.opends.server.admin.std.server.MonitorProviderCfg;
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.messages.ReplicationMessages.*;
@@ -57,6 +60,9 @@
 import org.opends.server.replication.protocol.MonitorMsg;
 import org.opends.server.replication.protocol.MonitorRequestMsg;
 import org.opends.server.replication.protocol.ResetGenerationIdMsg;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.AttributeBuilder;
+import org.opends.server.types.Attributes;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.TimeThread;
@@ -89,7 +95,7 @@
  * received to the disk and for trimming them
  * Decision to trim can be based on disk space or age of the message
  */
-public class ReplicationServerDomain
+public class ReplicationServerDomain extends MonitorProvider<MonitorProviderCfg>
 {
   private final Object flowControlLock = new Object();
   private final String baseDn;
@@ -184,10 +190,15 @@
   public ReplicationServerDomain(
       String baseDn, ReplicationServer replicationServer)
   {
+    super("Replication Server " + replicationServer.getReplicationPort() + " "
+        + baseDn + " " + replicationServer.getServerId());
+
     this.baseDn = baseDn;
     this.replicationServer = replicationServer;
     this.assuredTimeoutTimer = new Timer("Replication Assured Timer for " +
       baseDn + " in RS " + replicationServer.getServerId(), true);
+
+    DirectoryServer.registerMonitorProvider(this);
   }
 
   /**
@@ -1556,6 +1567,8 @@
    */
   public void shutdown()
   {
+    DirectoryServer.deregisterMonitorProvider(getMonitorInstanceName());
+
     // Terminate the assured timer
     assuredTimeoutTimer.cancel();
 
@@ -2187,7 +2200,7 @@
    * @return The monitor data.
    * @throws DirectoryException When an error occurs.
    */
-  synchronized protected MonitorData getMonitorData()
+  synchronized protected MonitorData computeMonitorData()
     throws DirectoryException
   {
     if (monitorData.getBuildDate() + monitorDataLifeTime > TimeThread.getTime())
@@ -2609,5 +2622,77 @@
       statusAnalyzer.setDeradedStatusThreshold(degradedStatusThreshold);
     }
   }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void initializeMonitorProvider(MonitorProviderCfg configuraiton)
+  {
+    // Nothing to do for now
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String getMonitorInstanceName()
+  {
+    return "Replication Server "
+           + replicationServer.getReplicationPort() + " "
+           + " " + replicationServer.getServerId()
+           + ",cn=" + baseDn.replace(',', '_').replace('=', '_')
+           + ",cn=replication";
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public long getUpdateInterval()
+  {
+    /* we don't wont to do polling on this monitor */
+    return 0;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void updateMonitorData()
+  {
+    // As long as getUpdateInterval() returns 0, this will never get called
+
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public ArrayList<Attribute> getMonitorData()
+  {
+    /*
+     * publish the server id and the port number.
+     */
+    ArrayList<Attribute> attributes = new ArrayList<Attribute>();
+    attributes.add(Attributes.create("replication server id",
+        String.valueOf(replicationServer.getServerId())));
+    attributes.add(Attributes.create("replication server port",
+        String.valueOf(replicationServer.getReplicationPort())));
+
+    /*
+     * Add all the base DNs that are known by this replication server.
+     */
+    AttributeBuilder builder = new AttributeBuilder("domain-name");
+    builder.add(baseDn);
+    attributes.add(builder.toAttribute());
+
+    // Publish to monitor the generation ID by replicationServerDomain
+    builder = new AttributeBuilder("generation-id");
+    builder.add(baseDn.toString() + " " + generationId);
+    attributes.add(builder.toAttribute());
+
+    return attributes;
+  }
 }
 

--
Gitblit v1.10.0