Author: swagle
Date: Fri May 10 21:07:23 2013
New Revision: 1481189
URL: http://svn.apache.org/r1481189
Log:
AMBARI-2107. Cluster CPU Chart is off the charts. (swagle)
Added:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/GangliaMetricTest.java
Modified:
incubator/ambari/trunk/CHANGES.txt
incubator/ambari/trunk/ambari-server/pom.xml
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
Modified: incubator/ambari/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1481189&r1=1481188&r2=1481189&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Fri May 10 21:07:23 2013
@@ -837,6 +837,8 @@ Trunk (unreleased changes):
BUG FIXES
+ AMBARI-2107. Cluster CPU Chart is off the charts. (swagle)
+
AMBARI-2102. Confusing message "ls: cannot access /usr/share/java/*oracle*:
No such file or directory". (smohanty)
Modified: incubator/ambari/trunk/ambari-server/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/pom.xml?rev=1481189&r1=1481188&r2=1481189&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/pom.xml (original)
+++ incubator/ambari/trunk/ambari-server/pom.xml Fri May 10 21:07:23 2013
@@ -400,7 +400,7 @@
</environmentVariables>
<skip>${skipTests}</skip>
</configuration>
- <id>default-cli</id>
+ <id>python-test</id>
<phase>test</phase>
<goals>
<goal>exec</goal>
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java?rev=1481189&r1=1481188&r2=1481189&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaMetric.java
Fri May 10 21:07:23 2013
@@ -18,6 +18,10 @@
package org.apache.ambari.server.controller.ganglia;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
@@ -58,6 +62,22 @@ public class GangliaMetric {
* The temporal data points.
*/
private Number[][] datapoints;
+
+
+ private static final Set<String> PERCENTAGE_METRIC;
+
+ //BUG-3386 Cluster CPU Chart is off the charts
+ // Here can be added other percentage metrics
+ static {
+ Set<String> temp = new HashSet<String>();
+ temp.add("cpu_wio");
+ /*temp.add("cpu_idle");
+ temp.add("cpu_nice");
+ temp.add("cpu_aidle");
+ temp.add("cpu_system");
+ temp.add("cpu_user");*/
+ PERCENTAGE_METRIC = Collections.unmodifiableSet(temp);
+ }
// ----- GangliaMetric -----------------------------------------------------
@@ -106,10 +126,45 @@ public class GangliaMetric {
return datapoints;
}
+
public void setDatapoints(Number[][] datapoints) {
this.datapoints = datapoints;
- }
+ }
+
+ public void setDatapointsFromList(List<GangliaMetric.TemporalMetric>
listTemporalMetrics) {
+ //this.datapoints = datapoints;
+ Number[][] datapointsArray = new Number[listTemporalMetrics.size()][2];
+ int cnt = 0;
+ if (PERCENTAGE_METRIC.contains(metric_name)) {
+ int firstIndex = 0;
+ int lastIndex = listTemporalMetrics.size() - 1;
+ for (int i = firstIndex; i <= lastIndex; ++i) {
+ GangliaMetric.TemporalMetric m = listTemporalMetrics.get(i);
+ Number val = m.getValue();
+ if (100.0 >= val.doubleValue()) {
+ datapointsArray[cnt][0] = val;
+ datapointsArray[cnt][1] = m.getTime();
+ cnt++;
+ }
+ }
+ } else {
+ int firstIndex = 0;
+ int lastIndex = listTemporalMetrics.size() - 1;
+ for (int i = firstIndex; i <= lastIndex; ++i) {
+ GangliaMetric.TemporalMetric m = listTemporalMetrics.get(i);
+ datapointsArray[i][0] = m.getValue();
+ datapointsArray[i][1] = m.getTime();
+ cnt++;
+ }
+ }
+
+ this.datapoints = new Number[cnt][2];
+ for (int i = 0; i < this.datapoints.length; i++) {
+ this.datapoints[i][0] = datapointsArray[i][0];
+ this.datapoints[i][1] = datapointsArray[i][1];
+ }
+ }
// ----- Object overrides --------------------------------------------------
@@ -159,9 +214,19 @@ public class GangliaMetric {
public static class TemporalMetric {
private Number m_value;
private Number m_time;
+ private boolean isInvalid;
+
+ public boolean isIsInvalid() {
+ return isInvalid;
+ }
- public TemporalMetric(Number value, Number time) {
- m_value = value;
+ public TemporalMetric(String value, Number time) {
+ isInvalid = false;
+ try{
+ m_value = convertToNumber(value);
+ } catch (NumberFormatException e) {
+ isInvalid = true;
+ }
m_time = time;
}
@@ -172,5 +237,21 @@ public class GangliaMetric {
public Number getTime() {
return m_time;
}
+
+ private Number convertToNumber(String s) throws NumberFormatException {
+ Number res;
+ if(s.contains(".")){
+ Double d = Double.parseDouble(s);
+ if(d.isNaN() || d.isInfinite()){
+ throw new NumberFormatException(s);
+ } else {
+ res = d;
+ }
+ } else {
+ res = Long.parseLong(s);
+ }
+ return res;
+ }
+
}
}
Modified:
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java?rev=1481189&r1=1481188&r2=1481189&view=diff
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
(original)
+++
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
Fri May 10 21:07:23 2013
@@ -413,20 +413,13 @@ public abstract class GangliaPropertyPro
String val = reader.readLine();
while(! val.equals("[AMBARI_DP_END]")) {
- listTemporalMetrics.add(
- new GangliaMetric.TemporalMetric(convertToNumber(val), time));
+ GangliaMetric.TemporalMetric tm = new
GangliaMetric.TemporalMetric(val, time);
+ if (!tm.isIsInvalid()) listTemporalMetrics.add(tm);
time += step;
val = reader.readLine();
}
- //todo: change setter in GangliaMetric to take collection
- Number[][] datapointsArray = new
Number[listTemporalMetrics.size()][2];
- for (int i = 0; i < listTemporalMetrics.size(); ++i) {
- GangliaMetric.TemporalMetric m = listTemporalMetrics.get(i);
- datapointsArray[i][0] = m.getValue();
- datapointsArray[i][1] = m.getTime();
- }
- metric.setDatapoints(datapointsArray);
+ metric.setDatapointsFromList(listTemporalMetrics);
ResourceKey key = new ResourceKey(metric.getHost_name(),
metric.getCluster_name());
Set<Resource> resourceSet = resources.get(key);
Added:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/GangliaMetricTest.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/GangliaMetricTest.java?rev=1481189&view=auto
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/GangliaMetricTest.java
(added)
+++
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/GangliaMetricTest.java
Fri May 10 21:07:23 2013
@@ -0,0 +1,102 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.apache.ambari.server.controller.ganglia;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author root
+ */
+public class GangliaMetricTest {
+
+
+
+ /**
+ * Test of setDatapoints method, of class GangliaMetric.
+ */
+ @Test
+ public void testSetDatapointsOfPercentValue() {
+ System.out.println("setDatapoints");
+ List<GangliaMetric.TemporalMetric> listTemporalMetrics =
+ new ArrayList<GangliaMetric.TemporalMetric>();
+ GangliaMetric instance = new GangliaMetric();
+ instance.setDs_name("dsName");
+ instance.setCluster_name("c1");
+ instance.setHost_name("localhost");
+ instance.setMetric_name("cpu_wio");
+
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("111.0", new
Long(1362440880)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("11.0", new
Long(1362440881)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("100.0", new
Long(1362440882)));
+ instance.setDatapointsFromList(listTemporalMetrics);
+ assertTrue(instance.getDatapoints().length == 2);
+ }
+
+ /**
+ * Test of setDatapoints method, of class GangliaMetric.
+ */
+ //@Test
+ public void testSetDatapointsOfgcTimeMillisValue() {
+ System.out.println("setDatapoints");
+ List<GangliaMetric.TemporalMetric> listTemporalMetrics =
+ new ArrayList<GangliaMetric.TemporalMetric>();
+ GangliaMetric instance = new GangliaMetric();
+ instance.setDs_name("dsName");
+ instance.setCluster_name("c1");
+ instance.setHost_name("localhost");
+ instance.setMetric_name("jvm.metrics.gcTimeMillis");
+
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(1)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(2)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(3)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("111.0", new
Long(4)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("11.0", new
Long(5)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("100.0", new
Long(6)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(7)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("11.0", new
Long(8)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(9)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(10)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(11)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(12)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("11.0", new
Long(13)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("100.0", new
Long(14)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(15)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(16)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(17)));
+ listTemporalMetrics.add(new GangliaMetric.TemporalMetric("0.0", new
Long(18)));
+ instance.setDatapointsFromList(listTemporalMetrics);
+ System.out.println(instance.toString());
+ assertTrue(instance.getDatapoints().length == 11);
+ }
+
+ /**
+ * Test of GangliaMetric.TemporalMetric constructor.
+ */
+ @Test
+ public void testTemporalMetricFineValue() {
+ System.out.println("GangliaMetric.TemporalMetric");
+ GangliaMetric.TemporalMetric tm;
+ tm = new GangliaMetric.TemporalMetric("100", new Long(1362440880));
+ assertFalse("GangliaMetric.TemporalMetric is valid", tm.isIsInvalid());
+ }
+
+ /**
+ * Test of GangliaMetric.TemporalMetric constructor.
+ */
+ @Test
+ public void testTemporalMetricIsNaNValue() {
+ System.out.println("GangliaMetric.TemporalMetric");
+ GangliaMetric.TemporalMetric tm;
+ tm = new GangliaMetric.TemporalMetric("any string", new Long(1362440880));
+ assertTrue("GangliaMetric.TemporalMetric is invalid", tm.isIsInvalid());
+ }
+
+
+
+}
\ No newline at end of file