You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/01/20 09:36:13 UTC

[2/5] camel git commit: CAMEL-10719 add JMX management to ThrottlingExceptionRoutePolicy

CAMEL-10719 add JMX management to ThrottlingExceptionRoutePolicy

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/69b716bb
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/69b716bb
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/69b716bb

Branch: refs/heads/master
Commit: 69b716bbb38ff3754b72038526f44e74429ddb6d
Parents: a4f82a2
Author: CodeSmell <mb...@gmail.com>
Authored: Tue Jan 17 16:22:27 2017 -0500
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jan 20 09:44:37 2017 +0100

----------------------------------------------------------------------
 ...agedThrottlingExceptionRoutePolicyMBean.java | 55 +++++++++++
 .../impl/ThrottlingExceptionRoutePolicy.java    | 42 ++++++++-
 .../ManagedThrottlingExceptionRoutePolicy.java  | 99 ++++++++++++++++++++
 3 files changed, 193 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/69b716bb/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java
new file mode 100644
index 0000000..86e394c
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedThrottlingExceptionRoutePolicyMBean.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.api.management.mbean;
+
+import org.apache.camel.api.management.ManagedAttribute;
+
+public interface ManagedThrottlingExceptionRoutePolicyMBean extends ManagedServiceMBean {
+
+    @ManagedAttribute(description = "how long to wait before moving open circuit to half open")
+    long getHalfOpenAfter();
+
+    @ManagedAttribute(description = "how long to wait before moving open circuit to half open")
+    void setHalfOpenAfter(long milliseconds);
+    
+    @ManagedAttribute(description = "the range of time that failures should occur within")
+    long getFailureWindow();
+
+    @ManagedAttribute(description = "the range of time that failures should occur within")
+    void setFailureWindow(long milliseconds);
+    
+    @ManagedAttribute(description = "number of failures before opening circuit")
+    int getFailureThreshold();
+
+    @ManagedAttribute(description = "number of failures before opening circuit")
+    void setFailureThreshold(int numberOfFailures);
+
+    @ManagedAttribute(description = "State")
+    String currentState();
+    
+    @ManagedAttribute(description = "The half open handler registered (if any)")
+    String hasHalfOpenHandler();
+    
+    @ManagedAttribute(description = "the number of failures caught")
+    int currentFailures();
+    
+    @ManagedAttribute(description = "number of ms since the last failure was recorded")
+    long getLastFailure();
+    
+    @ManagedAttribute(description = "number ms since the circuit was opened")
+    long getOpenAt();
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/69b716bb/camel-core/src/main/java/org/apache/camel/impl/ThrottlingExceptionRoutePolicy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/ThrottlingExceptionRoutePolicy.java b/camel-core/src/main/java/org/apache/camel/impl/ThrottlingExceptionRoutePolicy.java
index aaa4eca..34b755a 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/ThrottlingExceptionRoutePolicy.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/ThrottlingExceptionRoutePolicy.java
@@ -255,11 +255,11 @@ public class ThrottlingExceptionRoutePolicy extends RoutePolicySupport implement
     
     public String dumpState() {
         int num = state.get();
-        String state = stateAsString(num);
+        String routeState = stateAsString(num);
         if (failures.get() > 0) {
-            return String.format("State %s, failures %d, last failure %d ms ago", state, failures.get(), System.currentTimeMillis() - lastFailure);
+            return String.format("*** State %s, failures %d, last failure %d ms ago", routeState, failures.get(), System.currentTimeMillis() - lastFailure);
         } else {
-            return String.format("State %s, failures %d", state, failures.get());
+            return String.format("*** State %s, failures %d", routeState, failures.get());
         }
     }
     
@@ -295,4 +295,40 @@ public class ThrottlingExceptionRoutePolicy extends RoutePolicySupport implement
         this.halfOpenHandler = halfOpenHandler;
     }
 
+    public int getFailureThreshold() {
+        return failureThreshold;
+    }
+
+    public void setFailureThreshold(int failureThreshold) {
+        this.failureThreshold = failureThreshold;
+    }
+
+    public long getFailureWindow() {
+        return failureWindow;
+    }
+
+    public void setFailureWindow(long failureWindow) {
+        this.failureWindow = failureWindow;
+    }
+
+    public long getHalfOpenAfter() {
+        return halfOpenAfter;
+    }
+
+    public void setHalfOpenAfter(long halfOpenAfter) {
+        this.halfOpenAfter = halfOpenAfter;
+    }
+
+    public int getFailures() {
+        return failures.get();
+    }
+
+    public long getLastFailure() {
+        return lastFailure;
+    }
+
+    public long getOpenedAt() {
+        return openedAt;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/69b716bb/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java
new file mode 100644
index 0000000..bd2af1f
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedThrottlingExceptionRoutePolicy.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management.mbean;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.ManagedThrottlingExceptionRoutePolicyMBean;
+import org.apache.camel.impl.ThrottlingExceptionHalfOpenHandler;
+import org.apache.camel.impl.ThrottlingExceptionRoutePolicy;
+
+@ManagedResource(description = "Managed ThrottlingExceptionRoutePolicy")
+public class ManagedThrottlingExceptionRoutePolicy extends ManagedService implements ManagedThrottlingExceptionRoutePolicyMBean {
+    
+    private final ThrottlingExceptionRoutePolicy policy;
+
+    public ManagedThrottlingExceptionRoutePolicy(CamelContext context, ThrottlingExceptionRoutePolicy policy) {
+        super(context, policy);
+        this.policy = policy;
+    }
+
+    public ThrottlingExceptionRoutePolicy getPolicy() {
+        return policy;
+    }
+    
+    @Override
+    public long getHalfOpenAfter() {
+        return getPolicy().getHalfOpenAfter();
+    }
+
+    @Override
+    public void setHalfOpenAfter(long milliseconds) {
+        getPolicy().setHalfOpenAfter(milliseconds);
+    }
+
+    @Override
+    public long getFailureWindow() {
+        return getPolicy().getFailureWindow();
+    }
+
+    @Override
+    public void setFailureWindow(long milliseconds) {
+        getPolicy().setFailureWindow(milliseconds);
+    }
+
+    @Override
+    public int getFailureThreshold() {
+        return getPolicy().getFailureThreshold();
+    }
+
+    @Override
+    public void setFailureThreshold(int numberOfFailures) {
+        getPolicy().setFailureThreshold(numberOfFailures);
+    }
+    
+    @Override
+    public String currentState() {
+        return getPolicy().dumpState();
+    }
+
+    @Override
+    public String hasHalfOpenHandler() {
+        ThrottlingExceptionHalfOpenHandler obj = getPolicy().getHalfOpenHandler();
+        if (obj != null) {
+            return obj.getClass().getSimpleName();
+        } else {
+            return "";
+        }
+    }
+
+    @Override
+    public int currentFailures() {
+        return getPolicy().getFailures();
+    }
+
+    @Override
+    public long getLastFailure() {
+        return System.currentTimeMillis() - getPolicy().getLastFailure();
+    }
+
+    @Override
+    public long getOpenAt() {
+        return System.currentTimeMillis() - getPolicy().getOpenedAt();
+    }
+
+}