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/05/28 19:54:10 UTC
[1/8] camel git commit: CAMEL-11353: Optimise - JMX Statistic split
into specialized classes
Repository: camel
Updated Branches:
refs/heads/master e4ba8a7bd -> 7558e631e
CAMEL-11353: Optimise - JMX Statistic split into specialized classes
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3081eda5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3081eda5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3081eda5
Branch: refs/heads/master
Commit: 3081eda56bf9cdbda3c0641a38b264c80abc6257
Parents: e4ba8a7
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 18:27:21 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 18:27:21 2017 +0200
----------------------------------------------------------------------
.../management/DefaultManagementStrategy.java | 6 -
.../camel/management/mbean/ManagedCounter.java | 6 +-
.../mbean/ManagedPerformanceCounter.java | 42 +++---
.../camel/management/mbean/Statistic.java | 127 ++++---------------
.../management/mbean/StatisticCounter.java | 46 +++++++
.../camel/management/mbean/StatisticDelta.java | 45 +++++++
.../management/mbean/StatisticMaximum.java | 49 +++++++
.../management/mbean/StatisticMinimum.java | 49 +++++++
.../camel/management/mbean/StatisticValue.java | 47 +++++++
9 files changed, 282 insertions(+), 135 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
index 6a46c61..c41b5d4 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
@@ -24,7 +24,6 @@ import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.ManagementStatisticsLevel;
import org.apache.camel.management.event.DefaultEventFactory;
-import org.apache.camel.management.mbean.Statistic;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.spi.EventFactory;
import org.apache.camel.spi.EventNotifier;
@@ -190,11 +189,6 @@ public class DefaultManagementStrategy extends ServiceSupport implements Managem
}
}
- public Statistic createStatistic(String name, Object owner, Statistic.UpdateMode updateMode) {
- // noop
- return null;
- }
-
@Deprecated
public void setStatisticsLevel(ManagementStatisticsLevel level) {
LOG.warn("Using @deprecated option statisticsLevel on ManagementStrategy. Configure this on ManagementAgent instead.");
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
index f8fdc86..5605ae2 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
@@ -29,9 +29,9 @@ public abstract class ManagedCounter implements ManagedCounterMBean {
protected Statistic resetTimestamp;
public void init(ManagementStrategy strategy) {
- this.exchangesTotal = new Statistic("org.apache.camel.exchangesTotal", this, Statistic.UpdateMode.COUNTER);
- this.startTimestamp = new Statistic("org.apache.camel.startTimestamp", this, Statistic.UpdateMode.VALUE);
- this.resetTimestamp = new Statistic("org.apache.camel.resetTimestamp", this, Statistic.UpdateMode.VALUE);
+ this.exchangesTotal = new StatisticCounter();
+ this.startTimestamp = new StatisticValue();
+ this.resetTimestamp = new StatisticValue();
long now = new Date().getTime();
startTimestamp.updateValue(now);
resetTimestamp.updateValue(now);
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
index 6e020c1..2ac6214 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
@@ -55,25 +55,25 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
public void init(ManagementStrategy strategy) {
super.init(strategy);
- this.exchangesCompleted = new Statistic("org.apache.camel.exchangesCompleted", this, Statistic.UpdateMode.COUNTER);
- this.exchangesFailed = new Statistic("org.apache.camel.exchangesFailed", this, Statistic.UpdateMode.COUNTER);
- this.exchangesInflight = new Statistic("org.apache.camel.exchangesInflight", this, Statistic.UpdateMode.COUNTER);
-
- this.failuresHandled = new Statistic("org.apache.camel.failuresHandled", this, Statistic.UpdateMode.COUNTER);
- this.redeliveries = new Statistic("org.apache.camel.redeliveries", this, Statistic.UpdateMode.COUNTER);
- this.externalRedeliveries = new Statistic("org.apache.camel.externalRedeliveries", this, Statistic.UpdateMode.COUNTER);
-
- this.minProcessingTime = new Statistic("org.apache.camel.minimumProcessingTime", this, Statistic.UpdateMode.MINIMUM);
- this.maxProcessingTime = new Statistic("org.apache.camel.maximumProcessingTime", this, Statistic.UpdateMode.MAXIMUM);
- this.totalProcessingTime = new Statistic("org.apache.camel.totalProcessingTime", this, Statistic.UpdateMode.COUNTER);
- this.lastProcessingTime = new Statistic("org.apache.camel.lastProcessingTime", this, Statistic.UpdateMode.VALUE);
- this.deltaProcessingTime = new Statistic("org.apache.camel.deltaProcessingTime", this, Statistic.UpdateMode.DELTA);
- this.meanProcessingTime = new Statistic("org.apache.camel.meanProcessingTime", this, Statistic.UpdateMode.VALUE);
-
- this.firstExchangeCompletedTimestamp = new Statistic("org.apache.camel.firstExchangeCompletedTimestamp", this, Statistic.UpdateMode.VALUE);
- this.firstExchangeFailureTimestamp = new Statistic("org.apache.camel.firstExchangeFailureTimestamp", this, Statistic.UpdateMode.VALUE);
- this.lastExchangeCompletedTimestamp = new Statistic("org.apache.camel.lastExchangeCompletedTimestamp", this, Statistic.UpdateMode.VALUE);
- this.lastExchangeFailureTimestamp = new Statistic("org.apache.camel.lastExchangeFailureTimestamp", this, Statistic.UpdateMode.VALUE);
+ this.exchangesCompleted = new StatisticCounter();
+ this.exchangesFailed = new StatisticCounter();
+ this.exchangesInflight = new StatisticCounter();
+
+ this.failuresHandled = new StatisticCounter();
+ this.redeliveries = new StatisticCounter();
+ this.externalRedeliveries = new StatisticCounter();
+
+ this.minProcessingTime = new StatisticMinimum();
+ this.maxProcessingTime = new StatisticMaximum();
+ this.totalProcessingTime = new StatisticCounter();
+ this.lastProcessingTime = new StatisticValue();
+ this.deltaProcessingTime = new StatisticDelta();
+ this.meanProcessingTime = new StatisticValue();
+
+ this.firstExchangeCompletedTimestamp = new StatisticValue();
+ this.firstExchangeFailureTimestamp = new StatisticValue();
+ this.lastExchangeCompletedTimestamp = new StatisticValue();
+ this.lastExchangeFailureTimestamp = new StatisticValue();
}
@Override
@@ -228,8 +228,8 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
lastExchangeCompletedExchangeId = exchange.getExchangeId();
// update mean
- long count = exchangesCompleted.getValue();
- long mean = count > 0 ? totalProcessingTime.getValue() / count : 0;
+ long count = exchangesCompleted.getUpdateCount();
+ long mean = count > 0 ? totalProcessingTime.getValue() / exchangesCompleted.getValue() : 0;
meanProcessingTime.updateValue(mean);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
index aa866e0..63dc8a5 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
@@ -16,92 +16,27 @@
*/
package org.apache.camel.management.mbean;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.LongAdder;
-
/**
- * Default implementation of {@link Statistic}
+ * Base implementation of {@link Statistic}
+ * <p/>
+ * The following modes is available:
+ * <ul>
+ * <li>VALUE - A statistic with this update mode is a simple value that is a straight forward
+ * representation of the updated value.</li>
+ * <li>DELTA - A statistic with this update mode is a value that represents the delta
+ * between the last two recorded values (or the initial value if two updates have
+ * not been recorded). This value can be negative if the delta goes up or down.</li>
+ * <li>COUNTER - A statistic with this update mode interprets updates as increments (positive values)
+ * or decrements (negative values) to the current value.</li>
+ * <li>MAXIMUM - A statistic with this update mode is a value that represents the maximum value
+ * amongst the update values applied to this statistic.</li>
+ * <li>MINIMUM - A statistic with this update mode is a value that represents the minimum value
+ * amongst the update values applied to this statistic.</li>
+ * <ul>
*/
-public class Statistic {
-
- /**
- * Statistics mode
- * <ul>
- * <li>VALUE - A statistic with this update mode is a simple value that is a straight forward
- * representation of the updated value.</li>
- * <li>DELTA - A statistic with this update mode is a value that represents the delta
- * between the last two recorded values (or the initial value if two updates have
- * not been recorded). This value can be negative if the delta goes up or down.</li>
- * <li>COUNTER - A statistic with this update mode interprets updates as increments (positive values)
- * or decrements (negative values) to the current value.</li>
- * <li>MAXIMUM - A statistic with this update mode is a value that represents the maximum value
- * amongst the update values applied to this statistic.</li>
- * <li>MINIMUM - A statistic with this update mode is a value that represents the minimum value
- * amongst the update values applied to this statistic.</li>
- * <ul>
- */
- public enum UpdateMode {
- VALUE, DELTA, COUNTER, MAXIMUM, MINIMUM
- }
+public abstract class Statistic {
- private final UpdateMode updateMode;
- private final AtomicLong value = new AtomicLong();
- private final AtomicLong lastValue;
- private final LongAdder updateCount = new LongAdder();
-
- /**
- * Instantiates a new statistic.
- *
- * @param name name of statistic
- * @param owner owner
- * @param updateMode The statistic update mode.
- */
- public Statistic(String name, Object owner, UpdateMode updateMode) {
- this.updateMode = updateMode;
- if (UpdateMode.DELTA == updateMode) {
- this.lastValue = new AtomicLong();
- } else {
- this.lastValue = null;
- }
- }
-
- public void updateValue(long newValue) {
- switch (updateMode) {
- case COUNTER:
- value.addAndGet(newValue);
- break;
- case VALUE:
- value.set(newValue);
- break;
- case DELTA:
- if (updateCount.longValue() > 0) {
- // remember previous value before updating it
- lastValue.set(value.longValue());
- }
- value.set(newValue);
- break;
- case MAXIMUM:
- value.updateAndGet(value -> {
- if (updateCount.longValue() == 0 || value < newValue) {
- return newValue;
- } else {
- return value;
- }
- });
- break;
- case MINIMUM:
- value.updateAndGet(value -> {
- if (updateCount.longValue() == 0 || value > newValue) {
- return newValue;
- } else {
- return value;
- }
- });
- break;
- default:
- }
- updateCount.add(1);
- }
+ public abstract void updateValue(long newValue);
public void increment() {
updateValue(1);
@@ -111,31 +46,13 @@ public class Statistic {
updateValue(-1);
}
- public long getValue() {
- if (updateMode == UpdateMode.DELTA) {
- if (updateCount.longValue() == 0) {
- return value.get();
- } else {
- return value.get() - lastValue.get();
- }
- }
- return value.get();
- }
+ public abstract long getValue();
+ @Deprecated
public long getUpdateCount() {
- return updateCount.longValue();
+ return 0;
}
- public void reset() {
- value.set(0);
- if (lastValue != null) {
- lastValue.set(0);
- }
- updateCount.reset();
- }
-
- public String toString() {
- return "" + value.get();
- }
+ public abstract void reset();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
new file mode 100644
index 0000000..d947e6b
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
@@ -0,0 +1,46 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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 java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticCounter extends Statistic {
+
+ private final AtomicLong value = new AtomicLong(0);
+
+ public void updateValue(long newValue) {
+ value.addAndGet(newValue);
+ }
+
+ public long getValue() {
+ return value.get();
+ }
+
+ @Override
+ public String toString() {
+ return "" + value.get();
+ }
+
+ public void reset() {
+ value.set(0);
+ }
+
+ @Override
+ public long getUpdateCount() {
+ return value.get();
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
new file mode 100644
index 0000000..b288972
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
@@ -0,0 +1,45 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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 java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticDelta extends Statistic {
+
+ private final AtomicLong value = new AtomicLong();
+ private final AtomicLong lastValue = new AtomicLong();
+
+ public void updateValue(long newValue) {
+ lastValue.set(value.longValue());
+ value.set(newValue);
+ }
+
+ public long getValue() {
+ return value.get() - lastValue.get();
+ }
+
+ @Override
+ public String toString() {
+ return "" + value.get();
+ }
+
+ public void reset() {
+ value.set(0);
+ lastValue.set(0);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
new file mode 100644
index 0000000..d403370
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
@@ -0,0 +1,49 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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 java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticMaximum extends Statistic {
+
+ private final AtomicLong value = new AtomicLong(-1);
+
+ public void updateValue(long newValue) {
+ value.updateAndGet(value -> {
+ if (value == -1 || value < newValue) {
+ return newValue;
+ } else {
+ return value;
+ }
+ });
+ }
+
+ public long getValue() {
+ long num = value.get();
+ return num == -1 ? 0 : num;
+ }
+
+ @Override
+ public String toString() {
+ return "" + value.get();
+ }
+
+ public void reset() {
+ value.set(-1);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
new file mode 100644
index 0000000..55b5a54
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
@@ -0,0 +1,49 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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 java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticMinimum extends Statistic {
+
+ private final AtomicLong value = new AtomicLong(-1);
+
+ public void updateValue(long newValue) {
+ value.updateAndGet(value -> {
+ if (value == -1 || value > newValue) {
+ return newValue;
+ } else {
+ return value;
+ }
+ });
+ }
+
+ public long getValue() {
+ long num = value.get();
+ return num == -1 ? 0 : num;
+ }
+
+ @Override
+ public String toString() {
+ return "" + value.get();
+ }
+
+ public void reset() {
+ value.set(-1);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/3081eda5/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
new file mode 100644
index 0000000..6391799
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
@@ -0,0 +1,47 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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 java.util.concurrent.atomic.AtomicLong;
+
+public class StatisticValue extends Statistic {
+
+ private final AtomicLong value = new AtomicLong(-1);
+
+ public void updateValue(long newValue) {
+ value.set(newValue);
+ }
+
+ public long getValue() {
+ return value.get();
+ }
+
+ @Override
+ public String toString() {
+ return "" + value.get();
+ }
+
+ @Override
+ public long getUpdateCount() {
+ return value.get() == -1 ? 0 : 1;
+ }
+
+ public void reset() {
+ value.set(-1);
+ }
+
+}
[6/8] camel git commit: CAMEL-11354: Optimize oldest exchange
inflight per route
Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e6bc3975
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e6bc3975
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e6bc3975
Branch: refs/heads/master
Commit: e6bc3975fd31e83a01c3ad94200586f5173e6b9e
Parents: ffd97f6
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 20:43:13 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 20:43:13 2017 +0200
----------------------------------------------------------------------
.../camel/impl/DefaultInflightRepository.java | 30 ++++++++++++++++++++
.../camel/management/mbean/ManagedRoute.java | 19 ++-----------
.../apache/camel/spi/InflightRepository.java | 8 ++++++
3 files changed, 41 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/e6bc3975/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
index f176861..cae7ecb 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
@@ -26,6 +26,8 @@ import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
@@ -152,6 +154,34 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
}
@Override
+ public InflightExchange oldest(String fromRouteId) {
+ Stream<Exchange> values;
+
+ if (fromRouteId == null) {
+ // all values
+ values = inflight.values().stream();
+ } else {
+ // only if route match
+ values = inflight.values().stream()
+ .filter(e -> fromRouteId.equals(e.getFromRouteId()));
+ }
+
+ // sort by duration and grab the first
+ Exchange first = values.sorted((e1, e2) -> {
+ long d1 = getExchangeDuration(e1);
+ long d2 = getExchangeDuration(e2);
+ // need the biggest number first
+ return -1 * Long.compare(d1, d2);
+ }).findFirst().orElse(null);
+
+ if (first != null) {
+ return new InflightExchangeEntry(first);
+ } else {
+ return null;
+ }
+ }
+
+ @Override
protected void doStart() throws Exception {
}
http://git-wip-us.apache.org/repos/asf/camel/blob/e6bc3975/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 81f4794..93248b5 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -19,15 +19,12 @@ package org.apache.camel.management.mbean;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.management.AttributeValueExp;
@@ -37,11 +34,7 @@ import javax.management.Query;
import javax.management.QueryExp;
import javax.management.StringValueExp;
-import org.apache.camel.spi.InflightRepository;
-import org.w3c.dom.Document;
-
import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
import org.apache.camel.ManagementStatisticsLevel;
import org.apache.camel.Route;
import org.apache.camel.ServiceStatus;
@@ -52,12 +45,14 @@ import org.apache.camel.api.management.mbean.ManagedRouteMBean;
import org.apache.camel.model.ModelCamelContext;
import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.spi.InflightRepository;
import org.apache.camel.spi.ManagementStrategy;
import org.apache.camel.spi.RoutePolicy;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.XmlLineNumberParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
@ManagedResource(description = "Managed Route")
public class ManagedRoute extends ManagedPerformanceCounter implements TimerListener, ManagedRouteMBean {
@@ -70,7 +65,6 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
protected final String description;
protected final ModelCamelContext context;
private final LoadTriplet load = new LoadTriplet();
- private final ConcurrentHashMap<String, Exchange> exchangesInFlight = new ConcurrentHashMap<String, Exchange>();
private final String jmxDomain;
public ManagedRoute(ModelCamelContext context, Route route) {
@@ -85,8 +79,6 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
super.init(strategy);
boolean enabled = context.getManagementStrategy().getManagementAgent().getStatisticsLevel() != ManagementStatisticsLevel.Off;
setStatisticsEnabled(enabled);
-
- exchangesInFlight.clear();
}
public Route getRoute() {
@@ -467,12 +459,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
}
private InflightRepository.InflightExchange getOldestInflightEntry() {
- Collection<InflightRepository.InflightExchange> list = getContext().getInflightRepository().browse(getRouteId(), 1, true);
- if (list.size() == 1) {
- return list.iterator().next();
- } else {
- return null;
- }
+ return getContext().getInflightRepository().oldest(getRouteId());
}
public Long getOldestInflightDuration() {
http://git-wip-us.apache.org/repos/asf/camel/blob/e6bc3975/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java b/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
index 3fbd710..53c02e2 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/InflightRepository.java
@@ -175,4 +175,12 @@ public interface InflightRepository extends StaticService {
*/
Collection<InflightExchange> browse(String fromRouteId, int limit, boolean sortByLongestDuration);
+ /**
+ * Gets the oldest {@link InflightExchange} that are currently inflight that started from the given route.
+ *
+ * @param fromRouteId the route id, or <tt>null</tt> for all routes.
+ * @return the oldest, or <tt>null</tt> if none inflight
+ */
+ InflightExchange oldest(String fromRouteId);
+
}
[8/8] camel git commit: CAMEL-11354: Optimize oldest exchange
inflight per route
Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7558e631
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7558e631
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7558e631
Branch: refs/heads/master
Commit: 7558e631e04d4a2c24ea6c762012cdff60463396
Parents: cff0fc0
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 21:53:30 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 21:53:30 2017 +0200
----------------------------------------------------------------------
.../src/main/scala/org/apache/camel/scala/RichExchange.scala | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/7558e631/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
----------------------------------------------------------------------
diff --git a/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala b/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
index 0a280b0..c63373e 100644
--- a/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
+++ b/components/camel-scala/src/main/scala/org/apache/camel/scala/RichExchange.scala
@@ -134,4 +134,6 @@ class RichExchange(val exchange : Exchange) extends Exchange {
def handoverCompletions(exchange : Exchange) { exchange.handoverCompletions(exchange) }
def handoverCompletions = exchange.handoverCompletions
+
+ def getCreated = exchange.getCreated
}
[4/8] camel git commit: CAMEL-11354: Optimize oldest exchange
inflight per route
Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ce4e8f7d
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ce4e8f7d
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ce4e8f7d
Branch: refs/heads/master
Commit: ce4e8f7df2dbc2b8cf9b0a55c8bba01010ad3e86
Parents: 4a3debe
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 20:03:59 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 20:03:59 2017 +0200
----------------------------------------------------------------------
.../main/java/org/apache/camel/Exchange.java | 6 +
.../org/apache/camel/impl/DefaultExchange.java | 10 ++
.../camel/impl/DefaultInflightRepository.java | 2 +-
.../camel/management/mbean/ManagedRoute.java | 111 ++++---------------
.../org/apache/camel/util/MessageHelper.java | 2 +-
.../EventNotifierExchangeCompletedTest.java | 2 +-
6 files changed, 43 insertions(+), 90 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/Exchange.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/Exchange.java b/camel-core/src/main/java/org/apache/camel/Exchange.java
index eecc7e0..87fcf13 100644
--- a/camel-core/src/main/java/org/apache/camel/Exchange.java
+++ b/camel-core/src/main/java/org/apache/camel/Exchange.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -584,4 +585,9 @@ public interface Exchange {
*/
List<Synchronization> handoverCompletions();
+ /**
+ * Gets the timestamp when this exchange was created.
+ */
+ Date getCreated();
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
index c1a5c39..6b7a686 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
@@ -17,6 +17,7 @@
package org.apache.camel.impl;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
@@ -86,6 +87,15 @@ public final class DefaultExchange implements Exchange {
return String.format("Exchange[%s]", exchangeId == null ? "" : exchangeId);
}
+ @Override
+ public Date getCreated() {
+ if (hasProperties()) {
+ return getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+ } else {
+ return null;
+ }
+ }
+
public Exchange copy() {
// to be backwards compatible as today
return copy(false);
http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
index 01a2826..2c6c78b 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
@@ -167,7 +167,7 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
private static long getExchangeDuration(Exchange exchange) {
long duration = 0;
- Date created = exchange.getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+ Date created = exchange.getCreated();
if (created != null) {
duration = System.currentTimeMillis() - created.getTime();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 166f3a2..1b031b1 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -21,12 +21,12 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.management.AttributeValueExp;
@@ -68,8 +68,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
protected final String description;
protected final ModelCamelContext context;
private final LoadTriplet load = new LoadTriplet();
- private final ConcurrentSkipListMap<InFlightKey, Long> exchangesInFlightStartTimestamps = new ConcurrentSkipListMap<InFlightKey, Long>();
- private final ConcurrentHashMap<String, InFlightKey> exchangesInFlightKeys = new ConcurrentHashMap<String, InFlightKey>();
+ private final ConcurrentHashMap<String, Exchange> exchangesInFlight = new ConcurrentHashMap<String, Exchange>();
private final String jmxDomain;
public ManagedRoute(ModelCamelContext context, Route route) {
@@ -85,8 +84,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
boolean enabled = context.getManagementStrategy().getManagementAgent().getStatisticsLevel() != ManagementStatisticsLevel.Off;
setStatisticsEnabled(enabled);
- exchangesInFlightKeys.clear();
- exchangesInFlightStartTimestamps.clear();
+ exchangesInFlight.clear();
}
public Route getRoute() {
@@ -410,13 +408,14 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
String stat = dumpStatsAsXml(fullStats);
answer.append(" exchangesInflight=\"").append(getInflightExchanges()).append("\"");
answer.append(" selfProcessingTime=\"").append(routeSelfTime).append("\"");
- InFlightKey oldestInflightEntry = getOldestInflightEntry();
- if (oldestInflightEntry == null) {
+ Exchange oldest = getOldestInflightEntry();
+ if (oldest == null) {
answer.append(" oldestInflightExchangeId=\"\"");
answer.append(" oldestInflightDuration=\"\"");
} else {
- answer.append(" oldestInflightExchangeId=\"").append(oldestInflightEntry.exchangeId).append("\"");
- answer.append(" oldestInflightDuration=\"").append(System.currentTimeMillis() - oldestInflightEntry.timeStamp).append("\"");
+ long duration = System.currentTimeMillis() - oldest.getCreated().getTime();
+ answer.append(" oldestInflightExchangeId=\"").append(oldest.getExchangeId()).append("\"");
+ answer.append(" oldestInflightDuration=\"").append(duration).append("\"");
}
answer.append(" ").append(stat.substring(7, stat.length() - 2)).append(">\n");
@@ -466,111 +465,49 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
return route.hashCode();
}
- private InFlightKey getOldestInflightEntry() {
- Map.Entry<InFlightKey, Long> entry = exchangesInFlightStartTimestamps.firstEntry();
- if (entry != null) {
- return entry.getKey();
- }
- return null;
+ private Exchange getOldestInflightEntry() {
+ return exchangesInFlight.values().stream().max(Comparator.comparing(Exchange::getCreated)).orElse(null);
}
public Long getOldestInflightDuration() {
- InFlightKey oldest = getOldestInflightEntry();
- if (oldest == null) {
+ Exchange exchange = getOldestInflightEntry();
+ if (exchange == null) {
+ return null;
+ }
+ Date created = exchange.getCreated();
+ if (created != null) {
+ return System.currentTimeMillis() - created.getTime();
+ } else {
return null;
}
- return System.currentTimeMillis() - oldest.timeStamp;
}
public String getOldestInflightExchangeId() {
- InFlightKey oldest = getOldestInflightEntry();
- if (oldest == null) {
+ Exchange exchange = getOldestInflightEntry();
+ if (exchange == null) {
return null;
}
- return oldest.exchangeId;
+ return exchange.getExchangeId();
}
@Override
public void processExchange(Exchange exchange) {
- exchangesInFlightKeys.computeIfAbsent(exchange.getExchangeId(), id -> {
- InFlightKey key = new InFlightKey(System.currentTimeMillis(), exchange.getExchangeId());
- exchangesInFlightStartTimestamps.put(key, key.timeStamp);
- return key;
- });
+ exchangesInFlight.put(exchange.getExchangeId(), exchange);
super.processExchange(exchange);
}
@Override
public void completedExchange(Exchange exchange, long time) {
- exchangesInFlightKeys.computeIfPresent(exchange.getExchangeId(), (id, key) -> {
- exchangesInFlightStartTimestamps.remove(key);
- return null;
- });
+ exchangesInFlight.remove(exchange.getExchangeId());
super.completedExchange(exchange, time);
}
@Override
public void failedExchange(Exchange exchange) {
- exchangesInFlightKeys.computeIfPresent(exchange.getExchangeId(), (id, key) -> {
- exchangesInFlightStartTimestamps.remove(key);
- return null;
- });
+ exchangesInFlight.remove(exchange.getExchangeId());
super.failedExchange(exchange);
}
- private static class InFlightKey implements Comparable<InFlightKey> {
-
- private final Long timeStamp;
- private final String exchangeId;
-
- InFlightKey(Long timeStamp, String exchangeId) {
- this.timeStamp = timeStamp;
- this.exchangeId = exchangeId;
- }
-
- @Override
- public int compareTo(InFlightKey o) {
- int compare = Long.compare(timeStamp, o.timeStamp);
- if (compare == 0) {
- return exchangeId.compareTo(o.exchangeId);
- }
- return compare;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- InFlightKey that = (InFlightKey) o;
-
- if (!exchangeId.equals(that.exchangeId)) {
- return false;
- }
- if (!timeStamp.equals(that.timeStamp)) {
- return false;
- }
-
- return true;
- }
-
- @Override
- public int hashCode() {
- int result = timeStamp.hashCode();
- result = 31 * result + exchangeId.hashCode();
- return result;
- }
-
- @Override
- public String toString() {
- return exchangeId;
- }
- }
-
/**
* Used for sorting the processor mbeans accordingly to their index.
*/
http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
index 311e987..050fecc 100644
--- a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
@@ -560,7 +560,7 @@ public final class MessageHelper {
label = URISupport.sanitizeUri(exchange.getFromEndpoint().getEndpointUri());
}
long elapsed = 0;
- Date created = exchange.getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+ Date created = exchange.getCreated();
if (created != null) {
elapsed = new StopWatch(created).taken();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ce4e8f7d/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
index 45e10a0..f37e7e0 100644
--- a/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeCompletedTest.java
@@ -85,7 +85,7 @@ public class EventNotifierExchangeCompletedTest extends ContextTestSupport {
assertEquals("direct://start", event.getExchange().getFromEndpoint().getEndpointUri());
// grab the created timestamp
- Date created = event.getExchange().getProperty(Exchange.CREATED_TIMESTAMP, Date.class);
+ Date created = event.getExchange().getCreated();
assertNotNull(created);
// calculate elapsed time
[5/8] camel git commit: CAMEL-11354: Optimize oldest exchange
inflight per route
Posted by da...@apache.org.
CAMEL-11354: Optimize oldest exchange inflight per route
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ffd97f65
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ffd97f65
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ffd97f65
Branch: refs/heads/master
Commit: ffd97f652c00e2e83bb64fa8aaccd62b2f412a5f
Parents: ce4e8f7
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 20:24:19 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 20:24:19 2017 +0200
----------------------------------------------------------------------
.../camel/impl/DefaultInflightRepository.java | 3 +-
.../camel/management/mbean/ManagedRoute.java | 53 +++++-------
.../ManagedInflightStatisticsTest.java | 88 +++++---------------
3 files changed, 43 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ffd97f65/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
index 2c6c78b..f176861 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultInflightRepository.java
@@ -128,7 +128,8 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
public int compare(Exchange e1, Exchange e2) {
long d1 = getExchangeDuration(e1);
long d2 = getExchangeDuration(e2);
- return Long.compare(d1, d2);
+ // need the biggest number first
+ return -1 * Long.compare(d1, d2);
}
});
} else {
http://git-wip-us.apache.org/repos/asf/camel/blob/ffd97f65/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 1b031b1..81f4794 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -19,6 +19,7 @@ package org.apache.camel.management.mbean;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
@@ -36,6 +37,7 @@ import javax.management.Query;
import javax.management.QueryExp;
import javax.management.StringValueExp;
+import org.apache.camel.spi.InflightRepository;
import org.w3c.dom.Document;
import org.apache.camel.CamelContext;
@@ -408,14 +410,13 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
String stat = dumpStatsAsXml(fullStats);
answer.append(" exchangesInflight=\"").append(getInflightExchanges()).append("\"");
answer.append(" selfProcessingTime=\"").append(routeSelfTime).append("\"");
- Exchange oldest = getOldestInflightEntry();
+ InflightRepository.InflightExchange oldest = getOldestInflightEntry();
if (oldest == null) {
answer.append(" oldestInflightExchangeId=\"\"");
answer.append(" oldestInflightDuration=\"\"");
} else {
- long duration = System.currentTimeMillis() - oldest.getCreated().getTime();
- answer.append(" oldestInflightExchangeId=\"").append(oldest.getExchangeId()).append("\"");
- answer.append(" oldestInflightDuration=\"").append(duration).append("\"");
+ answer.append(" oldestInflightExchangeId=\"").append(oldest.getExchange().getExchangeId()).append("\"");
+ answer.append(" oldestInflightDuration=\"").append(oldest.getDuration()).append("\"");
}
answer.append(" ").append(stat.substring(7, stat.length() - 2)).append(">\n");
@@ -465,47 +466,31 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
return route.hashCode();
}
- private Exchange getOldestInflightEntry() {
- return exchangesInFlight.values().stream().max(Comparator.comparing(Exchange::getCreated)).orElse(null);
+ private InflightRepository.InflightExchange getOldestInflightEntry() {
+ Collection<InflightRepository.InflightExchange> list = getContext().getInflightRepository().browse(getRouteId(), 1, true);
+ if (list.size() == 1) {
+ return list.iterator().next();
+ } else {
+ return null;
+ }
}
public Long getOldestInflightDuration() {
- Exchange exchange = getOldestInflightEntry();
- if (exchange == null) {
+ InflightRepository.InflightExchange oldest = getOldestInflightEntry();
+ if (oldest == null) {
return null;
- }
- Date created = exchange.getCreated();
- if (created != null) {
- return System.currentTimeMillis() - created.getTime();
} else {
- return null;
+ return oldest.getDuration();
}
}
public String getOldestInflightExchangeId() {
- Exchange exchange = getOldestInflightEntry();
- if (exchange == null) {
+ InflightRepository.InflightExchange oldest = getOldestInflightEntry();
+ if (oldest == null) {
return null;
+ } else {
+ return oldest.getExchange().getExchangeId();
}
- return exchange.getExchangeId();
- }
-
- @Override
- public void processExchange(Exchange exchange) {
- exchangesInFlight.put(exchange.getExchangeId(), exchange);
- super.processExchange(exchange);
- }
-
- @Override
- public void completedExchange(Exchange exchange, long time) {
- exchangesInFlight.remove(exchange.getExchangeId());
- super.completedExchange(exchange, time);
- }
-
- @Override
- public void failedExchange(Exchange exchange) {
- exchangesInFlight.remove(exchange.getExchangeId());
- super.failedExchange(exchange);
}
/**
http://git-wip-us.apache.org/repos/asf/camel/blob/ffd97f65/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
index aa6fbe7..c8fd5ca 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
@@ -16,7 +16,10 @@
*/
package org.apache.camel.management;
+import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -30,7 +33,7 @@ import org.apache.camel.component.mock.MockEndpoint;
*/
public class ManagedInflightStatisticsTest extends ManagementTestSupport {
- public void testManageStatistics() throws Exception {
+ public void testOldestInflight() throws Exception {
// JMX tests dont work well on AIX CI servers (hangs them)
if (isPlatform("aix")) {
return;
@@ -53,10 +56,13 @@ public class ManagedInflightStatisticsTest extends ManagementTestSupport {
MockEndpoint result = getMockEndpoint("mock:result");
result.expectedMessageCount(2);
+ CountDownLatch latch1 = new CountDownLatch(1);
+ CountDownLatch latch2 = new CountDownLatch(1);
+
// start some exchanges.
- template.asyncSendBody("direct:start", 1000L);
+ template.asyncSendBody("direct:start", latch1);
Thread.sleep(500);
- template.asyncSendBody("direct:start", 1000L);
+ template.asyncSendBody("direct:start", latch2);
Thread.sleep(100);
inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
@@ -67,77 +73,32 @@ public class ManagedInflightStatisticsTest extends ManagementTestSupport {
id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
assertNotNull(id);
+ log.info("Oldest Exchange id: {}, duration: {}", id, ts);
+
+ // complete first exchange
+ latch1.countDown();
+
// Lets wait for the first exchange to complete.
- Thread.sleep(500);
+ Thread.sleep(200);
Long ts2 = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
assertNotNull(ts2);
String id2 = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
assertNotNull(id2);
+ log.info("Oldest Exchange id: {}, duration: {}", id2, ts2);
+
// Lets verify the oldest changed.
assertTrue(!id2.equals(id));
// The duration values could be different
- //assertTrue(ts2 > ts);
-
- // Lets wait for all the exchanges to complete.
- Thread.sleep(500);
-
- assertMockEndpointsSatisfied();
-
- inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
- assertEquals(0, inflight.longValue());
- ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
- assertNull(ts);
- id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
- assertNull(id);
- }
-
- public void testManageStatisticsFailed() throws Exception {
- // JMX tests dont work well on AIX CI servers (hangs them)
- if (isPlatform("aix")) {
- return;
- }
-
- // get the stats for the route
- MBeanServer mbeanServer = getMBeanServer();
+ assertTrue(!Objects.equals(ts2, ts));
- Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=routes,*"), null);
- assertEquals(1, set.size());
- ObjectName on = set.iterator().next();
+ latch2.countDown();
- Long inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
- assertEquals(0, inflight.longValue());
- Long ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
- assertNull(ts);
- String id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
- assertNull(id);
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedMessageCount(1);
-
- // start some exchanges.
- template.asyncSendBody("direct:start", 1000L);
+ // Lets wait for all the exchanges to complete.
Thread.sleep(500);
- try {
- template.sendBody("direct:start", "Kaboom");
- fail("Should have thrown exception");
- } catch (Exception e) {
- // expected
- }
-
- inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
- assertEquals(1, inflight.longValue());
-
- ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
- assertNotNull(ts);
- id = (String) mbeanServer.getAttribute(on, "OldestInflightExchangeId");
- assertNotNull(id);
assertMockEndpointsSatisfied();
- // Lets wait for all the exchanges to complete.
- Thread.sleep(500);
-
inflight = (Long) mbeanServer.getAttribute(on, "ExchangesInflight");
assertEquals(0, inflight.longValue());
ts = (Long) mbeanServer.getAttribute(on, "OldestInflightDuration");
@@ -155,13 +116,8 @@ public class ManagedInflightStatisticsTest extends ManagementTestSupport {
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
- String body = exchange.getIn().getBody(String.class);
- if ("Kaboom".equals(body)) {
- throw new IllegalArgumentException("Forced");
- }
-
- Long delay = (Long) exchange.getIn().getBody();
- Thread.sleep(delay.longValue());
+ CountDownLatch latch = (CountDownLatch) exchange.getIn().getBody();
+ latch.await(10, TimeUnit.SECONDS);
}
})
.to("mock:result").id("mock");
[2/8] camel git commit: CAMEL-11353: Optimise - JMX Statistic split
into specialized classes
Posted by da...@apache.org.
CAMEL-11353: Optimise - JMX Statistic split into specialized classes
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8bf8cd1c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8bf8cd1c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8bf8cd1c
Branch: refs/heads/master
Commit: 8bf8cd1c4b059b63101616adee2fbc2407181e57
Parents: 3081eda
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 18:37:51 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 19:01:18 2017 +0200
----------------------------------------------------------------------
.../mbean/ManagedPerformanceCounter.java | 11 +++++++----
.../apache/camel/management/mbean/Statistic.java | 12 ++++++++----
.../camel/management/mbean/StatisticCounter.java | 5 +++--
.../camel/management/mbean/StatisticDelta.java | 6 ++++++
.../camel/management/mbean/StatisticMaximum.java | 19 ++++++++++++-------
.../camel/management/mbean/StatisticMinimum.java | 19 ++++++++++++-------
.../camel/management/mbean/StatisticValue.java | 4 ++--
7 files changed, 50 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
index 2ac6214..d12e6eb 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
@@ -217,7 +217,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
deltaProcessingTime.updateValue(time);
long now = new Date().getTime();
- if (firstExchangeCompletedTimestamp.getUpdateCount() == 0) {
+ if (!firstExchangeCompletedTimestamp.isUpdated()) {
firstExchangeCompletedTimestamp.updateValue(now);
}
@@ -228,8 +228,11 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
lastExchangeCompletedExchangeId = exchange.getExchangeId();
// update mean
- long count = exchangesCompleted.getUpdateCount();
- long mean = count > 0 ? totalProcessingTime.getValue() / exchangesCompleted.getValue() : 0;
+ long mean = 0;
+ long completed = exchangesCompleted.getValue();
+ if (completed > 0) {
+ mean = totalProcessingTime.getValue() / completed;
+ }
meanProcessingTime.updateValue(mean);
}
@@ -247,7 +250,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
}
long now = new Date().getTime();
- if (firstExchangeFailureTimestamp.getUpdateCount() == 0) {
+ if (!firstExchangeFailureTimestamp.isUpdated()) {
firstExchangeFailureTimestamp.updateValue(now);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
index 63dc8a5..ba91312 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/Statistic.java
@@ -33,6 +33,9 @@ package org.apache.camel.management.mbean;
* <li>MINIMUM - A statistic with this update mode is a value that represents the minimum value
* amongst the update values applied to this statistic.</li>
* <ul>
+ * The MAXIMUM and MINIMUM modes are not 100% thread-safe as there can be a lost-update problem.
+ * This is on purpose because the performance overhead to ensure atomic updates costs to much
+ * on CPU and memory footprint. The other modes are thread-safe.
*/
public abstract class Statistic {
@@ -48,10 +51,11 @@ public abstract class Statistic {
public abstract long getValue();
- @Deprecated
- public long getUpdateCount() {
- return 0;
- }
+ /**
+ * Whether the statistic has been updated one or more times.
+ * Notice this is only working for value, maximum and minimum modes.
+ */
+ public abstract boolean isUpdated();
public abstract void reset();
http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
index d947e6b..814aa51 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticCounter.java
@@ -40,7 +40,8 @@ public class StatisticCounter extends Statistic {
}
@Override
- public long getUpdateCount() {
- return value.get();
+ public boolean isUpdated() {
+ // this is okay
+ return true;
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
index b288972..6038106 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticDelta.java
@@ -37,6 +37,12 @@ public class StatisticDelta extends Statistic {
return "" + value.get();
}
+ @Override
+ public boolean isUpdated() {
+ // this is okay
+ return true;
+ }
+
public void reset() {
value.set(0);
lastValue.set(0);
http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
index d403370..6649b9a 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMaximum.java
@@ -23,13 +23,13 @@ public class StatisticMaximum extends Statistic {
private final AtomicLong value = new AtomicLong(-1);
public void updateValue(long newValue) {
- value.updateAndGet(value -> {
- if (value == -1 || value < newValue) {
- return newValue;
- } else {
- return value;
- }
- });
+ // its okay its not 100% thread safe (these jmx counters are not guaranteed to be accurate for min/max values)
+ // if we use the atomic operation updateAndGet then the JVM creates a new lambda per call which creates a new object
+ // in the JVM and causes higher memory footprint
+ long current = value.get();
+ if (current == -1 || current < newValue) {
+ value.set(newValue);
+ }
}
public long getValue() {
@@ -38,6 +38,11 @@ public class StatisticMaximum extends Statistic {
}
@Override
+ public boolean isUpdated() {
+ return value.get() != -1;
+ }
+
+ @Override
public String toString() {
return "" + value.get();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
index 55b5a54..0beccbc 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticMinimum.java
@@ -23,13 +23,13 @@ public class StatisticMinimum extends Statistic {
private final AtomicLong value = new AtomicLong(-1);
public void updateValue(long newValue) {
- value.updateAndGet(value -> {
- if (value == -1 || value > newValue) {
- return newValue;
- } else {
- return value;
- }
- });
+ // its okay its not 100% thread safe (these jmx counters are not guaranteed to be accurate for min/max values)
+ // if we use the atomic operation updateAndGet then the JVM creates a new lambda per call which creates a new object
+ // in the JVM and causes higher memory footprint
+ long current = value.get();
+ if (current == -1 || current > newValue) {
+ value.set(newValue);
+ }
}
public long getValue() {
@@ -38,6 +38,11 @@ public class StatisticMinimum extends Statistic {
}
@Override
+ public boolean isUpdated() {
+ return value.get() != -1;
+ }
+
+ @Override
public String toString() {
return "" + value.get();
}
http://git-wip-us.apache.org/repos/asf/camel/blob/8bf8cd1c/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
index 6391799..9cb7b48 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/StatisticValue.java
@@ -36,8 +36,8 @@ public class StatisticValue extends Statistic {
}
@Override
- public long getUpdateCount() {
- return value.get() == -1 ? 0 : 1;
+ public boolean isUpdated() {
+ return value.get() != -1;
}
public void reset() {
[7/8] camel git commit: Typo
Posted by da...@apache.org.
Typo
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cff0fc0f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cff0fc0f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cff0fc0f
Branch: refs/heads/master
Commit: cff0fc0f049b1a572dd2c4bdc4a280390b45e8ed
Parents: e6bc397
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 21:00:05 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 21:00:05 2017 +0200
----------------------------------------------------------------------
.../main/java/org/apache/camel/processor/DeadLetterChannel.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/cff0fc0f/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java b/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
index a49bb1d..a7e5722 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
@@ -73,7 +73,7 @@ public class DeadLetterChannel extends RedeliveryErrorHandler {
@Override
protected boolean isRunAllowedOnPreparingShutdown() {
- // allow tu run as we want to move the message eto DLC, instead of rejecting the message
+ // allow to run as we want to move the message eto DLC, instead of rejecting the message
return true;
}
[3/8] camel git commit: CAMEL-11353: Optimise - small
Posted by da...@apache.org.
CAMEL-11353: Optimise - small
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4a3debee
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4a3debee
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4a3debee
Branch: refs/heads/master
Commit: 4a3debee1d8944cf8ad693cafb7e7137593bcc88
Parents: 8bf8cd1
Author: Claus Ibsen <da...@apache.org>
Authored: Sun May 28 19:20:08 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun May 28 19:20:08 2017 +0200
----------------------------------------------------------------------
.../camel/management/mbean/ManagedCounter.java | 20 ++++++++------------
.../mbean/ManagedPerformanceCounter.java | 8 ++++----
2 files changed, 12 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/4a3debee/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
index 5605ae2..562c951 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCounter.java
@@ -25,31 +25,27 @@ import org.apache.camel.spi.ManagementStrategy;
@ManagedResource(description = "Managed Counter")
public abstract class ManagedCounter implements ManagedCounterMBean {
protected Statistic exchangesTotal;
- protected Statistic startTimestamp;
- protected Statistic resetTimestamp;
+ protected Date startTimestamp;
+ protected Date resetTimestamp;
public void init(ManagementStrategy strategy) {
this.exchangesTotal = new StatisticCounter();
- this.startTimestamp = new StatisticValue();
- this.resetTimestamp = new StatisticValue();
- long now = new Date().getTime();
- startTimestamp.updateValue(now);
- resetTimestamp.updateValue(now);
+ Date now = new Date();
+ startTimestamp = now;
+ resetTimestamp = now;
}
public void reset() {
exchangesTotal.reset();
- resetTimestamp.updateValue(new Date().getTime());
+ resetTimestamp = new Date();
}
public Date getStartTimestamp() {
- long value = startTimestamp.getValue();
- return value > 0 ? new Date(value) : null;
+ return startTimestamp;
}
public Date getResetTimestamp() {
- long value = resetTimestamp.getValue();
- return value > 0 ? new Date(value) : null;
+ return resetTimestamp;
}
public long getExchangesTotal() throws Exception {
http://git-wip-us.apache.org/repos/asf/camel/blob/4a3debee/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
index d12e6eb..b234a64 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedPerformanceCounter.java
@@ -216,7 +216,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
lastProcessingTime.updateValue(time);
deltaProcessingTime.updateValue(time);
- long now = new Date().getTime();
+ long now = System.currentTimeMillis();
if (!firstExchangeCompletedTimestamp.isUpdated()) {
firstExchangeCompletedTimestamp.updateValue(now);
}
@@ -249,7 +249,7 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
externalRedeliveries.increment();
}
- long now = new Date().getTime();
+ long now = System.currentTimeMillis();
if (!firstExchangeFailureTimestamp.isUpdated()) {
firstExchangeFailureTimestamp.updateValue(now);
}
@@ -277,8 +277,8 @@ public abstract class ManagedPerformanceCounter extends ManagedCounter implement
sb.append(String.format(" meanProcessingTime=\"%s\"", meanProcessingTime.getValue()));
if (fullStats) {
- sb.append(String.format(" startTimestamp=\"%s\"", dateAsString(startTimestamp.getValue())));
- sb.append(String.format(" resetTimestamp=\"%s\"", dateAsString(resetTimestamp.getValue())));
+ sb.append(String.format(" startTimestamp=\"%s\"", dateAsString(startTimestamp.getTime())));
+ sb.append(String.format(" resetTimestamp=\"%s\"", dateAsString(resetTimestamp.getTime())));
sb.append(String.format(" firstExchangeCompletedTimestamp=\"%s\"", dateAsString(firstExchangeCompletedTimestamp.getValue())));
sb.append(String.format(" firstExchangeCompletedExchangeId=\"%s\"", nullSafe(firstExchangeCompletedExchangeId)));
sb.append(String.format(" firstExchangeFailureTimestamp=\"%s\"", dateAsString(firstExchangeFailureTimestamp.getValue())));