diff options
Diffstat (limited to 'SDNC-GUI-252')
-rw-r--r-- | SDNC-GUI-252/resources/application.properties | 59 | ||||
-rw-r--r-- | SDNC-GUI-252/resources/static/form-validationTest.html | 141 | ||||
-rw-r--r-- | SDNC-GUI-252/webapp/WEB-INF/views/index.jsp | 69 | ||||
-rw-r--r-- | SDNC-GUI-252/webapp/js/sdnc-controller/sdnc-validationTest-controller.js | 243 | ||||
-rw-r--r-- | SDNC-GUI-252/webapp/js/sdnc-services/sdnc-validationTest-service.js | 80 | ||||
-rw-r--r-- | SDNC-GUI-252/webapp/package.json | 32 |
6 files changed, 624 insertions, 0 deletions
diff --git a/SDNC-GUI-252/resources/application.properties b/SDNC-GUI-252/resources/application.properties new file mode 100644 index 0000000..a96b37d --- /dev/null +++ b/SDNC-GUI-252/resources/application.properties @@ -0,0 +1,59 @@ +server.port = 9001 + +spring.jackson.serialization.fail-on-empty-beans=false + +server.tomcat.uri-encoding=utf-8 + +server.error.whitelabel.enabled=false +spring.mvc.view.prefix = /WEB-INF/views/ +spring.mvc.view.suffix = .jsp + +#spring.datasource.url=jdbc:mysql://localhost:3306/mysql?useSSL=false +#spring.datasource.driver-class-name=com.mysql.jdbc.Driver +#spring.datasource.name=mysql +#spring.jpa.database=mysql +#spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect +# +#spring.datasource.username=root +#spring.datasource.password=root +#spring.jpa.generate-ddl=true + +spring.datasource.tomcat.max-wait=20000 +spring.datasource.tomcat.max-active=50 +spring.datasource.tomcat.max-idle=20 +spring.datasource.tomcat.min-idle=15 + +spring.jpa.show-sql=true +#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardIm + + +#spring.jpa.hibernate.ddl-auto=create +#spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect +#spring.jpa.properties.hibernate.id.new_generator_mappings = false +#spring.jpa.properties.hibernate.format_sql = true + +#logging.level.org.hibernate.SQL=DEBUG +#logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE + +# =============================== +# Set here configurations for the database connection +spring.datasource.url=jdbc:mariadb://localhost:3306/testreports +spring.datasource.username=root +spring.datasource.password=12345 +spring.datasource.driver-class-name=org.mariadb.jdbc.Driver +# Keep the connection alive if idle for a long time (needed in production) +spring.datasource.testWhileIdle=true +spring.datasource.validationQuery=SELECT 1 +# =============================== +# = JPA / HIBERNATE +# =============================== +# Show or not log for each sql query +spring.jpa.show-sql=true +# Hibernate ddl auto (create, create-drop, update): with "create-drop" the database +# schema will be automatically created afresh for every start of application +spring.jpa.hibernate.ddl-auto=create +# Naming strategy +spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl +spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy +# Allows Hibernate to generate SQL optimized for a particular DBMS +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
\ No newline at end of file diff --git a/SDNC-GUI-252/resources/static/form-validationTest.html b/SDNC-GUI-252/resources/static/form-validationTest.html new file mode 100644 index 0000000..88f0e96 --- /dev/null +++ b/SDNC-GUI-252/resources/static/form-validationTest.html @@ -0,0 +1,141 @@ +<!-- /* +* ============LICENSE_START======================================================= +* ONAP : SDNC-FEATURES +* ================================================================================ +* Copyright 2018 TechMahindra +*================================================================================= +* 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. +* ============LICENSE_END========================================================= +*/ + --> +<div class="testMain"> + <div class="heading"><img src="images/validation.png" width=30 height="30" style="margin-left:5px;"> Pre-test/Certification</div> + <form name="reportForm"> + <div class="row> + <div role="alert" style="margin-left:20px;margin-bottom:5px;"> + <button class="btn btn-danger testNotification" ng-show="showError"><img src="images/error.png" width=40 height="30" class="testImgIcon">{{errorMessage}}</button> + <button class="btn btn-success testNotification" ng-show="showSuccess"><img src="images/success.png" width=40 height="30" class="testImgIcon">{{successMessage}}</button> + <button class="btn btn-warning testNotification" ng-show="showWarninf"><img src="images/waning.png" width=35 height="25" class="testImgIcon">{{warningMessage}}</button> + <button class="btn btn-info testNotification" ng-show="showInfo">{{infoMessage}}</button> + </div> + +<div class="row"> + <div class="column testCol"> + <label class="labeltext">Specify IP Address</label> + </div> + <div class="column" style="background-color:#f2f2f2;width:50%;margin-left:0px;"> + <input type="text" ng-model="IPAddress" name="IPAddress" style="margin-left:5px;width:170px;" ng-ip-address placeholder='255.255.255.255' required></input> + <div role="alert"> + <span class="error" ng-show="reportForm.IPAddress.$error.required">Required!</span> + </div> + <div role="alert"> + <span class="error" ng-if="reportForm.IPAddress.$invalid">Not a valid IPAddress!</span> + </div> + <div role="alert"> + <span class="error" ng-if="reportForm.IPAddress.pattern">Not a valid IPAddress!</span> + </div> + </div> +</div> +<div class="row"> + <div class="column testCol"> + <label class="labeltext">Specify Host Name</label> + </div> + <div class="column" style="background-color:#f2f2f2;width:50%;margin-left:0px;"> + <input type="text" ng-model="HostName" name="HostName" style="margin-left:5px;width:170px;" required ng-pattern="hostNamePattern"></input> + <div role="alert"> + <span class="error" ng-show="reportForm.HostName.$error.required">Required!</span> + </div> + <div role="alert"> + <span class="error" ng-show="reportForm.HostName.$invalid">Not a valid HostName!</span> + </div> + </div> +</div> +<div class="row"> + <div class="column" style="width:25%;background-color:#f2f2f2;height:45px;margin-left:35px;"> + <label class="labeltext">Select Certification</label> + </div> + <div class="column" style="background-color:#f2f2f2;width:50%;height:45px;margin-left:0px;"> + <label ng-repeat="val in validationTestList" class="labeltext" style="margin-right:35px;"> + <input type="checkbox" ng-model="val.Selected" class="check" ng-change="updateSelection($index,validationTestList,val.validationType);">{{val.validationType}}</input> + </label> + </div> +</div> +<!--<hr style="border-color:darkGrey;">--> +<div class="row" ng-show="allowTestSelection"> +<div class="column btnRunTest"> +<input type="submit" ng-click="runTest()" value="Run PreTest" id="btnSubmit" ng-disabled="showError" style="margin-left:0px;"/> +</div> +</div> +</form> +<table class="tableDisplay" ng-show="ShowResult" id="tableToExport" style="margin-left:10px;width:1000px;"> + <tr class="first_row"> + <th>SNo. + </th> + <th colspan="2" style="text-align:center;">TestName + </th> + <th>Device IP + </th> + <th>Status + </th> + <th style="width:20%;">Statistics (%Loss)</th> + <th style="width:20%;">Average Time (ms)</th> + <th>Result + </th> + </tr> + <tr ng-repeat="test in objPreTest"> + <td>{{$index+1}} + </td> + <td><img src="{{(test.testtype=='Network Layer') ? 'images/images.png': 'images/protocol.png'}}" width=40 height=30 ></img></td> + <td>{{test.testtype}} + </td> + <td>{{test.ipaddress}} + </td> + <td>{{test.status | uppercase}} + </td> + <td> + <div ng-show="test.testtype =='Network Layer'" class="w3-light-grey"> + <div ng-show=test.statistics!=null class="w3-container w3-red w3-center" style="width:{{test.statisticPer}}%">{{test.statistics}}% Loss + </div> + <div ng-show=test.statistics==null class="w3-orange w3-center" style="width:{{test.statisticPer}}%">No Statistics Recorded + </div> + </div> + <div ng-show="test.testtype =='Protocol Layer'"> + <img src='/images/router.png' width=30 height=30 style="margin-bottom:10px;"></img> + <span class="{{(test.status == 'unreachable') ? 'arrowRed':'arrowGreen'}}">→</span><span class="{{(test.status == 'unreachable') ? 'arrowRed':'arrowGreen'}}">→</span><span class="{{(test.status == 'unreachable') ? 'arrowRed':'arrowGreen'}}">→ + <img src='/images/router.png' width=30 height=30 ></img> + </div> + </td> + <td> + <div ng-show="test.testtype =='Network Layer'" class="w3-light-grey"> + <div ng-show=test.avgTime!=null class="w3-container w3-green w3-center" style="width:{{test.avgTimePer}}%">{{test.avgTime}} ms</div> + <div ng-show=test.statistics==null class="w3-blue w3-center" style="width:{{test.statisticPer}}%">No AvgTime Recorded + </div> + </div> + </td> + <td><img src="{{(test.status=='reachable') ? 'images/success.png': 'images/FailImage.png'}}" width=30 height=25></img> + </td> + </tr> +</table> +<div class="row"> +<div class="column" style="margin-top:10px;width:800px;" ng-show="ShowResult"> + <span class='arrowRed'>→</span> + <label class="labeltext">UnReachable</label> + <span class='arrowGreen'>→</span> + <label class="labeltext">Reachable</label> + <span><img src='images/success.png' width=30 height=25></span> + <label class="labeltext">Pass</label> + <span><img src='images/FailImage.png' width=30 height=25></span> + <label class="labeltext">Fail</label> + </div> +</div> +</div>
\ No newline at end of file diff --git a/SDNC-GUI-252/webapp/WEB-INF/views/index.jsp b/SDNC-GUI-252/webapp/WEB-INF/views/index.jsp new file mode 100644 index 0000000..34a3c91 --- /dev/null +++ b/SDNC-GUI-252/webapp/WEB-INF/views/index.jsp @@ -0,0 +1,69 @@ +<!-- /* +* ============LICENSE_START======================================================= +* ONAP : SDNC-FEATURES +* ================================================================================ +* Copyright 2018 TechMahindra +*================================================================================= +* 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. +* ============LICENSE_END========================================================= +*/ + --> +<!-- index.html --> +<!DOCTYPE html> +<html ng-app="myApp"> + <head> + <meta charset="utf-8"> + <!-- CSS --> + <script src="./scripts/jquery.min.js"></script> + <script src="./scripts/tether.min.js" ></script> + <link rel="stylesheet" href="./node_modules/bootstrap-3.3.7/dist/css/bootstrap.min.css"> + <script src="./node_modules/bootstrap-3.3.7/dist/js/bootstrap.min.js"></script> + <link rel="stylesheet" href="/style/sdnc-style.css"> + <!-- JS --> + <!-- load angular,date-time picker,pagination,growl and ui-router --> + <script src = "./scripts/angular.min.js"></script> + <script src = "./scripts/angular-route.min.js"></script> + <script src="./node_modules/angular-utils-pagination/dirPagination.js"></script> + <script src="./node_modules/ng-csv/build/ng-csv.min.js"></script> + <script src="./scripts/angular-sanitize.min.js"></script> + <link rel="stylesheet" href="./node_modules/angularjs-datetime-picker/angularjs-datetime-picker.css" /> + <script src="./node_modules/angularjs-datetime-picker/angularjs-datetime-picker.js"></script> + <script data-require="jquery@*" data-semver="2.1.4" src="https://code.jquery.com/jquery-2.1.4.js"></script> + <script src="./node_modules/angular-utils-pagination/dirPagination.js"></script> + <script src="./js/app.js"></script> + <script src="./js/sdnc-controller/sdnc-viewreport-controller.js"></script> + <script src="./js/sdnc-controller/sdnc-validationTest-controller.js"></script> + <script src="./js/sdnc-services/sdnc-viewReport-service.js"></script> + <script src="./js/sdnc-services/sdnc-validationTest-service.js"></script> + <script src="./scripts/angular-growl.min.js" ></script> + <script src="./node_modules/ng-ip-address/ngIpAddress.min.js" ></script> + + <link rel="stylesheet" type="text/css" href="./scripts/angular-growl.min.css"> + <link rel="stylesheet" href="/style/w3.css"> + </head> + <!-- apply our angular app --> + <body> + <div class="container"> + <nav role="navigation" class="navbar navbar-default" style="min-width: 1200px;"> + <div class="navbar-header" style="background-color:#DCDCDC;font-size: 15px;font-weight: bold;"> + <ul class="nav navbar-nav"> + <li ng-class='active'><a href="#testValidation">CERTIFICATION TEST</a></li> + <li><a href="#testReports">VIEW ALL REPORTS</a></li> + <ul> + </div> + <nav> + <!-- views will be injected here --> + <div ng-view></div> + </div> + </body> +</html>
\ No newline at end of file diff --git a/SDNC-GUI-252/webapp/js/sdnc-controller/sdnc-validationTest-controller.js b/SDNC-GUI-252/webapp/js/sdnc-controller/sdnc-validationTest-controller.js new file mode 100644 index 0000000..a60c840 --- /dev/null +++ b/SDNC-GUI-252/webapp/js/sdnc-controller/sdnc-validationTest-controller.js @@ -0,0 +1,243 @@ +/* +* ============LICENSE_START======================================================= +* ONAP : SDNC-FEATURES +* ================================================================================ +* Copyright 2018 TechMahindra +*================================================================================= +* 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. +* ============LICENSE_END========================================================= +*/ + +myApp.controller('TestController', ['$scope', '$http', 'growl', 'viewReportService', 'validationTestService', function($scope, $http, growl, viewReportService, validationTestService) { + + $scope.showTestReport = false; + + //Input data for validation test dropdwon + var validationTestList = [{ + "typeId": 1, + "validationType": "Network Layer", + "Selected": false + }, + { + "typeId": 2, + "validationType": "Protocol Layer", + "Selected": false + } + ]; + + $scope.validationTestList = validationTestList; + + + $scope.getselectval = function() { + $scope.selectedvalues = 'Name: ' + $scope.selitem.validationType + ' Id: ' + $scope.selitem.typeId; + } + + $scope.showError = false; + $scope.errorMessage = ""; + $scope.showSuccess = false; + $scope.successMessage = ""; + $scope.showWarning = false; + $scope.warningMessage = ""; + $scope.showInfo = false; + $scope.infoMessage = ""; + $scope.ShowResult = false; + $scope.allowTestSelection = false; + $scope.hostNamePattern = /([a-z0-9](.[a-z0-9-]*[a-z0-9]))/; + + + //service call to fetch the all the test name + $scope.getAllVNF = function() { + + validationTestService.getAllVNF().then(function(data) { + if (data != null) { + console.log(data); + $scope.objvnfList = data.vnfList; + console.log("--TestController:getAllVNF called--" + $scope.objvnfList); + $scope.allowTestSelection = true; + } else { + $scope.showWarninf = true; + $scope.warningMessage = "No VNF is eligible for confirgruation!!!"; + growl.error($scope.warningMessage, { + title: 'Warning!' + }); + } + }); + }; + $scope.getAllVNF(); + + //Called when user selects a test type + $scope.updateSelection = function(position, items, valType) { + angular.forEach(items, function(val, index) { + if (position != index) + val.checked = false; + $scope.selectedTest = valType; + console.log("--TestController::updateSelection--", $scope.selectedTest); + }); + + if ($scope.IPAddress != null && $scope.HostName != null && valType != null) { + $scope.showError = false; + } + } + + + //Called when user clicks on runtest + $scope.runTest = function() { + + $scope.showError = false; + $scope.vnfSelected = []; + $scope.testSelected = []; + + var message = ""; + for (var i = 0; i < $scope.validationTestList.length; i++) { + if ($scope.validationTestList[i].Selected) { + var typeId = $scope.validationTestList[i].typeId; + var validationType = $scope.validationTestList[i].validationType; + message += "typeId: " + typeId + " validationType: " + validationType + "\n"; + console.log("--TestController::Runtest--", message); + var testDetails = {}; + testDetails.typeId = typeId; + testDetails.validationType = validationType; + $scope.testSelected.push(testDetails); + } + } + console.log("--TestController::Runtest--", JSON.stringify($scope.testSelected)); + + var vnfDetails = {}; + if ($scope.IPAddress != null && $scope.HostName != null && $scope.testSelected.length >= 1) { + vnfDetails.ipAddress = $scope.IPAddress; + vnfDetails.hostName = $scope.HostName; + $scope.vnfSelected.push(vnfDetails); + console.log("--TestController::Runtest--", JSON.stringify($scope.vnfSelected)); + + //Call the validation test service with json file and testType as the parameter + + validationTestService.runPretest($scope.vnfSelected, $scope.testSelected).then(function(response) { + console.log("--TestController::runTest--", JSON.stringify(response)); + //in case of success, build the model object to store the service output here + if (response.status === 200) { + if (response.preTestResponse != null && response.preTestResponse.length >= 1) { + $scope.ShowResult = true; + $scope.createTestModel(response.preTestResponse); + $scope.showMessage(response.preTestResponse); + + } else { + console.log(response); + $scope.showError = true; + $scope.errorMessage = "Something went wrong!!!"; + growl.error($scope.errorMessage, { + title: 'Error!' + }); + } + } else { + console.log(response); + $scope.showError = true; + $scope.errorMessage = "Pre test validation failed!!! Check the report for more details"; + growl.error($scope.errorMessage, { + title: 'Error!' + }); + } + }, + function(response) { + console.log("--TestController--", response); + }); + } else { + $scope.showError = true; + $scope.errorMessage = "Please provide the inputs for VNF and test to be performed!!"; + growl.error($scope.errorMessage, { + title: 'Error!' + }); + } + + }; + + $scope.showMessage=function(data){ + + if(angular.isDefined(data) && data.length>=1){ + + angular.forEach(data, function(value, key){ + if(value.status == "unreachable"){ + console.log("--TestController::showMessage--",value.status); + $scope.showError = true; + $scope.errorMessage = "PreTest validation Failed, Please check logs for further details!!!"; + growl.error($scope.errorMessage, { + title: 'Error!' + }); + } + else + { + $scope.showSuccess = true; + $scope.successMessage = "Pre test validation completed!!"; + growl.success($scope.successMessage, { + title: 'Success!' + }); + } + + }); + + } + } + + //Function to build the UI model to be shown + $scope.createTestModel = function(result) { + + $scope.showError = false; + $scope.showWarning = false; + $scope.objPreTestModel = result; + $scope.objPreTest = []; + + + if ($scope.objPreTestModel.length > 1) { + for (var i = 0; i < $scope.objPreTestModel.length; i++) { + var objTestReport = {}; + objTestReport.ipaddress = $scope.objPreTestModel[i].ipaddress; + objTestReport.status = $scope.objPreTestModel[i].status; + objTestReport.testtype = $scope.objPreTestModel[i].testtype; + objTestReport.statistics = $scope.objPreTestModel[i].statistics; + objTestReport.avgTime = $scope.objPreTestModel[i].avgTime; + + + if ($scope.objPreTestModel[i].testtype === "Network Layer") { + if (objTestReport.statistics != null) { + //fetching the statistics to show in progress bar + var statistics = objTestReport.statistics; + statistics = statistics.split("%"); + objTestReport.statistics = statistics[0]; + if (objTestReport.statistics == 0) { + objTestReport.statisticPer = parseInt(objTestReport.statistics) + 50; + } else + objTestReport.statisticPer = objTestReport.statistics; + } + + //fetching the avg time to show in progress bar + if (objTestReport.avgTime != null) { + var avgTime = objTestReport.avgTime; + avgTime = avgTime.split("="); + var Testtime = avgTime[1]; + objTestReport.avgTime = Testtime.slice(0, -2).trim(); + console.log("--TestController::createTestModel--", objTestReport.avgTime); + if (objTestReport.avgTime < 50) { + objTestReport.avgTimePer = parseInt(objTestReport.avgTime) + 10; + } else + objTestReport.avgTimePer = objTestReport.avgTime; + + } + } + $scope.objPreTest.push(objTestReport); + console.log("--TestController::createTestModel--", JSON.stringify($scope.objPreTest)); + } + } + console.log("--TestController::createTestModel::final PreTestModel--" + JSON.stringify($scope.objPreTest)); + + } + +}]);
\ No newline at end of file diff --git a/SDNC-GUI-252/webapp/js/sdnc-services/sdnc-validationTest-service.js b/SDNC-GUI-252/webapp/js/sdnc-services/sdnc-validationTest-service.js new file mode 100644 index 0000000..6a7af30 --- /dev/null +++ b/SDNC-GUI-252/webapp/js/sdnc-services/sdnc-validationTest-service.js @@ -0,0 +1,80 @@ +/* +* ============LICENSE_START======================================================= +* ONAP : SDNC-FEATURES +* ================================================================================ +* Copyright 2018 TechMahindra +*================================================================================= +* 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. +* ============LICENSE_END========================================================= +*/ +myApp.service('validationTestService', ['$http', function($http) { + + + this.getAllVNF = function() { + var testlist = {}; + return $http.get('./sdnc-stubs/getAllVNF.json') + .then(function(response) { + console.log("---validationTestService::getAllVNF::TestResponse---" + JSON.stringify(response)); + vnflist = response.data; + return vnflist; + }, + function(response) { + console.log("validationTestService::getAllVNF::Status Code", response.status); + return response; + }); + + }; + + this.runPretest = function(vnfList, validationTestType) { + + + var data = {}; + data.vnfList = vnfList; + data.validationTestType = validationTestType; + + var config = { + params: data, + headers: { + 'Accept': 'application/json' + } + }; + + console.log("validationTestService::runPretest::config", JSON.stringify(config)); + + // Call the pre validation service + var request = { + method: 'POST', + url: '/runtest', + // method: 'GET', + //url:'./sdnc-stubs/getTestResult.json', + data: data, + headers: { + 'Content-Type': undefined + } + }; + + // // SEND VNF FOR VALIDATION + return $http(request) + .then(function(response) { + console.log("---validationTestService::uploadFile::Response---" + JSON.stringify(response)); + return response.data; + }, + function(response) { + console.log("--validationTestService::Status Code--", response.status); + return response; + }); + + + } + +}]);
\ No newline at end of file diff --git a/SDNC-GUI-252/webapp/package.json b/SDNC-GUI-252/webapp/package.json new file mode 100644 index 0000000..ffb9715 --- /dev/null +++ b/SDNC-GUI-252/webapp/package.json @@ -0,0 +1,32 @@ +{ + "name": "myapp", + "version": "1.0.0", + "description": "list of node modules for myapp", + "main": "app.js", + "scripts": { + "test": "standard" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/NMSVishal/SDNCReports.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/NMSVishal/SDNCReports/issues" + }, + "homepage": "https://github.com/NMSVishal/SDNCReports#readme", + "dependencies": { + "angular": "^1.6.9", + "angular-growl": "^0.1.0", + "angular-mocks": "^1.6.9", + "angular-route": "^1.6.9", + "angular-sanitize": "^1.6.9", + "angular-utils-pagination": "^0.11.1", + "angularjs-datetime-picker": "^0.1.16", + "bootstrap": "^4.0.0", + "jquery": "^3.3.1", + "ng-csv": "^0.3.6", + "ng-ip-address": "^1.1.12" + } +} |