summaryrefslogtreecommitdiffstats
path: root/windriver
diff options
context:
space:
mode:
Diffstat (limited to 'windriver')
-rw-r--r--windriver/.gitignore3
-rw-r--r--windriver/pom.xml2
-rw-r--r--windriver/requirements.txt2
-rw-r--r--windriver/titanium_cloud/extensions/views/epacaps.py2
-rw-r--r--windriver/titanium_cloud/extensions/views/extensions.py2
-rw-r--r--windriver/titanium_cloud/extensions/views/fcaps.py2
-rw-r--r--windriver/titanium_cloud/middleware.py65
-rw-r--r--windriver/titanium_cloud/proxy/views/identityV3.py2
-rw-r--r--windriver/titanium_cloud/proxy/views/services.py2
-rw-r--r--windriver/titanium_cloud/pub/config/log.yml8
-rw-r--r--windriver/titanium_cloud/registration/views/registration.py3
-rw-r--r--windriver/titanium_cloud/resource/tests/__init__.py14
-rw-r--r--windriver/titanium_cloud/resource/tests/test_capacity.py121
-rw-r--r--windriver/titanium_cloud/resource/views/capacity.py8
-rw-r--r--windriver/titanium_cloud/settings.py5
15 files changed, 222 insertions, 19 deletions
diff --git a/windriver/.gitignore b/windriver/.gitignore
index e86d02b0..17e6ddd9 100644
--- a/windriver/.gitignore
+++ b/windriver/.gitignore
@@ -8,4 +8,5 @@ logs/*.log
.tox
.coverage
htmlcov/
-
+coverage.xml
+test-reports/
diff --git a/windriver/pom.xml b/windriver/pom.xml
index 2c08bdad..0b216c59 100644
--- a/windriver/pom.xml
+++ b/windriver/pom.xml
@@ -49,7 +49,7 @@
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
- <executable>${session.executionRootDirectory}/mvn-phase-script.sh</executable>
+ <executable>${project.basedir}/mvn-phase-script.sh</executable>
<environmentVariables>
<!-- make mvn properties as env for our script -->
<MVN_PROJECT_GROUPID>${project.groupId}</MVN_PROJECT_GROUPID>
diff --git a/windriver/requirements.txt b/windriver/requirements.txt
index c3576f5d..3d769c15 100644
--- a/windriver/requirements.txt
+++ b/windriver/requirements.txt
@@ -20,5 +20,5 @@ mock==2.0.0
unittest_xml_reporting==1.12.0
# for onap logging
-onappylog>=1.0.5
+onappylog>=1.0.6
diff --git a/windriver/titanium_cloud/extensions/views/epacaps.py b/windriver/titanium_cloud/extensions/views/epacaps.py
index 77542b31..7efb71a6 100644
--- a/windriver/titanium_cloud/extensions/views/epacaps.py
+++ b/windriver/titanium_cloud/extensions/views/epacaps.py
@@ -23,7 +23,7 @@ from newton_base.extensions import epacaps as newton_epacaps
logger = logging.getLogger(__name__)
-DEBUG=True
+#DEBUG=True
class EpaCaps(newton_epacaps.EpaCaps):
diff --git a/windriver/titanium_cloud/extensions/views/extensions.py b/windriver/titanium_cloud/extensions/views/extensions.py
index 680e2ca6..d331b7b5 100644
--- a/windriver/titanium_cloud/extensions/views/extensions.py
+++ b/windriver/titanium_cloud/extensions/views/extensions.py
@@ -27,7 +27,7 @@ from newton_base.extensions import extensions as newton_extensions
logger = logging.getLogger(__name__)
-DEBUG=True
+#DEBUG=True
class Extensions(newton_extensions.Extensions):
diff --git a/windriver/titanium_cloud/extensions/views/fcaps.py b/windriver/titanium_cloud/extensions/views/fcaps.py
index d5be095f..c36b2642 100644
--- a/windriver/titanium_cloud/extensions/views/fcaps.py
+++ b/windriver/titanium_cloud/extensions/views/fcaps.py
@@ -35,7 +35,7 @@ from common.msapi import extsys
logger = logging.getLogger(__name__)
-DEBUG=True
+#DEBUG=True
#dict to store running worker threads
running_threads = {}
diff --git a/windriver/titanium_cloud/middleware.py b/windriver/titanium_cloud/middleware.py
new file mode 100644
index 00000000..cae9e9b1
--- /dev/null
+++ b/windriver/titanium_cloud/middleware.py
@@ -0,0 +1,65 @@
+# Copyright (c) 2017-2018 Wind River Systems, Inc.
+#
+# Licensed 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.
+
+import uuid
+from django.conf import settings
+from onaplogging.mdcContext import MDC
+
+FORWARDED_FOR_FIELDS = ["HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED_HOST",
+ "HTTP_X_FORWARDED_SERVER"]
+
+class LogContextMiddleware(object):
+
+ # the last IP behind multiple proxies, if no exist proxies
+ # get local host ip.
+ def _getLastIp(self, request):
+
+ ip = ""
+ try:
+ for field in FORWARDED_FOR_FIELDS:
+ if field in request.META:
+ if ',' in request.META[field]:
+ parts = request.META[field].split(',')
+ ip = parts[-1].strip().split(":")[0]
+ else:
+ ip = request.META[field].split(":")[0]
+
+ if ip == "":
+ ip = request.META.get("HTTP_HOST").split(":")[0]
+
+ except Exception:
+ pass
+
+ return ip
+
+
+ def process_request(self, request):
+ # fetch propageted Id from other component. if do not fetch id,
+ # generate one.
+ ReqeustID = request.META.get("HTTP_X_TRANSACTIONID", None)
+ if ReqeustID is None:
+ ReqeustID = uuid.uuid3(uuid.NAMESPACE_URL, settings.MULTIVIM_VERSION)
+ MDC.put("requestID", ReqeustID)
+ # generate the reqeust id
+ InvocationID = uuid.uuid3(uuid.NAMESPACE_DNS, settings.MULTIVIM_VERSION)
+ MDC.put("invocationID", InvocationID)
+ MDC.put("serviceName", settings.MULTIVIM_VERSION)
+ MDC.put("serviceIP", self._getLastIp(request))
+ return None
+
+ def process_response(self, request, response):
+
+ MDC.clear()
+ return response
+
diff --git a/windriver/titanium_cloud/proxy/views/identityV3.py b/windriver/titanium_cloud/proxy/views/identityV3.py
index dd280314..c831d017 100644
--- a/windriver/titanium_cloud/proxy/views/identityV3.py
+++ b/windriver/titanium_cloud/proxy/views/identityV3.py
@@ -19,7 +19,7 @@ from newton_base.proxy import identityV3 as newton_identityV3
logger = logging.getLogger(__name__)
-DEBUG=True
+#DEBUG=True
class Tokens(newton_identityV3.Tokens):
diff --git a/windriver/titanium_cloud/proxy/views/services.py b/windriver/titanium_cloud/proxy/views/services.py
index 4bfecdbc..c1d4f194 100644
--- a/windriver/titanium_cloud/proxy/views/services.py
+++ b/windriver/titanium_cloud/proxy/views/services.py
@@ -21,7 +21,7 @@ from newton_base.proxy import services as newton_services
logger = logging.getLogger(__name__)
-DEBUG=True
+#DEBUG=True
class Services(newton_services.Services):
diff --git a/windriver/titanium_cloud/pub/config/log.yml b/windriver/titanium_cloud/pub/config/log.yml
index 7dab297b..95e1945a 100644
--- a/windriver/titanium_cloud/pub/config/log.yml
+++ b/windriver/titanium_cloud/pub/config/log.yml
@@ -20,14 +20,14 @@ handlers:
class: "logging.handlers.RotatingFileHandler"
filename: "/var/log/onap/multicloud/openstack/windriver/titanium_cloud.log"
formatter: "mdcFormat"
- maxBytes: 1024*1024*50
+ maxBytes: 52428800
backupCount: 10
formatters:
standard:
- format: "%(asctime)s:[%(name)s]:[%(filename)s]-[%(lineno)d] [%(levelname)s]:%(message)s"
+ format: "%(asctime)s|||||%(name)s||%(thread)||%(funcName)s||%(levelname)s||%(message)s"
mdcFormat:
- format: "%(asctime)s:[%(name)s]:[%(filename)s]-[%(lineno)d] [%(levelname)s]:[%(mdc)s]: %(message)s"
- mdcfmt: "{requestID}"
+ format: "%(asctime)s|||||%(name)s||%(thread)s||%(funcName)s||%(levelname)s||%(message)s||||%(mdc)s \t"
+ mdcfmt: "{requestID} {invocationID} {serviceName} {serviceIP}"
datefmt: "%Y-%m-%d %H:%M:%S"
(): onaplogging.mdcformatter.MDCFormatter
diff --git a/windriver/titanium_cloud/registration/views/registration.py b/windriver/titanium_cloud/registration/views/registration.py
index da83efaa..a7b2831f 100644
--- a/windriver/titanium_cloud/registration/views/registration.py
+++ b/windriver/titanium_cloud/registration/views/registration.py
@@ -20,10 +20,11 @@ from newton_base.registration import registration as newton_registration
logger = logging.getLogger(__name__)
-DEBUG=True
+#DEBUG=True
class Registry(newton_registration.Registry):
def __init__(self):
self.proxy_prefix = settings.MULTICLOUD_PREFIX
+ self.aai_base_url = settings.AAI_BASE_URL
self._logger = logger
diff --git a/windriver/titanium_cloud/resource/tests/__init__.py b/windriver/titanium_cloud/resource/tests/__init__.py
new file mode 100644
index 00000000..afa702d3
--- /dev/null
+++ b/windriver/titanium_cloud/resource/tests/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (c) 2017-2018 Wind River Systems, Inc.
+#
+# Licensed 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.
+
diff --git a/windriver/titanium_cloud/resource/tests/test_capacity.py b/windriver/titanium_cloud/resource/tests/test_capacity.py
new file mode 100644
index 00000000..3dae1080
--- /dev/null
+++ b/windriver/titanium_cloud/resource/tests/test_capacity.py
@@ -0,0 +1,121 @@
+# Copyright (c) 2017-2018 Wind River Systems, Inc.
+#
+# Licensed 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.
+
+import mock
+
+from rest_framework import status
+
+from common.utils import restcall
+from newton_base.tests import mock_info
+from newton_base.tests import test_base
+from newton_base.util import VimDriverUtils
+
+MOCK_GET_TENANT_LIMIT_RESPONSE = {
+ "limits" : {
+ "rate" : [],
+ "absolute" : {
+ "maxTotalRAMSize" : 128*1024,
+ "totalRAMUsed" : 8*1024,
+ "totalCoresUsed" : 4,
+ "maxTotalCores" : 20,
+ }
+ }
+}
+
+MOCK_GET_HYPER_STATATICS_RESPONSE = {
+ "hypervisor_statistics" : {
+ "vcpus_used" : 4,
+ "free_ram_mb" : 120*1024,
+ "vcpus" : 10,
+ "free_disk_gb" : 300
+ }
+}
+
+MOCK_GET_STORAGE_RESPONSE = {
+ "limits" : {
+ "rate" : [],
+ "absolute" : {
+ "totalGigabytesUsed" : 200,
+ "maxTotalVolumeGigabytes" : 500,
+ }
+ }
+}
+
+TEST_REQ_SUCCESS_SOURCE = {
+ "vCPU": "4",
+ "Memory": "4096",
+ "Storage": "200"
+}
+
+
+TEST_REQ_FAILED_SOURCE = {
+ "vCPU": "17",
+ "Memory": "4096",
+ "Storage": "200"
+}
+
+class TestCapacity(test_base.TestRequest):
+ def setUp(self):
+ super(TestCapacity, self).setUp()
+
+ def _get_mock_response(self, return_value=None):
+ mock_response = mock.Mock(spec=test_base.MockResponse)
+ mock_response.status_code = status.HTTP_200_OK
+ mock_response.json.return_value = return_value
+ return mock_response
+
+ @mock.patch.object(VimDriverUtils, 'get_session')
+ @mock.patch.object(VimDriverUtils, 'get_vim_info')
+ def test_capacity_check_success(self, mock_get_vim_info, mock_get_session):
+ mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+ mock_get_session.return_value = test_base.get_mock_session(
+ ["get"], {
+ "side_effect": [
+ self._get_mock_response(MOCK_GET_TENANT_LIMIT_RESPONSE),
+ self._get_mock_response(MOCK_GET_HYPER_STATATICS_RESPONSE),
+ self._get_mock_response(MOCK_GET_STORAGE_RESPONSE),
+ ]
+ })
+
+ response = self.client.post((
+ "/api/%s/v0/windriver-hudson-dc_RegionOne/"
+ "capacity_check" % test_base.MULTIVIM_VERSION),
+ TEST_REQ_SUCCESS_SOURCE,
+ HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+ self.assertEquals(status.HTTP_200_OK, response.status_code)
+ self.assertEqual({"result": True}, response.data)
+
+ @mock.patch.object(VimDriverUtils, 'get_session')
+ @mock.patch.object(VimDriverUtils, 'get_vim_info')
+ def test_capacity_check_nova_limits_failed(self, mock_get_vim_info, mock_get_session):
+ mock_get_vim_info.return_value = mock_info.MOCK_VIM_INFO
+ mock_get_session.return_value = test_base.get_mock_session(
+ ["get"], {
+ "side_effect": [
+ self._get_mock_response(MOCK_GET_TENANT_LIMIT_RESPONSE),
+ self._get_mock_response(MOCK_GET_HYPER_STATATICS_RESPONSE),
+ self._get_mock_response(MOCK_GET_STORAGE_RESPONSE),
+ ]
+ })
+
+ response = self.client.post((
+ "/api/%s/v0/windriver-hudson-dc_RegionOne/"
+ "capacity_check" % test_base.MULTIVIM_VERSION),
+ TEST_REQ_FAILED_SOURCE,
+ HTTP_X_AUTH_TOKEN=mock_info.MOCK_TOKEN_ID)
+
+ self.assertEquals(status.HTTP_200_OK, response.status_code)
+ self.assertEqual({"result": False}, response.data)
+
diff --git a/windriver/titanium_cloud/resource/views/capacity.py b/windriver/titanium_cloud/resource/views/capacity.py
index 6d20075c..d73cc0fb 100644
--- a/windriver/titanium_cloud/resource/views/capacity.py
+++ b/windriver/titanium_cloud/resource/views/capacity.py
@@ -43,7 +43,7 @@ class CapacityCheck(APIView):
hasEnoughResource = False
try :
- resource_demand = json.load(request.data)
+ resource_demand = request.data
#get token:
cloud_owner, regionid = extsys.decode_vim_id(vimid)
@@ -93,11 +93,11 @@ class CapacityCheck(APIView):
remainStorage = hypervisor_statistics['free_disk_gb']
# compare resource demanded with available
- if (resource_demand['vCPU'] >= remainVCPU):
+ if (int(resource_demand['vCPU']) >= remainVCPU):
hasEnoughResource = False
- elif (resource_demand['Memory'] >= remainMEM):
+ elif (int(resource_demand['Memory']) >= remainMEM):
hasEnoughResource = False
- elif (resource_demand['Storage'] >= remainStorage):
+ elif (int(resource_demand['Storage']) >= remainStorage):
hasEnoughResource = False
else:
hasEnoughResource = True
diff --git a/windriver/titanium_cloud/settings.py b/windriver/titanium_cloud/settings.py
index 88bba77d..f05991a9 100644
--- a/windriver/titanium_cloud/settings.py
+++ b/windriver/titanium_cloud/settings.py
@@ -32,9 +32,9 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = '3o-wney!99y)^h3v)0$j16l9=fdjxcb+a8g+q3tfbahcnu2b0o'
# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
+#DEBUG = True
-ALLOWED_HOSTS = []
+ALLOWED_HOSTS = ['*']
# Application definition
@@ -56,6 +56,7 @@ MIDDLEWARE_CLASSES = [
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
+ 'titanium_cloud.middleware.LogContextMiddleware',
]
ROOT_URLCONF = 'titanium_cloud.urls'