Repository: ambari Updated Branches: refs/heads/trunk 73472dc1c -> 1c737d3a2
AMBARI-15761. While creating WEB URLs for Alerts, if we add http/https then we should not drop the URL path past port number (aonishuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1c737d3a Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1c737d3a Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1c737d3a Branch: refs/heads/trunk Commit: 1c737d3a29d42640cd16ffef1c179f6856a9ec76 Parents: 73472dc Author: Andrew Onishuk <[email protected]> Authored: Thu Apr 7 18:59:43 2016 +0300 Committer: Andrew Onishuk <[email protected]> Committed: Thu Apr 7 18:59:43 2016 +0300 ---------------------------------------------------------------------- .../python/ambari_agent/alerts/web_alert.py | 11 ++++-- .../src/test/python/ambari_agent/TestAlerts.py | 4 +-- .../resource_management/TestGetPathFromUrl.py | 31 ++++++++++++++++ .../libraries/functions/__init__.py | 2 ++ .../libraries/functions/get_path_from_url.py | 37 ++++++++++++++++++++ 5 files changed, 81 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1c737d3a/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py b/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py index 3f201c8..42ad96b 100644 --- a/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py +++ b/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py @@ -30,6 +30,7 @@ from tempfile import gettempdir from alerts.base_alert import BaseAlert from collections import namedtuple from resource_management.libraries.functions.get_port_from_url import get_port_from_url +from resource_management.libraries.functions.get_path_from_url import get_path_from_url from resource_management.libraries.functions.curl_krb_request import curl_krb_request from ambari_commons import OSCheck from ambari_commons.inet_utils import resolve_address @@ -129,6 +130,10 @@ class WebAlert(BaseAlert): if string_uri.startswith('http://') or string_uri.startswith('https://'): return alert_uri.uri + uri_path = None + if string_uri and string_uri != str(None): + uri_path = get_path_from_url(string_uri) + # start building the URL manually host = BaseAlert.get_host_from_url(alert_uri.uri) if host is None: @@ -153,8 +158,10 @@ class WebAlert(BaseAlert): # on windows 0.0.0.0 is invalid address to connect but on linux it resolved to 127.0.0.1 host = resolve_address(host) - return "{0}://{1}:{2}".format(scheme, host, str(port)) - + if uri_path: + return "{0}://{1}:{2}/{3}".format(scheme, host, str(port), uri_path) + else: + return "{0}://{1}:{2}".format(scheme, host, str(port)) def _make_web_request(self, url): """ http://git-wip-us.apache.org/repos/asf/ambari/blob/1c737d3a/ambari-agent/src/test/python/ambari_agent/TestAlerts.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/test/python/ambari_agent/TestAlerts.py b/ambari-agent/src/test/python/ambari_agent/TestAlerts.py index e5f6a41..9caee8a 100644 --- a/ambari-agent/src/test/python/ambari_agent/TestAlerts.py +++ b/ambari-agent/src/test/python/ambari_agent/TestAlerts.py @@ -548,7 +548,7 @@ class TestAlerts(TestCase): configuration = {'hdfs-site' : { 'dfs.http.policy' : 'HTTPS_ONLY', 'dfs.datanode.http.address' : 'c6401.ambari.apache.org:80', - 'dfs.datanode.https.address' : 'c6401.ambari.apache.org:443' } + 'dfs.datanode.https.address' : 'c6401.ambari.apache.org:443/test/path' } } self.__update_cluster_configuration(cluster_configuration, configuration) @@ -565,7 +565,7 @@ class TestAlerts(TestCase): # SSL assertion self.assertEquals('CRITICAL', alerts[0]['state']) - self.assertEquals('(Unit Tests) critical: https://c6401.ambari.apache.org:443. error message', alerts[0]['text']) + self.assertEquals('(Unit Tests) critical: https://c6401.ambari.apache.org:443/test/path. error message', alerts[0]['text']) def test_reschedule(self): test_file_path = os.path.join('ambari_agent', 'dummy_files') http://git-wip-us.apache.org/repos/asf/ambari/blob/1c737d3a/ambari-agent/src/test/python/resource_management/TestGetPathFromUrl.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/test/python/resource_management/TestGetPathFromUrl.py b/ambari-agent/src/test/python/resource_management/TestGetPathFromUrl.py new file mode 100644 index 0000000..7550a00 --- /dev/null +++ b/ambari-agent/src/test/python/resource_management/TestGetPathFromUrl.py @@ -0,0 +1,31 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +''' + +from unittest import TestCase + +from resource_management.libraries.functions.get_path_from_url import get_path_from_url + + +class TestGetPathFromUlr(TestCase): + + def test_get_path_from_url(self): + self.assertEquals(get_path_from_url("http://test.host:8888/test/path"), "test/path") + self.assertEquals(get_path_from_url("http://test.host/test/path"), "test/path") + self.assertEquals(get_path_from_url("test.host:8888/test/path"), "test/path") + self.assertEquals(get_path_from_url("test.host/test/path"), "test/path") + self.assertEquals(get_path_from_url("/test/path"), "test/path") http://git-wip-us.apache.org/repos/asf/ambari/blob/1c737d3a/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py b/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py index ff4fddf..f0c2e13 100644 --- a/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py @@ -43,7 +43,9 @@ from resource_management.libraries.functions.get_lzo_packages import * from resource_management.libraries.functions.setup_ranger_plugin import * from resource_management.libraries.functions.curl_krb_request import * from resource_management.libraries.functions.get_bare_principal import * +from resource_management.libraries.functions.get_path_from_url import * from resource_management.libraries.functions.show_logs import * + IS_WINDOWS = platform.system() == "Windows" if IS_WINDOWS: http://git-wip-us.apache.org/repos/asf/ambari/blob/1c737d3a/ambari-common/src/main/python/resource_management/libraries/functions/get_path_from_url.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/get_path_from_url.py b/ambari-common/src/main/python/resource_management/libraries/functions/get_path_from_url.py new file mode 100644 index 0000000..0cc5782 --- /dev/null +++ b/ambari-common/src/main/python/resource_management/libraries/functions/get_path_from_url.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +""" +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Ambari Agent + +""" + +from resource_management.libraries.functions.is_empty import is_empty +import re + +def get_path_from_url(address): + """ + Return port from URL. If the address is numeric, the address is assumed to be a port and is returned. + If address is UnknownConfiguration, UnknownConfiguration will be returned. + """ + if is_empty(address): + return address + + result = re.findall("^((.+)://)?(([a-zA-Z0-9]|\.|-)*)(:([\d]{2,}))?/(.*)$", address) + if result: + return result[0][6] + return None \ No newline at end of file
