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"],
