Repository: ambari
Updated Branches:
  refs/heads/trunk 8c940368c -> b285bd088


AMBARI-9084 Refine Smoke test for AMS (dsen)


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

Branch: refs/heads/trunk
Commit: b285bd0884fd2de6ed3c10291e787f23fb83cb98
Parents: 8c94036
Author: Dmytro Sen <[email protected]>
Authored: Mon Jan 19 21:40:34 2015 +0200
Committer: Dmytro Sen <[email protected]>
Committed: Mon Jan 19 23:25:25 2015 +0200

----------------------------------------------------------------------
 ambari-server/pom.xml                           |   1 +
 .../java/org/apache/ambari/server/Role.java     |   1 +
 .../AMS/0.1.0/package/scripts/params.py         |   2 +-
 .../AMS/0.1.0/package/scripts/service_check.py  | 101 +++++++++++++++++++
 .../package/templates/smoketest_metrics.json.j2 |  15 +++
 .../stacks/HDP/2.2/role_command_order.json      |   1 +
 6 files changed, 120 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b285bd08/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index 060d104..e01375f 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -166,6 +166,7 @@
             
<exclude>src/main/resources/stacks/HDP/2.1.GlusterFS/services/YARN/package/templates/exclude_hosts_list.j2</exclude>
             <exclude>src/main/windows/ambari-server.cmd</exclude>
             <exclude>src/main/windows/ambari-server.ps1</exclude>
+            
<exclude>src/main/resources/common-services/AMS/0.1.0/package/templates/smoketest_metrics.json.j2</exclude>
             
<exclude>src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/balancer-emulator/balancer-err.log</exclude>
             
<exclude>src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/balancer-emulator/balancer.log</exclude>
             
