Index: /branches/amp_3_7/extensions/monitoring/webui/resource/resource.module.js
===================================================================
--- /branches/amp_3_7/extensions/monitoring/webui/resource/resource.module.js	(revision 2443)
+++ /branches/amp_3_7/extensions/monitoring/webui/resource/resource.module.js	(working copy)
@@ -77,7 +77,7 @@
                 }
             })
             .state('index.monitoring.resource.slb.virtual_service.detail', {
-                url: '^/monitoring/resource/slb/virtual_service/{name}?{device_ip}',
+                url: '^/monitoring/resource/slb/virtual_service/{name}?{device_ip}&{id}',
                 views: {
                     'main@index': {
                         templateUrl: 'app/modules/extensions/monitoring/resource/slb/virtual_service_detail.html',
Index: /branches/amp_3_7/extensions/monitoring/webui/resource/resource.service.js
===================================================================
--- /branches/amp_3_7/extensions/monitoring/webui/resource/resource.service.js	(revision 2443)
+++ /branches/amp_3_7/extensions/monitoring/webui/resource/resource.service.js	(working copy)
@@ -2147,11 +2147,12 @@
                 return apiService.post(url, post_data);
             };
 
-            function addServiceUrlConfig(service_name, device_ip, url_str) {
+            function addServiceUrlConfig(service_name, device_ip, url_str, device_id) {
                 var url = '/api/cm/extension_monitor/MonitorADSVSURL/_perform?action=add';
                 var post_data = {
                     action: 'add',
                     options: JSON.stringify({
+                        "device_id": device_id,
                         "device_ip": device_ip,
                         "vs_name": service_name,
                         "url": url_str
Index: /branches/amp_3_7/extensions/monitoring/webui/resource/slb/virtual_service.controller.js
===================================================================
--- /branches/amp_3_7/extensions/monitoring/webui/resource/slb/virtual_service.controller.js	(revision 2443)
+++ /branches/amp_3_7/extensions/monitoring/webui/resource/slb/virtual_service.controller.js	(working copy)
@@ -412,6 +412,7 @@
                     controllerAs: 'vsUrlAdd',
                     resolve: {
                         modalData: {
+                            "device_id": $stateParams.id,
                             "device_ip": $stateParams.device_ip,
                             "vs_name": $scope.current_service_name
                         }
@@ -688,7 +689,7 @@
 
             addViewModal.submit = function () {
                 addViewModal.showProgressBar();
-                monitorResourceService.addServiceUrlConfig(modalData.vs_name, modalData.device_ip, addViewModal.url).then(function (res) {
+                monitorResourceService.addServiceUrlConfig(modalData.vs_name, modalData.device_ip, addViewModal.url, modalData.device_id).then(function (res) {
                     $rootScope.$broadcast('endLoading', true);
                     if (res && res.status === 200) {
                         if (res.data[0]) { // add successful
Index: /branches/amp_3_7/extensions/monitoring/webui/resource/slb/virtual_service.html
===================================================================
--- /branches/amp_3_7/extensions/monitoring/webui/resource/slb/virtual_service.html	(revision 2443)
+++ /branches/amp_3_7/extensions/monitoring/webui/resource/slb/virtual_service.html	(working copy)
@@ -64,7 +64,7 @@
                         <tbody ng-hide="monitorVirtualService.loading">
                             <tr ng-repeat="item in displayedCollection">
                                 <td class="d-num">{{ ((currentPageIndex - 1) * pageSize) + $index + 1 }}</td>
-                                <td style="cursor: pointer;" ui-sref="index.monitoring.resource.slb.virtual_service.detail({name: item.name, device_ip: item.device.ip})"> <a class="name">{{ item.name }}</a></td>
+                                <td style="cursor: pointer;" ui-sref="index.monitoring.resource.slb.virtual_service.detail({name: item.name, device_ip: item.device.ip, id: item.device.id})"> <a class="name">{{ item.name }}</a></td>
                                 <th>{{ item.type }}</th>
                                 <td>{{ item.addr }}</td>
                                 <td>{{ item.port }}</td>
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/djproject/urls.py
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/djproject/urls.py	(revision 2443)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/djproject/urls.py	(working copy)
@@ -9,7 +9,7 @@
 from hive.utils import hive_webpipe_handler, hive_webpipe_write_handler
 from hive.node import reload_app_node
 from hive.session import current_app
-from hive.composer import KibanaProxyView, elastic_proxy, reporting_downloading_handler, reporting_logo_handler, composer_config, composer_status, composer_query
+from hive.composer import KibanaProxyView, elastic_proxy, reporting_downloading_handler, reporting_logo_handler, composer_config, composer_status, composer_query, composer_proxy
 from hive.storage import storage_mangement
 from hive.log_location import handle_log_location_app
 
@@ -54,6 +54,7 @@
 
 urlpatterns += patterns(
     '',
+    url(r'^composer/(?P<path>.*)', composer_proxy),
     url(r'^composer_config/(?P<app>\w+)', composer_config),
     url(r'^composer_status/(?P<app>\w+)', composer_status),
     url(r'^composer_query$', composer_query),
Index: /branches/amp_3_7/src/webui/webui/htdocs/new/src/hive/composer.py
===================================================================
--- /branches/amp_3_7/src/webui/webui/htdocs/new/src/hive/composer.py	(revision 2443)
+++ /branches/amp_3_7/src/webui/webui/htdocs/new/src/hive/composer.py	(working copy)
@@ -139,6 +139,58 @@
     return HttpResponse(json.dumps(res), content_type='application/json')
 
 
+@csrf_exempt
+@gzip_page
+def composer_proxy(request, path):
+    url = "/v1/" + path
+    timestamp = str(int(time.time()))
+    m = hashlib.md5()
+    m.update(CMDATA['COMPOSER_KEY'] + str(timestamp) + url + CMDATA['COMPOSER_SECRET'])
+
+    query_string = request.environ['QUERY_STRING']
+    if query_string == '':
+        query_string += "time=" + timestamp + "&sign=" + m.hexdigest()
+    else:
+        query_string += "&time=" + timestamp + "&sign=" + m.hexdigest()
+
+    # for k, v in request.environ.items():
+    #     print(k, v)
+
+    httpClient = None
+
+    if 'CONTENT_TYPE' in request.environ:
+        config = {"Content-Type": request.environ['CONTENT_TYPE']}
+    else:
+        config = {}
+    try:
+        httpClient = httplib.HTTPConnection(CMDATA['COMPOSER_IP'], str(CMDATA['COMPOSER_PORT']), True, timeout=300)
+        httpClient.request(request.method, url + "?" + query_string, request.body, config)
+        response = httpClient.getresponse()
+        response_data = {
+            'status': response.status,
+            'reason': response.reason,
+            'body': response.read(),
+        }
+    except Exception as e:
+        return HttpResponse(json.dumps({
+            'error': 500,
+            'message': "Request Composer_ui Error",
+            'data': str(e)
+        }), content_type='application/json')
+    else:
+        if response_data['status'] == 200:
+            return HttpResponse(response_data['body'], content_type='application/json')
+        else:
+            return HttpResponse(json.dumps({
+                'error': response_data['status'],
+                'message': response_data['reason'],
+                'data': response_data['body']
+            }), content_type='application/json')
+    finally:
+        if httpClient:
+            httpClient.close()
+
+
 def composer_query(request):
     http_client = None
 