<exclude>src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/balancer-emulator/balancer.log</exclude>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b285bd08/ambari-server/src/main/java/org/apache/ambari/server/Role.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/Role.java 
b/ambari-server/src/main/java/org/apache/ambari/server/Role.java
index 4712992..228b25b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/Role.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/Role.java
@@ -109,6 +109,7 @@ public class Role {
   public static final Role KERBEROS_SERVICE_CHECK = 
valueOf("KERBEROS_SERVICE_CHECK");
   public static final Role METRIC_COLLECTOR = valueOf("METRIC_COLLECTOR");
   public static final Role METRIC_MONITOR = valueOf("METRIC_MONITOR");
+  public static final Role AMS_SERVICE_CHECK = valueOf("AMS_SERVICE_CHECK");
 
   private String name = null;
   

http://git-wip-us.apache.org/repos/asf/ambari/blob/b285bd08/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/params.py
 
b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/params.py
index efe0d28..c596ddf 100644
--- 
a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/params.py
+++ 
b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/params.py
@@ -38,7 +38,7 @@ ams_collector_script = "/usr/sbin/ambari-metrics-collector"
 ams_collector_pid_dir = status_params.ams_collector_pid_dir
 ams_collector_hosts = default("/clusterHostInfo/metric_collector_hosts", [])
 ams_collector_host_single = ams_collector_hosts[0] #TODO cardinality is 1+ so 
we can have more than one host
-metric_collector_port = 
default("/configurations/ams-site/timeline.metrics.service.webapp.address", 
"0.0.0.0:8188")
+metric_collector_port = 
default("/configurations/ams-site/timeline.metrics.service.webapp.address", 
"0.0.0.0:6188")
 if metric_collector_port and metric_collector_port.find(':') != -1:
   metric_collector_port = metric_collector_port.split(':')[1]
 pass

http://git-wip-us.apache.org/repos/asf/ambari/blob/b285bd08/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
 
b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
index 5561e10..c4974a7 100644
--- 
a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
+++ 
b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
@@ -17,3 +17,104 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 
 """
+
+from resource_management.core.logger import Logger
+from resource_management.core.base import Fail
+from resource_management import Script
+from resource_management import Template
+import httplib
+import urllib
+import json
+import random
+import time
+
+
+class AMSServiceCheck(Script):
+
+  AMS_METRICS_POST_URL = "/ws/v1/timeline/metrics/"
+  AMS_METRICS_GET_URL = "/ws/v1/timeline/metrics?%s"
+
+  def service_check(self, env):
+    import params
+
+    Logger.info("AMS service check was started.")
+    env.set_params(params)
+
+    random_value1 = random.random()
+    current_time = time.time()
+    metric_json = Template('smoketest_metrics.json.j2', 
hostname=params.hostname, random1=random_value1,
+                           current_time=current_time).get_content()
+    Logger.info("Generated metrics:\n%s" % metric_json)
+
+    Logger.info("Connecting (POST) to %s:%s%s" % 
(params.ams_collector_host_single,
+                                                  params.metric_collector_port,
+                                                  self.AMS_METRICS_POST_URL))
+    headers = {"Content-type": "application/json"}
+
+    conn = httplib.HTTPConnection(params.ams_collector_host_single,            
                          int(params.metric_collector_port))
+    conn.request("POST", self.AMS_METRICS_POST_URL, metric_json, headers)
+
+    response = conn.getresponse()
+    Logger.info("Http response: %s %s" % (response.status, response.reason))
+
+    data = response.read()
+    Logger.info("Http data: %s" % data)
+    conn.close()
+
+    if response.status == 200:
+      Logger.info("AMS metrics were saved.")
+    else:
+      Logger.info("AMS metrics were not saved. Service check has failed.")
+      raise Fail("AMS metrics were not saved. Service check has failed. POST 
request status: %s %s \n%s" %
+                 (response.status, response.reason, data))
+
+    get_metrics_parameters = {
+      "metricNames": "AMS.SmokeTest.FakeMetric",
+      "appId": "amssmoketestfake",
+      "hostname": params.hostname,
+      "startTime": 1419860000000,
+      "precision": "seconds",
+      "grouped": "false",
+    }
+    encoded_get_metrics_parameters = urllib.urlencode(get_metrics_parameters)
+
+    Logger.info("Connecting (GET) to %s:%s%s" % 
(params.ams_collector_host_single,
+                                                 params.metric_collector_port,
+                                              self.AMS_METRICS_GET_URL % 
encoded_get_metrics_parameters))
+
+    conn = httplib.HTTPConnection(params.ams_collector_host_single,
+                                  int(params.metric_collector_port))
+    conn.request("GET", self.AMS_METRICS_GET_URL % 
encoded_get_metrics_parameters)
+    response = conn.getresponse()
+    Logger.info("Http response: %s %s" % (response.status, response.reason))
+
+    data = response.read()
+    Logger.info("Http data: %s" % data)
+    conn.close()
+
+    if response.status == 200:
+      Logger.info("AMS metrics were retrieved.")
+    else:
+      Logger.info("AMS metrics were not retrieved. Service check has failed.")
+      raise Fail("AMS metrics were not retrieved. Service check has failed. 
GET request status: %s %s \n%s" %
+                 (response.status, response.reason, data))
+    data_json = json.loads(data)
+
+    def floats_eq(f1, f2, delta):
+      return abs(f1-f2) < delta
+
+    for metrics_data in data_json["metrics"]:
+      if (floats_eq(metrics_data["metrics"]["1419860001000"], random_value1, 
0.0000001)
+          and floats_eq(metrics_data["metrics"]["1419860002000"], 
current_time, 1)):
+        Logger.info("Values %s and %s were found in response." % 
(random_value1, current_time))
+        break
+      pass
+    else:
+      Logger.info("Values %s and %s were not found in response." % 
(random_value1, current_time))
+      raise Fail("Values %s and %s were not found in response." % 
(random_value1, current_time))
+
+    Logger.info("AMS service check is finished.")
+
+if __name__ == "__main__":
+  AMSServiceCheck().execute()
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/b285bd08/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/templates/smoketest_metrics.json.j2
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/templates/smoketest_metrics.json.j2
 
b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/templates/smoketest_metrics.json.j2
new file mode 100644
index 0000000..e2e8501
--- /dev/null
+++ 
b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/templates/smoketest_metrics.json.j2
@@ -0,0 +1,15 @@
+{
+  "metrics": [
+    {
+      "metricname": "AMS.SmokeTest.FakeMetric",
+      "appid": "amssmoketestfake",
+      "hostname": "{{hostname}}",
+      "timestamp": 1419860001000,
+      "starttime": 1419860001000,
+      "metrics": {
+        "1419860001000": {{random1}},
+        "1419860002000": {{current_time}}
+      }
+    }
+  ]
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/b285bd08/ambari-server/src/main/resources/stacks/HDP/2.2/role_command_order.json
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.2/role_command_order.json 
b/ambari-server/src/main/resources/stacks/HDP/2.2/role_command_order.json
index d694272..e62cda2 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/role_command_order.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/role_command_order.json
@@ -5,6 +5,7 @@
     "_comment" : "dependencies for all cases",
     "FALCON_SERVER-START": ["NAMENODE-START", "DATANODE-START", 
"OOZIE_SERVER-START"],
     "METRIC_COLLECTOR-START": ["NAMENODE-START", "DATANODE-START"],
+    "AMS_SERVICE_CHECK-SERVICE_CHECK": ["METRIC_COLLECTOR-START", 
"HDFS_SERVICE_CHECK-SERVICE_CHECK"],
     "WEBHCAT_SERVICE_CHECK-SERVICE_CHECK": ["WEBHCAT_SERVER-START"],
     "FLUME_SERVICE_CHECK-SERVICE_CHECK": ["FLUME_HANDLER-START"],
     "FALCON_SERVICE_CHECK-SERVICE_CHECK": ["FALCON_SERVER-START"],

Reply via email to