You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by bh...@apache.org on 2019/09/06 09:03:17 UTC
[incubator-dlab] 01/01: DLAB-23 fixed merge conflicts
This is an automated email from the ASF dual-hosted git repository.
bhliva pushed a commit to branch bil-2
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit f5563befd521da6ae49ecff62f39619b2658e52e
Merge: 217462d f56d671
Author: bhliva <bo...@epam.com>
AuthorDate: Fri Sep 6 12:02:14 2019 +0300
DLAB-23 fixed merge conflicts
README.md | 594 +-
RELEASE_NOTES.md | 10 +-
USER_GUIDE.md | 2 +-
infrastructure-provisioning/scripts/deploy_dlab.py | 20 +-
infrastructure-provisioning/src/base/entrypoint.py | 4 +
.../src/base/scripts/install_prerequisites.py | 4 +
.../src/base/scripts/install_user_key.py | 5 +-
.../src/dataengine/scripts/configure_dataengine.py | 8 +-
.../src/deeplearning/fabfile.py | 16 +
.../scripts/configure_deep_learning_node.py | 10 +-
infrastructure-provisioning/src/edge/fabfile.py | 145 +-
.../src/edge/templates/nginx.conf | 1 -
.../api/{install_libs.py => check_inactivity.py} | 6 +-
.../src/general/api/configure.py | 4 +-
.../src/general/api/create.py | 4 +-
.../src/general/api/create_image.py | 4 +-
.../src/general/api/git_creds.py | 4 +-
.../src/general/api/install_libs.py | 4 +-
.../src/general/api/list_libs.py | 8 +-
.../src/general/api/reconfigure_spark.py | 4 +-
.../src/general/api/recreate.py | 4 +-
.../src/general/api/reupload_key.py | 4 +-
.../src/general/api/start.py | 4 +-
.../src/general/api/stop.py | 4 +-
.../src/general/api/terminate.py | 4 +-
.../src/general/api/terminate_image.py | 4 +-
.../src/general/conf/dlab.ini | 8 +-
.../src/general/files/aws/base_Dockerfile | 3 +-
.../files/aws/dataengine-service_Dockerfile | 3 +
.../src/general/files/aws/dataengine_Dockerfile | 1 +
.../src/general/files/aws/deeplearning_Dockerfile | 3 +
.../src/general/files/aws/edge_description.json | 4 +-
.../src/general/files/aws/jupyter_Dockerfile | 3 +
.../aws/{rstudio_Dockerfile => project_Dockerfile} | 12 +-
.../src/general/files/aws/project_description.json | 4 +
.../src/general/files/aws/rstudio_Dockerfile | 3 +
.../src/general/files/aws/ssn_Dockerfile | 2 +-
.../src/general/files/aws/ssn_policy.json | 3 +-
.../general/files/aws/tensor-rstudio_Dockerfile | 3 +
.../src/general/files/aws/tensor_Dockerfile | 3 +
.../src/general/files/aws/tensor_description.json | 2 +-
.../src/general/files/aws/zeppelin_Dockerfile | 3 +
.../src/general/files/azure/base_Dockerfile | 3 +
.../src/general/files/azure/dataengine_Dockerfile | 1 +
.../general/files/azure/deeplearning_Dockerfile | 3 +
.../src/general/files/azure/jupyter_Dockerfile | 4 +
.../project_Dockerfile} | 13 +-
.../general/files/azure/project_description.json | 4 +
.../src/general/files/azure/rstudio_Dockerfile | 3 +
.../src/general/files/azure/ssn_Dockerfile | 1 +
.../src/general/files/azure/tensor_Dockerfile | 3 +
.../src/general/files/azure/zeppelin_Dockerfile | 3 +
.../src/general/files/gcp/base_Dockerfile | 2 +
.../files/gcp/dataengine-service_Dockerfile | 5 +-
.../files/gcp/dataengine-service_description.json | 5 +-
.../src/general/files/gcp/dataengine_Dockerfile | 3 +-
.../general/files/gcp/dataengine_description.json | 1 -
.../src/general/files/gcp/deeplearning_Dockerfile | 3 +
.../src/general/files/gcp/jupyter_Dockerfile | 3 +
.../src/general/files/gcp/jupyter_description.json | 1 -
.../rstudio_Dockerfile => gcp/project_Dockerfile} | 15 +-
.../src/general/files/gcp/project_description.json | 4 +
.../src/general/files/gcp/rstudio_Dockerfile | 3 +
.../src/general/files/gcp/rstudio_description.json | 1 -
.../src/general/files/gcp/ssn_Dockerfile | 1 +
.../src/general/files/gcp/ssn_policy.json | 7 +-
.../src/general/files/gcp/ssn_roles.json | 4 +-
.../files/{aws => gcp}/tensor-rstudio_Dockerfile | 8 +-
.../files/gcp/tensor-rstudio_description.json | 38 +
.../src/general/files/gcp/tensor_Dockerfile | 3 +
.../src/general/files/gcp/tensor_description.json | 6 +-
.../src/general/files/gcp/zeppelin_Dockerfile | 3 +
.../general/files/gcp/zeppelin_description.json | 1 -
.../src/general/lib/aws/actions_lib.py | 443 +-
.../src/general/lib/aws/meta_lib.py | 5 +-
.../src/general/lib/azure/actions_lib.py | 63 +-
.../src/general/lib/gcp/actions_lib.py | 163 +-
.../src/general/lib/gcp/meta_lib.py | 100 +-
.../src/general/lib/os/debian/common_lib.py | 56 +-
.../src/general/lib/os/debian/edge_lib.py | 6 +-
.../src/general/lib/os/debian/notebook_lib.py | 47 +-
.../src/general/lib/os/debian/ssn_lib.py | 4 +-
.../src/general/lib/os/fab.py | 33 +-
.../src/general/lib/os/redhat/common_lib.py | 21 +-
.../src/general/lib/os/redhat/edge_lib.py | 6 +-
.../src/general/lib/os/redhat/notebook_lib.py | 48 +-
.../src/general/lib/os/redhat/ssn_lib.py | 4 +-
.../general/scripts/aws/common_create_bucket.py | 3 +-
.../scripts/aws/common_create_notebook_image.py | 18 +-
.../scripts/aws/common_create_role_policy.py | 5 +-
.../scripts/aws/common_create_security_group.py | 2 +-
.../general/scripts/aws/common_create_subnet.py | 11 +-
.../scripts/aws/common_download_git_certfile.py | 4 +-
...common_notebook_configure_dataengine-service.py | 11 +-
.../aws/common_notebook_configure_dataengine.py | 15 +-
.../general/scripts/aws/common_prepare_notebook.py | 44 +-
.../general/scripts/aws/common_start_notebook.py | 19 +-
.../general/scripts/aws/common_stop_notebook.py | 7 +-
.../scripts/aws/common_terminate_notebook.py | 7 +-
.../scripts/aws/dataengine-service_configure.py | 28 +-
.../scripts/aws/dataengine-service_create.py | 32 +-
.../scripts/aws/dataengine-service_install_libs.py | 2 +-
.../scripts/aws/dataengine-service_list_libs.py | 2 +-
.../scripts/aws/dataengine-service_prepare.py | 40 +-
.../scripts/aws/dataengine-service_terminate.py | 7 +-
.../general/scripts/aws/dataengine_configure.py | 73 +-
.../src/general/scripts/aws/dataengine_prepare.py | 46 +-
.../src/general/scripts/aws/dataengine_start.py | 57 +-
.../src/general/scripts/aws/dataengine_stop.py | 11 +-
.../general/scripts/aws/dataengine_terminate.py | 11 +-
.../general/scripts/aws/deeplearning_configure.py | 48 +-
.../scripts/aws/edge_associate_elastic_ip.py | 9 +-
.../src/general/scripts/aws/edge_configure.py | 74 +-
.../src/general/scripts/aws/edge_prepare.py | 546 --
.../src/general/scripts/aws/edge_start.py | 7 +-
.../src/general/scripts/aws/edge_stop.py | 7 +-
.../src/general/scripts/aws/jupyter_configure.py | 62 +-
.../jupyter_dataengine-service_create_configs.py | 6 +-
.../jupyter_install_dataengine-service_kernels.py | 4 +-
.../src/general/scripts/aws/project_prepare.py | 611 ++
.../{edge_terminate.py => project_terminate.py} | 61 +-
.../src/general/scripts/aws/rstudio_configure.py | 46 +-
.../rstudio_dataengine-service_create_configs.py | 2 +-
.../rstudio_install_dataengine-service_kernels.py | 4 +-
.../scripts/aws/ssn_associate_elastic_ip.py | 7 +-
.../src/general/scripts/aws/ssn_configure.py | 72 +-
.../src/general/scripts/aws/ssn_create_vpc.py | 5 +
.../src/general/scripts/aws/ssn_prepare.py | 121 +-
.../src/general/scripts/aws/ssn_terminate.py | 3 +-
.../scripts/aws/tensor-rstudio_configure.py | 52 +-
.../src/general/scripts/aws/tensor_configure.py | 48 +-
.../src/general/scripts/aws/zeppelin_configure.py | 56 +-
.../zeppelin_dataengine-service_create_configs.py | 6 +-
.../zeppelin_install_dataengine-service_kernels.py | 6 +-
.../scripts/azure/common_create_instance.py | 4 +-
.../scripts/azure/common_create_notebook_image.py | 10 +-
.../azure/common_notebook_configure_dataengine.py | 12 +-
.../scripts/azure/common_prepare_notebook.py | 35 +-
.../general/scripts/azure/common_start_notebook.py | 16 +-
.../general/scripts/azure/common_stop_notebook.py | 2 +-
.../scripts/azure/common_terminate_notebook.py | 2 +-
.../general/scripts/azure/dataengine_configure.py | 107 +-
.../general/scripts/azure/dataengine_prepare.py | 30 +-
.../src/general/scripts/azure/dataengine_start.py | 27 +-
.../src/general/scripts/azure/dataengine_stop.py | 7 +-
.../general/scripts/azure/dataengine_terminate.py | 7 +-
.../scripts/azure/deeplearning_configure.py | 125 +-
.../src/general/scripts/azure/edge_configure.py | 91 +-
.../src/general/scripts/azure/edge_prepare.py | 37 +-
.../src/general/scripts/azure/edge_start.py | 6 +-
.../src/general/scripts/azure/edge_stop.py | 6 +-
.../src/general/scripts/azure/edge_terminate.py | 26 +-
.../src/general/scripts/azure/jupyter_configure.py | 96 +-
.../azure/{edge_prepare.py => project_prepare.py} | 384 +-
.../{edge_terminate.py => project_terminate.py} | 43 +-
.../src/general/scripts/azure/rstudio_configure.py | 97 +-
.../src/general/scripts/azure/ssn_configure.py | 3 +
.../src/general/scripts/azure/ssn_prepare.py | 4 +
.../src/general/scripts/azure/tensor_configure.py | 102 +-
.../general/scripts/azure/zeppelin_configure.py | 110 +-
.../general/scripts/gcp/common_create_instance.py | 7 +-
.../scripts/gcp/common_create_service_account.py | 6 +-
...common_notebook_configure_dataengine-service.py | 15 +-
.../gcp/common_notebook_configure_dataengine.py | 17 +-
.../general/scripts/gcp/common_prepare_notebook.py | 62 +-
.../general/scripts/gcp/common_start_notebook.py | 16 +-
.../general/scripts/gcp/common_stop_notebook.py | 28 +-
.../scripts/gcp/common_terminate_notebook.py | 21 +-
.../scripts/gcp/dataengine-service_configure.py | 86 +-
.../scripts/gcp/dataengine-service_create.py | 2 +-
.../scripts/gcp/dataengine-service_install_libs.py | 2 +-
.../scripts/gcp/dataengine-service_jars_parser.py | 14 +-
.../scripts/gcp/dataengine-service_list_libs.py | 2 +-
.../scripts/gcp/dataengine-service_prepare.py | 21 +-
.../scripts/gcp/dataengine-service_terminate.py | 7 +-
.../general/scripts/gcp/dataengine_configure.py | 88 +-
.../src/general/scripts/gcp/dataengine_prepare.py | 21 +-
.../src/general/scripts/gcp/dataengine_start.py | 29 +-
.../src/general/scripts/gcp/dataengine_stop.py | 7 +-
.../general/scripts/gcp/dataengine_terminate.py | 7 +-
.../general/scripts/gcp/deeplearning_configure.py | 105 +-
.../src/general/scripts/gcp/edge_configure.py | 65 +-
.../general/scripts/gcp/edge_create_static_ip.py | 2 +-
.../src/general/scripts/gcp/edge_prepare.py | 467 --
.../src/general/scripts/gcp/edge_start.py | 8 +-
.../src/general/scripts/gcp/edge_stop.py | 6 +-
.../src/general/scripts/gcp/edge_terminate.py | 6 +-
.../src/general/scripts/gcp/jupyter_configure.py | 105 +-
.../jupyter_install_dataengine-service_kernels.py | 9 +-
.../src/general/scripts/gcp/project_prepare.py | 475 ++
.../{edge_terminate.py => project_terminate.py} | 37 +-
.../src/general/scripts/gcp/rstudio_configure.py | 112 +-
.../rstudio_install_dataengine-service_kernels.py | 7 +-
.../src/general/scripts/gcp/ssn_configure.py | 4 +
.../src/general/scripts/gcp/ssn_prepare.py | 10 +-
.../scripts/gcp/ssn_terminate_gcp_resources.py | 14 +-
...io_configure.py => tensor-rstudio_configure.py} | 144 +-
.../src/general/scripts/gcp/tensor_configure.py | 113 +-
.../src/general/scripts/gcp/zeppelin_configure.py | 115 +-
.../zeppelin_install_dataengine-service_kernels.py | 7 +-
.../check_inactivity.py} | 40 +-
.../general/scripts/os/common_clean_instance.py | 8 +-
.../scripts/os/common_configure_reverse_proxy.py | 8 +-
.../general/scripts/os/common_configure_spark.py | 20 +-
.../general/scripts/os/dataengine_install_libs.py | 2 +-
.../src/general/scripts/os/dataengine_list_libs.py | 2 +-
.../scripts/os/dataengine_reconfigure_spark.py | 2 +-
.../os/deeplearning_install_dataengine_kernels.py | 5 +
.../os/jupyter_install_dataengine_kernels.py | 5 +
.../src/general/scripts/os/notebook_git_creds.py | 2 +-
...igure_spark.py => notebook_inactivity_check.py} | 46 +-
.../general/scripts/os/notebook_install_libs.py | 2 +-
.../src/general/scripts/os/notebook_list_libs.py | 2 +-
.../scripts/os/notebook_reconfigure_spark.py | 2 +-
.../src/general/scripts/os/reconfigure_spark.py | 3 +
.../os/rstudio_install_dataengine_kernels.py | 5 +
.../tensor-rstudio_install_dataengine_kernels.py | 5 +
.../os/tensor_install_dataengine_kernels.py | 5 +
.../update_inactivity_on_start.py} | 17 +-
.../os/zeppelin_install_dataengine_kernels.py | 5 +
.../dataengine_reconfigure_spark/template.json | 1 +
.../notebook_reconfigure_spark/template.json | 1 +
.../gcp/jenkins_jobs/create_data_engine/config.xml | 4 +-
.../create_dataengine-service/config.xml | 5 +-
.../jenkins_jobs/create_notebook_server/config.xml | 2 +-
.../jenkins_jobs/start_notebook_server/config.xml | 1 +
.../jenkins_jobs/stop_notebook_server/config.xml | 1 +
.../terminate_notebook_server/config.xml | 1 +
.../os/inactive.service} | 19 +-
.../src/general/templates/os/inactive.sh | 49 +
.../os/inactive.timer} | 21 +-
.../src/general/templates/os/inactive_rs.sh | 48 +
infrastructure-provisioning/src/jupyter/fabfile.py | 16 +
.../src/jupyter/scripts/configure_jupyter_node.py | 8 +-
infrastructure-provisioning/src/project/fabfile.py | 75 +
.../scripts/configure_http_proxy.py} | 36 +-
.../scripts/configure_nginx_reverse_proxy.py} | 42 +-
.../scripts/reupload_ssh_key.py} | 44 +-
.../templates/conf.d/proxy.conf} | 22 +-
.../templates/locations/dataengine-service.conf | 77 +
.../templates/locations/jupyter.conf} | 25 +-
.../templates/locations/rstudio.conf} | 24 +-
.../src/project/templates/locations/spark.conf | 123 +
.../templates/locations/tensor.conf} | 27 +-
.../templates/locations/ungit.conf} | 25 +-
.../templates/locations/zeppelin.conf} | 24 +-
.../src/{edge => project}/templates/nginx.conf | 9 +-
.../src/project/templates/nginx_debian | 216 +
.../src/project/templates/nginx_redhat | 128 +
.../src/project/templates/squid.conf | 62 +
infrastructure-provisioning/src/rstudio/fabfile.py | 16 +
.../src/rstudio/scripts/configure_rstudio_node.py | 10 +-
.../src/ssn/files/aws/mongo_roles.json | 4 +-
.../src/ssn/files/azure/mongo_roles.json | 4 +-
.../src/ssn/files/gcp/mongo_roles.json | 36 +-
.../src/ssn/scripts/configure_billing.py | 5 +-
.../src/ssn/scripts/configure_docker.py | 44 +
.../src/ssn/scripts/configure_ssn_node.py | 14 +-
.../src/ssn/scripts/configure_ui.py | 3 +-
.../src/ssn/templates/docker_build.py | 73 +
.../src/ssn/templates/nginx_proxy.conf | 3 +-
.../src/ssn/templates/ssn_nginx.conf | 1 +
.../src/tensor-rstudio/fabfile.py | 16 +
.../scripts/configure_tensor-rstudio_node.py | 8 +-
infrastructure-provisioning/src/tensor/fabfile.py | 38 +-
.../src/tensor/scripts/configure_tensor_node.py | 8 +-
.../src/zeppelin/fabfile.py | 16 +
.../zeppelin/scripts/configure_zeppelin_node.py | 8 +-
integration-tests-cucumber/pom.xml | 114 +
.../main/java/org/apache/dlab/dto/EndpointDTO.java | 19 +
.../java/org/apache/dlab/mongo/MongoDBHelper.java | 14 +
.../java/org/apache/dlab/util/JacksonMapper.java | 16 +
.../java/org/apache/dlab/util/PropertyHelper.java | 23 +
.../src/test/java/dlab/Constants.java | 5 +
.../src/test/java/dlab/RunCucumberTest.java | 10 +
.../src/test/java/dlab/endpoint/EndpointSteps.java | 97 +
.../src/test/java/dlab/login/LoginSteps.java | 44 +
.../src/test/resources/config.properties | 2 +
.../src/test/resources/dlab/endpoint.feature | 57 +
.../src/test/resources/dlab/login.feature | 12 +
.../deeplearning/deeplearning-notebook.json | 4 +-
.../azure_templates/jupyter/jupyter-notebook.json | 4 +-
.../azure_templates/rstudio/rstudio-notebook.json | 4 +-
.../examples/ec2_templates/deeplearning/EMR.json | 2 +-
.../ec2_templates/deeplearning/EMR_spot.json | 2 +-
.../deeplearning/deeplearning-notebook.json | 4 +-
.../examples/ec2_templates/jupyter/EMR.json | 2 +-
.../examples/ec2_templates/jupyter/EMR_spot.json | 2 +-
.../ec2_templates/jupyter/jupyter-notebook.json | 4 +-
.../examples/ec2_templates/rstudio/EMR.json | 2 +-
.../examples/ec2_templates/rstudio/EMR_spot.json | 2 +-
.../ec2_templates/rstudio/rstudio-notebook.json | 4 +-
.../examples/ec2_templates/tensor/EMR.json | 2 +-
.../examples/ec2_templates/tensor/EMR_spot.json | 2 +-
.../examples/ec2_templates/zeppelin/EMR.json | 2 +-
.../examples/ec2_templates/zeppelin/EMR_spot.json | 2 +-
.../gcp_templates/deeplearning/dataproc.json | 6 +-
.../examples/gcp_templates/jupyter/dataproc.json | 6 +-
.../examples/gcp_templates/rstudio/dataproc.json | 6 +-
.../examples/gcp_templates/tensor/dataproc.json | 6 +-
.../examples/gcp_templates/zeppelin/dataproc.json | 6 +-
.../epam/dlab/automation/test/TestServices.java | 4 +-
pom.xml | 12 +-
services/billing-aws/billing.yml | 2 +-
.../com/epam/dlab/module/aws/AdapterS3File.java | 93 +-
.../java/com/epam/dlab/module/aws/S3FileList.java | 2 +-
.../com/epam/dlab/mongo/DlabResourceTypeDAO.java | 79 +-
.../java/com/epam/dlab/mongo/MongoConstants.java | 42 +-
.../java/com/epam/dlab/mongo/ResourceItem.java | 98 +-
.../java/com/epam/dlab/mongo/ResourceItemList.java | 90 +-
.../dlab/core/parser/ParserStatisticsTest.java | 64 -
.../com/epam/dlab/module/aws/S3FileListTest.java | 18 +-
.../com/epam/dlab/mongo/ResourceItemListTest.java | 4 +-
.../azure/AzureBillableResourcesService.java | 4 +-
.../epam/dlab/auth/conf/GcpLoginConfiguration.java | 2 +-
services/dlab-auth-common/pom.xml | 56 -
.../epam/dlab/dto/InfrastructureMetaInfoDTO.java} | 24 +-
.../java/com/epam/dlab/dto/SchedulerJobDTO.java | 7 +
.../java/com/epam/dlab/dto/UserInstanceDTO.java | 26 +-
.../computational/AwsComputationalResource.java | 5 +-
.../SparkComputationalCreateAzure.java | 8 -
.../exploratory/ExploratoryActionStartAzure.java | 76 +-
.../azure/exploratory/ExploratoryCreateAzure.java | 16 -
.../com/epam/dlab/dto/base/DataEngineType.java | 54 +-
.../dto/base/computational/ComputationalBase.java | 29 +
.../java/com/epam/dlab/dto/base/edge/EdgeInfo.java | 32 +-
.../epam/dlab/dto/base/project/ProjectResult.java | 16 +
.../computational/CheckInactivityStatusDTO.java | 30 +-
...O.java => ComputationalCheckInactivityDTO.java} | 39 +-
.../ComputationalClusterConfigDTO.java | 12 +-
.../SparkStandaloneClusterResource.java | 5 +-
.../computational/UserComputationalResource.java | 5 +-
.../dlab/dto/exploratory/ExploratoryBaseDTO.java | 71 +-
.../ExploratoryCheckInactivityAction.java} | 10 +-
.../dlab/dto/exploratory/ExploratoryCreateDTO.java | 23 +
.../dlab/dto/exploratory/ExploratoryImageDTO.java | 17 +
...xploratoryReconfigureSparkClusterActionDTO.java | 19 +-
.../dlab/dto/exploratory/ExploratoryStatusDTO.java | 12 +
.../computational/GcpComputationalResource.java | 6 +-
.../ComputationalResourceShapeDto.java | 198 +-
.../epam/dlab/dto/project/ProjectActionDTO.java | 15 +
.../epam/dlab/dto/project/ProjectCreateDTO.java | 18 +
.../java/com/epam/dlab/dto/status/EnvResource.java | 5 +-
.../epam/dlab/model/exploratory/Exploratory.java | 3 +
services/dlab-process/pom.xml | 60 -
.../com/epam/dlab/process/ProcessConveyorTest.java | 225 -
.../java/com/epam/dlab/util/AnnotationUtils.java | 61 -
.../main/java/com/epam/dlab/util/ObjectUtils.java | 49 -
services/dlab-webapp-common/pom.xml | 18 +-
.../com/epam/dlab/auth/SecurityAuthorizer.java | 0
.../dlab/auth/SecurityUnauthorizedHandler.java | 0
.../src/main/java/com/epam/dlab/auth/UserInfo.java | 6 +-
.../main/java/com/epam/dlab/auth/UserInfoDAO.java | 10 +-
.../epam/dlab/auth/UserVerificationService.java | 2 +-
.../com/epam/dlab/auth/contract/SecurityAPI.java | 0
.../com/epam/dlab/auth/dto/UserCredentialDTO.java | 1 -
.../auth/oauth2/Oauth2AuthenticationService.java | 0
.../auth/rest/AbstractAuthenticationService.java | 0
.../epam/dlab/auth/rest/ConfigurableResource.java | 0
.../auth/rest/UserSessionDurationAuthorizer.java | 0
.../auth/rest/UserSessionDurationCallback.java | 0
.../com/epam/dlab/rest/client/RESTService.java | 0
.../epam/dlab/rest/client/RESTServiceFactory.java | 0
.../com/epam/dlab/rest/contracts/ApiCallbacks.java | 4 +-
.../dlab/rest/contracts/InfrasctructureAPI.java | 3 +-
.../java/com/epam/dlab/rest/contracts/KeyAPI.java | 3 +-
.../rest/mappers/ValidationExceptionMapper.java | 2 +-
services/provisioning-service/pom.xml | 10 +-
services/provisioning-service/provisioning.yml | 2 +-
.../backendapi/ProvisioningServiceApplication.java | 1 +
.../epam/dlab/backendapi/core/DockerWarmuper.java | 2 +-
.../core/commands/CommandExecutorMockAsync.java | 4 +-
.../backendapi/core/commands/DockerCommands.java | 1 +
.../backendapi/core/commands/RunDockerCommand.java | 8 +-
.../handlers/CheckInactivityCallbackHandler.java | 94 +-
.../response/handlers/ProjectCallbackHandler.java | 50 +
.../dlab/backendapi/modules/ProductionModule.java | 6 +
.../backendapi/modules/ProvisioningDevModule.java | 22 +-
.../resources/InfrastructureResource.java | 19 +-
.../dlab/backendapi/resources/ProjectResource.java | 57 +
.../backendapi/resources/base/KeyResource.java | 23 +-
.../service/CheckInactivityService.java} | 14 +-
.../dlab/backendapi/service/ProjectService.java | 16 +
.../service/impl/CheckInactivityService.java | 103 -
.../service/impl/CheckInactivityServiceImpl.java | 114 +
.../backendapi/service/impl/DockerService.java | 3 +
.../{ReuploadKeyService.java => KeyService.java} | 29 +-
.../service/impl/ProjectServiceImpl.java | 100 +
.../com/epam/dlab/process/ProcessConveyor.java | 6 +-
.../dlab/process/builder/ProcessInfoBuilder.java | 0
.../process/exception/DlabProcessException.java | 0
.../com/epam/dlab/process/model/DlabProcess.java | 0
.../com/epam/dlab/process/model/ProcessId.java | 0
.../com/epam/dlab/process/model/ProcessInfo.java | 0
.../com/epam/dlab/process/model/ProcessStatus.java | 0
.../com/epam/dlab/process/model/ProcessStep.java | 0
.../aws/dataengine-service_check_inactivity.json | 8 +
.../aws/dataengine_check_inactivity.json | 8 +
.../resources/mock_response/aws/edge_create.json | 75 +-
.../aws/notebook_check_inactivity.json | 16 +-
.../mock_response/aws/project_create.json | 57 +
.../mock_response/aws/project_terminate.json | 12 +
.../azure/dataengine-service_check_inactivity.json | 8 +
.../azure/dataengine_check_inactivity.json | 8 +
.../azure/notebook_check_inactivity.json | 22 +-
.../mock_response/azure/project_create.json | 57 +
.../mock_response/azure/project_terminate.json | 12 +
.../gcp/dataengine-service_check_inactivity.json | 8 +
.../gcp/dataengine_check_inactivity.json | 8 +
.../gcp/notebook_check_inactivity.json | 22 +-
.../mock_response/gcp/notebook_create.json | 1 +
.../mock_response/gcp/project_create.json | 57 +
.../mock_response/gcp/project_terminate.json | 12 +
.../dlab/backendapi/core/DockerWarmuperTest.java | 4 +-
services/security-aws/pom.xml | 7 +-
.../aws/service/AwsUserVerificationService.java | 16 +-
services/security-azure/pom.xml | 4 -
.../auth/azure/AzureAuthenticationResource.java | 14 +-
services/security-gcp/pom.xml | 15 +-
.../auth/gcp/service/GcpAuthenticationService.java | 2 +-
services/security-service/pom.xml | 6 +
services/security-service/security.yml | 112 +-
.../dlab/auth/SecurityServiceConfiguration.java | 39 +-
.../epam/dlab/auth/core/CacheableReference.java | 56 -
.../epam/dlab/auth/core/DlabLdapConnection.java | 2 +-
.../dlab/auth/core/DlabLdapConnectionFactory.java | 49 +
.../com/epam/dlab/auth/core/LdapFilterCache.java | 79 -
.../java/com/epam/dlab/auth/core/LoginCache.java | 83 -
.../com/epam/dlab/auth/core/LoginConveyor.java | 67 -
.../java/com/epam/dlab/auth/core/LoginStep.java | 47 -
.../com/epam/dlab/auth/core/UserInfoBuilder.java | 197 -
.../java/com/epam/dlab/auth/dao/LdapUserDAO.java | 189 +-
.../com/epam/dlab/auth/dao/LdapUserDAOImpl.java | 165 +
.../main/java/com/epam/dlab/auth/dao/Request.java | 92 +-
.../epam/dlab/auth/dao/UserInfoDAODumbImpl.java | 6 +-
.../epam/dlab/auth/dao/UserInfoDAOMongoImpl.java | 85 +-
.../dlab/auth/dao/filter/SearchResultMapper.java | 31 -
.../auth/dao/filter/SearchResultProcessor.java | 68 -
.../com/epam/dlab/auth/dao/script/DeepMap.java | 57 -
.../epam/dlab/auth/dao/script/ScriptHolder.java | 59 -
.../dao/script/SearchResultToDictionaryMapper.java | 98 -
.../auth/modules/AwsSecurityServiceModule.java | 4 +-
.../auth/modules/AzureSecurityServiceModule.java | 4 +-
.../auth/modules/GcpSecurityServiceModule.java | 8 +-
.../dlab/auth/modules/SecurityServiceModule.java | 13 +-
.../SynchronousLdapAuthenticationResource.java | 80 +
.../SynchronousLdapAuthenticationService.java | 186 -
.../dlab/auth/service/AuthenticationService.java} | 15 +-
.../service/impl/LdapAuthenticationService.java | 89 +
.../test/java/com/epam/dlab/auth/aws/AwsTest.java | 78 -
.../com/epam/dlab/auth/core/LoginConveyorTest.java | 131 -
.../dlab/auth/dao/script/ScriptHolderTest.java | 65 -
.../java/com/epam/dlab/auth/ldap/BasicTest.java | 116 -
.../java/com/epam/dlab/auth/ldap/JsonTest.java | 84 -
.../java/com/epam/dlab/auth/ldap/ScriptList.java | 76 -
.../impl/LdapAuthenticationServiceTest.java | 139 +
services/self-service/pom.xml | 30 +-
services/self-service/self-service.yml | 17 +-
.../dlab/backendapi/SelfServiceApplication.java | 68 +-
.../SelfServiceApplicationConfiguration.java | 16 +
.../epam/dlab/backendapi/annotation/Project.java | 12 +
.../auth/SelfServiceSecurityAuthorizer.java | 2 +-
.../epam/dlab/backendapi/dao/BaseBillingDAO.java | 843 +-
.../java/com/epam/dlab/backendapi/dao/BaseDAO.java | 4 +-
.../com/epam/dlab/backendapi/dao/BillingDAO.java | 5 +
.../epam/dlab/backendapi/dao/ComputationalDAO.java | 14 +-
.../com/epam/dlab/backendapi/dao/EndpointDAO.java | 15 +
.../epam/dlab/backendapi/dao/EndpointDAOImpl.java | 38 +
.../java/com/epam/dlab/backendapi/dao/EnvDAO.java | 68 +-
.../epam/dlab/backendapi/dao/ExploratoryDAO.java | 63 +-
.../backendapi/dao/ImageExploratoryDaoImpl.java | 2 +-
.../com/epam/dlab/backendapi/dao/ProjectDAO.java | 36 +
.../epam/dlab/backendapi/dao/ProjectDAOImpl.java | 110 +
.../epam/dlab/backendapi/dao/SchedulerJobDAO.java | 66 +-
.../com/epam/dlab/backendapi/dao/UserGroupDao.java | 2 +
.../epam/dlab/backendapi/dao/UserGroupDaoImpl.java | 9 +
.../dlab/backendapi/dao/aws/AwsBillingDAO.java | 9 +
.../epam/dlab/backendapi/domain/EndpointDTO.java | 16 +
.../epam/dlab/backendapi/domain/ProjectDTO.java | 83 +
.../backendapi/domain/UpdateProjectBudgetDTO.java | 15 +
.../dlab/backendapi/domain/UpdateProjectDTO.java | 19 +
.../interceptor/BudgetLimitInterceptor.java | 17 +-
.../epam/dlab/backendapi/modules/DevModule.java | 36 +-
.../dlab/backendapi/modules/ProductionModule.java | 6 +
.../backendapi/resources/EndpointResource.java | 108 +
.../backendapi/resources/ExploratoryResource.java | 12 +-
.../resources/InfrastructureInfoResource.java | 16 +-
.../resources/InfrastructureTemplateResource.java | 19 +-
.../dlab/backendapi/resources/ProjectResource.java | 217 +
.../resources/aws/ComputationalResourceAws.java | 38 +-
.../azure/ComputationalResourceAzure.java | 14 +-
.../callback/CheckInactivityCallback.java | 40 +-
.../resources/callback/ComputationalCallback.java | 45 +-
.../resources/callback/ExploratoryCallback.java | 3 +-
.../resources/callback/ProjectCallback.java | 57 +
.../callback/base/KeyUploaderCallback.java | 5 +-
.../backendapi/resources/dto/BillingFilter.java | 19 +
.../resources/dto/ComputationalCreateFormDTO.java | 6 +
.../resources/dto/ExploratoryCreateFormDTO.java | 30 +
.../resources/dto/HealthStatusPageDTO.java | 11 +
.../resources/dto/ProjectActionFormDTO.java | 10 +
...ureInfo.java => ProjectInfrastructureInfo.java} | 14 +-
.../backendapi/resources/dto/UserResourceInfo.java | 15 +
.../resources/gcp/ComputationalResourceGcp.java | 18 +-
.../com/epam/dlab/backendapi/roles/UserGroup.java | 31 -
.../com/epam/dlab/backendapi/roles/UserRoles.java | 33 +-
.../schedulers/CheckInactivityScheduledJob.java | 12 +-
...nalJob.java => CheckProjectQuoteScheduler.java} | 30 +-
.../computational/StopComputationalJob.java | 2 -
...onalJob.java => TerminateComputationalJob.java} | 19 +-
.../backendapi/service/ComputationalService.java | 6 +-
.../epam/dlab/backendapi/service/EdgeService.java | 2 +
.../dlab/backendapi/service/EndpointService.java | 14 +
.../backendapi/service/EnvironmentService.java | 2 +
.../backendapi/service/ExploratoryService.java | 5 +-
.../dlab/backendapi/service/GuacamoleService.java | 10 +
.../dlab/backendapi/service/InactivityService.java | 14 +-
.../service/InfrastructureInfoService.java | 12 +-
.../service/InfrastructureTemplateService.java | 4 +-
.../dlab/backendapi/service/ProjectService.java | 33 +
.../backendapi/service/SchedulerJobService.java | 5 -
.../epam/dlab/backendapi/service/TagService.java | 9 +
.../dlab/backendapi/service/TagServiceImpl.java | 23 +
.../service/impl/ComputationalServiceImpl.java | 38 +-
.../backendapi/service/impl/EdgeServiceImpl.java | 8 +
.../service/impl/EndpointServiceImpl.java | 44 +
.../service/impl/EnvironmentServiceImpl.java | 65 +-
.../service/impl/ExploratoryServiceImpl.java | 28 +-
.../service/impl/GuacamoleServiceImpl.java | 61 +
.../service/impl/InactivityServiceImpl.java | 94 +-
.../impl/InfrastructureInfoServiceBase.java | 44 +-
.../impl/InfrastructureTemplateServiceBase.java | 35 +-
.../service/impl/MavenCentralLibraryService.java | 6 +-
.../service/impl/ProjectServiceImpl.java | 168 +
.../service/impl/SchedulerJobServiceImpl.java | 127 +-
.../servlet/guacamole/GuacamoleSecurityFilter.java | 56 +
.../servlet/guacamole/GuacamoleServlet.java | 32 +
.../epam/dlab/backendapi/util/RequestBuilder.java | 125 +-
.../validation/SchedulerJobDTOValidator.java | 2 +-
.../annotation/SchedulerJobDTOValid.java | 2 +-
.../src/main/resources/webapp/angular.json | 39 +-
.../src/main/resources/webapp/package-lock.json | 8350 ++++++++------------
.../src/main/resources/webapp/package.json | 31 +-
.../app/access-denied/access-denied.component.scss | 5 -
.../administration.module.ts} | 15 +-
.../backup-dilog/backup-dilog.component.html | 17 +-
.../backup-dilog/backup-dilog.component.scss | 0
.../backup-dilog/backup-dilog.component.ts | 55 +-
.../management/endpoints/endpoints.component.html | 139 +
.../management/endpoints/endpoints.component.scss | 71 +
.../management/endpoints/endpoints.component.ts | 92 +
.../app/{ => administration}/management/index.ts | 56 +-
.../manage-environment-dilog.component.html | 95 +
.../manage-environment-dilog.component.scss | 24 +-
.../manage-environment-dilog.component.ts | 66 +-
.../management/management-data.service.ts} | 25 +-
.../management-grid/management-grid.component.html | 130 +
.../management-grid/management-grid.component.scss | 16 +
.../management-grid/management-grid.component.ts | 104 +-
.../management/management.component.html | 51 +-
.../management/management.component.scss | 0
.../management/management.component.ts | 174 +
.../management/management.model.ts | 27 +-
.../ssn-monitor/ssn-monitor.component.html | 53 +-
.../ssn-monitor/ssn-monitor.component.scss | 1 +
.../ssn-monitor/ssn-monitor.component.ts | 33 +-
.../scheduler => administration/project}/index.ts | 25 +-
.../project/project-data.service.ts} | 26 +-
.../project-form/project-form.component.html | 170 +
.../project-form/project-form.component.scss} | 79 +-
.../project/project-form/project-form.component.ts | 185 +
.../project-list/project-list.component.html | 83 +
.../project-list/project-list.component.scss} | 50 +-
.../project/project-list/project-list.component.ts | 72 +
.../project/project.component.html} | 35 +-
.../administration/project/project.component.ts | 145 +
.../roles}/group-name-validarion.directive.ts | 0
.../scheduler => administration/roles}/index.ts | 20 +-
.../app/administration/roles/roles.component.html | 173 +
.../roles/roles.component.scss} | 109 +-
.../app/administration/roles/roles.component.ts | 244 +
.../resources/webapp/src/app/app.component.html | 1 -
.../main/resources/webapp/src/app/app.module.ts | 27 +-
.../resources/webapp/src/app/app.routing.module.ts | 95 +-
.../resources/webapp/src/app/core/core.module.ts | 15 +-
.../models/computationalResourceImage.model.ts | 6 +-
.../{cloudProvider.guard.ts => admin.quard.ts} | 4 +-
.../core/services/applicationSecurity.service.ts | 10 +-
.../services/applicationServiceFacade.service.ts | 184 +-
.../src/app/core/services/authorization.guard.ts | 15 +-
.../src/app/core/services/checkParams.guard.ts | 21 +-
.../src/app/core/services/cloudProvider.guard.ts | 2 +-
.../services/dataengineConfiguration.service.ts | 2 +-
.../{scheduler.service.ts => endpoint.service.ts} | 33 +-
.../src/app/core/services/healthStatus.service.ts | 74 +-
.../webapp/src/app/core/services/index.ts | 3 +
...Configuration.service.ts => project.service.ts} | 53 +-
.../src/app/core/services/scheduler.service.ts | 3 +-
.../src/app/core/services/userAccessKey.service.ts | 6 +
.../src/app/core/services/userResource.service.ts | 14 +-
.../webapp/src/app/core/util/checkUtils.ts | 17 +
.../resources/webapp/src/app/core/util/index.ts | 3 +-
.../webapp/src/app/core/util/patterns.ts} | 21 +-
.../app/core/util/{sortUtil.ts => sortUtils.ts} | 2 +-
.../webapp/src/app/layout/layout.component.html} | 24 +-
.../webapp/src/app/layout/layout.component.ts} | 16 +-
.../index.ts => layout/layout.module.ts} | 15 +-
.../webapp/src/app/login/login.component.css | 1 +
.../webapp/src/app/login/login.component.ts | 10 +-
.../manage-environment-dilog.component.html | 73 -
.../manage-roles-groups.component.html | 155 -
.../manage-roles-groups.component.ts | 190 -
.../management-grid/management-grid.component.html | 158 -
.../src/app/management/management.component.ts | 270 -
.../reporting-grid/reporting-grid.component.html | 188 +-
.../reporting-grid/reporting-grid.component.scss | 62 +-
.../reporting-grid/reporting-grid.component.ts | 36 +-
.../src/app/reporting/reporting.component.ts | 56 +-
.../webapp/src/app/reporting/reporting.module.ts | 6 -
.../app/reporting/toolbar/toolbar.component.css | 1 -
.../app/reporting/toolbar/toolbar.component.html | 3 +-
.../cluster-details/cluster-details.component.html | 122 +-
.../cluster-details/cluster-details.component.scss | 10 +
.../cluster-details/cluster-details.component.ts | 35 +-
.../computational/cluster-details/index.ts | 4 +-
...utational-resource-create-dialog.component.html | 253 +-
...utational-resource-create-dialog.component.scss | 23 +-
...mputational-resource-create-dialog.component.ts | 293 +-
.../computational-resource-create.model.ts | 208 +-
.../computational-resource-create-dialog/index.ts | 8 +-
.../computational-resources-list.component.html | 72 +-
.../computational-resources-list.component.scss | 18 +-
.../computational-resources-list.component.ts | 55 +-
.../computational-resources-list/index.ts | 2 -
.../ami-create-dialog.component.html | 17 +-
.../ami-create-dialog.component.ts | 28 +-
.../exploratory/ami-create-dialog/index.ts | 3 +-
.../cost-details-dialog.component.html | 12 +-
.../cost-details-dialog.component.scss | 0
.../cost-details-dialog.component.ts | 26 +-
.../cost-details-dialog/index.ts | 4 +-
.../create-environment.component.html | 180 +
.../create-environment.component.scss | 20 +
.../create-environment.component.ts | 142 +
.../index.ts | 18 +-
.../detail-dialog/detail-dialog.component.html | 84 +-
.../detail-dialog/detail-dialog.component.ts | 39 +-
.../resources/exploratory/detail-dialog/index.ts | 4 +-
...ratory-environment-create-dialog.component.html | 93 -
...loratory-environment-create-dialog.component.ts | 195 -
.../exploratory-environment-create.model.ts | 157 -
.../exploratory/install-libraries/index.ts | 6 +-
.../install-libraries.component.html | 20 +-
.../install-libraries.component.scss | 89 +-
.../install-libraries.component.ts | 140 +-
.../manage-ungit/manage-ungit.component.html | 56 +-
.../manage-ungit/manage-ungit.component.scss | 28 +-
.../manage-ungit/manage-ungit.component.ts | 48 +-
.../resources-grid/create-resource.model.ts | 25 -
.../src/app/resources/resources-grid/index.ts | 8 +-
.../resources-grid/resources-grid.component.html | 551 +-
...component.css => resources-grid.component.scss} | 171 +-
.../resources-grid/resources-grid.component.ts | 300 +-
.../resources-grid/resources-grid.model.ts | 56 +-
.../src/app/resources/resources.component.html | 57 +-
.../src/app/resources/resources.component.scss | 8 -
.../src/app/resources/resources.component.ts | 58 +-
.../webapp/src/app/resources/resources.module.ts | 14 +-
.../webapp/src/app/resources/scheduler/index.ts | 4 +-
.../scheduler/scheduler.calculations.ts} | 28 +-
.../resources/scheduler/scheduler.component.html | 234 +-
.../resources/scheduler/scheduler.component.scss | 122 +-
.../app/resources/scheduler/scheduler.component.ts | 283 +-
.../src/app/resources/scheduler/scheduler.model.ts | 25 +-
.../webapp/src/app/shared/bubble/bubble.service.ts | 2 +-
.../shared/form-controls/dropdowns.component.scss | 43 +-
.../main/resources/webapp/src/app/shared/index.ts | 1 -
.../confirmation-dialog.component.html | 26 +-
.../confirmation-dialog.component.ts | 52 +-
.../confirmation-dialog.model.ts | 10 +-
.../modal-dialog/confirmation-dialog/index.ts | 4 +-
.../webapp/src/app/shared/modal-dialog/index.ts | 61 -
.../shared/modal-dialog/key-upload-dialog/index.ts | 4 +-
.../key-upload-dialog.component.html | 13 +-
.../key-upload-dialog.component.ts | 40 +-
.../app/shared/modal-dialog/modal.component.html | 41 -
.../app/shared/modal-dialog/modal.component.scss | 416 -
.../src/app/shared/modal-dialog/modal.component.ts | 111 -
.../modal-dialog/notification-dialog/index.ts | 3 +-
.../notification-dialog.component.ts | 63 +-
.../shared/modal-dialog/progress-dialog/index.ts | 5 +-
.../progress-dialog/progress-dialog.component.html | 13 +-
.../progress-dialog/progress-dialog.component.ts | 18 +-
.../webapp/src/app/shared/navbar/index.ts | 6 +-
.../src/app/shared/navbar/navbar.component.html | 86 +-
.../src/app/shared/navbar/navbar.component.scss | 100 +-
.../src/app/shared/navbar/navbar.component.ts | 125 +-
.../shared/time-picker/time-picker.component.scss | 53 +-
.../ami-create-dialog => webterminal}/index.ts | 18 +-
.../webterminal.component.html} | 5 +-
.../webterminal.component.scss} | 19 +-
.../src/app/webterminal/webterminal.component.ts | 75 +
.../webapp/src/assets/styles/_dialogs.scss | 295 +
.../webapp/src/assets/styles/_general.scss | 34 +-
.../resources/webapp/src/assets/styles/_reset.scss | 32 +-
.../resources/webapp/src/assets/styles/_theme.scss | 393 +-
.../webapp/src/assets/styles/_variables.scss} | 11 +-
.../webapp/src/dictionary/aws.dictionary.ts | 4 +-
.../webapp/src/dictionary/azure.dictionary.ts | 4 +-
.../webapp/src/dictionary/gcp.dictionary.ts | 176 +-
.../src/main/resources/webapp/src/styles.scss | 96 +-
.../main/resources/webapp/src/tsconfig.spec.json | 20 +
.../src/main/resources/webapp/tslint.json | 1 -
.../resources/ExploratoryResourceTest.java | 23 +-
.../resources/InfrastructureInfoResourceTest.java | 69 +-
.../InfrastructureTemplateResourceTest.java | 36 +-
.../epam/dlab/backendapi/roles/UserRolesTest.java | 16 +-
.../service/impl/ComputationalServiceImplTest.java | 67 +-
.../service/impl/EnvironmentServiceImplTest.java | 116 +-
.../service/impl/ExploratoryServiceImplTest.java | 28 +-
.../service/impl/InactivityServiceImplTest.java | 187 -
.../impl/InfrastructureInfoServiceBaseTest.java | 150 -
.../InfrastructureTemplateServiceBaseTest.java | 27 +-
.../impl/MavenCentralLibraryServiceTest.java | 3 +-
.../service/impl/ReuploadKeyServiceImplTest.java | 10 +-
.../service/impl/SchedulerJobServiceImplTest.java | 111 +-
.../dlab/backendapi/util/RequestBuilderTest.java | 16 +-
727 files changed, 22131 insertions(+), 17936 deletions(-)
diff --cc pom.xml
index d28fce0,378593f..c7adf07
--- a/pom.xml
+++ b/pom.xml
@@@ -59,12 -47,15 +59,9 @@@
<modules>
<module>services/common</module>
- <module>services/billing-aws</module>
<module>services/provisioning-service</module>
<module>services/self-service</module>
- <module>services/billing-azure</module>
- <module>services/billing-gcp</module>
- <module>services/security-azure</module>
- <module>services/security-gcp</module>
- <module>services/security-aws</module>
<module>services/security-service</module>
- <module>services/dlab-process</module>
- <module>services/dlab-auth-common</module>
- <module>services/dlab-rest-client</module>
<module>services/dlab-model</module>
<module>services/dlab-utils</module>
<module>services/dlab-webapp-common</module>
diff --cc services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
index f495f4f,944aad8..2eeb966
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
@@@ -62,412 -52,261 +62,439 @@@ import static java.util.Collections.sin
@Slf4j
public abstract class BaseBillingDAO<T extends BillingFilter> extends BaseDAO implements BillingDAO<T> {
- public static final String SHAPE = "shape";
- public static final String SERVICE_BASE_NAME = "service_base_name";
- public static final String ITEMS = "lines";
- public static final String COST_TOTAL = "cost_total";
- public static final String FULL_REPORT = "full_report";
-
- private static final String MASTER_NODE_SHAPE = "master_node_shape";
- private static final String SLAVE_NODE_SHAPE = "slave_node_shape";
- private static final String TOTAL_INSTANCE_NUMBER = "total_instance_number";
-
- private static final String DATAENGINE_SHAPE = "dataengine_instance_shape";
- private static final String DATAENGINE_INSTANCE_COUNT = "dataengine_instance_count";
-
- private static final String DATAENGINE_DOCKER_IMAGE = "image";
- private static final int ONE_HUNDRED = 100;
- private static final String TOTAL_FIELD_NAME = "total";
- private static final String COST_FIELD = "$cost";
- public static final String SHARED_RESOURCE_NAME = "Shared resource";
-
- @Inject
- protected SettingsDAO settings;
- @Inject
- private UserSettingsDAO userSettingsDAO;
-
- @Override
- public Document getReport(UserInfo userInfo, T filter) {
- boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, "/api/infrastructure_provision/billing");
- setUserFilter(userInfo, filter, isFullReport);
- List<Bson> matchCriteria = matchCriteria(filter);
- List<Bson> pipeline = new ArrayList<>();
- if (!matchCriteria.isEmpty()) {
- pipeline.add(Aggregates.match(Filters.and(matchCriteria)));
- }
- pipeline.add(groupCriteria());
- pipeline.add(sortCriteria());
- final Map<String, ShapeInfo> shapes = getShapes(filter.getShapes());
- return prepareReport(filter.getStatuses(), !filter.getShapes().isEmpty(), getCollection(BILLING).aggregate(pipeline), shapes, isFullReport); //TODO add shapes
- }
-
- private Document prepareReport(List<UserInstanceStatus> statuses, boolean filterByShape,
- AggregateIterable<Document> agg,
- Map<String, ShapeInfo> shapes, boolean fullReport) {
-
- List<Document> reportItems = new ArrayList<>();
-
- String usageDateStart = null;
- String usageDateEnd = null;
- double costTotal = 0D;
-
- for (Document d : agg) {
- Document id = (Document) d.get(MongoKeyWords.MONGO_ID);
- String resourceId = id.getString(dlabIdFieldName());
- ShapeInfo shape = shapes.get(resourceId);
- final UserInstanceStatus status = Optional.ofNullable(shape).map(ShapeInfo::getStatus).orElse(null);
- if ((filterByShape && shape == null) ||
- (!statuses.isEmpty() && statuses.stream().noneMatch(s -> s.equals(status)))) {
- continue;
- }
-
-
- String dateStart = d.getString(MongoKeyWords.USAGE_FROM);
- if (StringUtils.compare(usageDateStart, dateStart, false) > 0) {
- usageDateStart = dateStart;
- }
- String dateEnd = d.getString(MongoKeyWords.USAGE_TO);
- if (StringUtils.compare(usageDateEnd, dateEnd) < 0) {
- usageDateEnd = dateEnd;
- }
-
-
- costTotal += d.getDouble(MongoKeyWords.COST);
-
- final String statusString = Optional
- .ofNullable(status)
- .map(UserInstanceStatus::toString)
- .orElse(StringUtils.EMPTY);
- Document item = new Document()
- .append(MongoKeyWords.DLAB_USER, getUserOrDefault(id.getString(USER)))
- .append(dlabIdFieldName(), resourceId)
- .append(shapeFieldName(), generateShapeName(shape))
- .append("dlab_resource_type", DlabResourceType.getResourceTypeName(id.getString("dlab_resource_type"))) //todo check on azure!!!
- .append(STATUS, statusString)
- .append(FIELD_RESOURCE_TYPE, resourceType(id))
- .append(productFieldName(), id.getString(productFieldName()))
- .append(MongoKeyWords.COST, d.getDouble(MongoKeyWords.COST))
- .append(costFieldName(), BillingCalculationUtils.formatDouble(d.getDouble(MongoKeyWords
- .COST)))
- .append(currencyCodeFieldName(), id.getString(currencyCodeFieldName()))
- .append(usageDateFromFieldName(), dateStart)
- .append(usageDateToFieldName(), dateEnd);
-
-
- reportItems.add(item);
- }
-
- return new Document()
- .append(SERVICE_BASE_NAME, settings.getServiceBaseName())
- .append(usageDateFromFieldName(), usageDateStart)
- .append(usageDateToFieldName(), usageDateEnd)
- .append(ITEMS, reportItems)
- .append(COST_TOTAL, BillingCalculationUtils.formatDouble(BillingCalculationUtils.round
- (costTotal, 2)))
- .append(currencyCodeFieldName(), (reportItems.isEmpty() ? null :
- reportItems.get(0).getString(currencyCodeFieldName())))
- .append(FULL_REPORT, fullReport);
-
- }
-
- protected String resourceType(Document id) {
- return id.getString(FIELD_RESOURCE_TYPE);
- }
-
- protected String currencyCodeFieldName() {
- return "currency_code";
- }
-
- protected String usageDateToFieldName() {
- return MongoKeyWords.USAGE_TO;
- }
-
- protected String costFieldName() {
- return MongoKeyWords.COST;
- }
-
- protected String productFieldName() {
- return ReportLine.FIELD_PRODUCT;
- }
-
- protected String usageDateFromFieldName() {
- return MongoKeyWords.USAGE_FROM;
- }
-
- protected String dlabIdFieldName() {
- return ReportLine.FIELD_DLAB_ID;
- }
-
- protected String shapeFieldName() {
- return SHAPE;
- }
-
- protected abstract Bson sortCriteria();
-
- protected abstract Bson groupCriteria();
-
- protected Map<String, ShapeInfo> getShapes(List<String> shapeNames) {
- FindIterable<Document> userInstances = getUserInstances();
- final Map<String, ShapeInfo> shapes = new HashMap<>();
-
- for (Document d : userInstances) {
- getExploratoryShape(shapeNames, d)
- .ifPresent(shapeInfo -> shapes.put(d.getString(EXPLORATORY_ID), shapeInfo));
- @SuppressWarnings("unchecked")
- List<Document> comp = (List<Document>) d.get(COMPUTATIONAL_RESOURCES);
- comp.forEach(computational ->
- getComputationalShape(shapeNames, computational)
- .ifPresent(shapeInfo -> shapes.put(computational.getString(COMPUTATIONAL_ID), shapeInfo)));
- }
-
- appendSsnAndEdgeNodeType(shapeNames, shapes);
-
- log.trace("Loaded shapes is {}", shapes);
- return shapes;
- }
-
- @Override
- public Double getTotalCost() {
- return aggregateBillingData(singletonList(group(null, sum(TOTAL_FIELD_NAME, COST_FIELD))));
- }
-
- @Override
- public Double getUserCost(String user) {
- final List<Bson> pipeline = Arrays.asList(match(eq(USER, user)),
- group(null, sum(TOTAL_FIELD_NAME, COST_FIELD)));
- return aggregateBillingData(pipeline);
- }
-
- @Override
- public int getBillingQuoteUsed() {
- return toPercentage(() -> settings.getMaxBudget(), getTotalCost());
- }
-
- @Override
- public int getBillingUserQuoteUsed(String user) {
- return toPercentage(() -> userSettingsDAO.getAllowedBudget(user), getUserCost(user));
- }
-
- @Override
- public boolean isBillingQuoteReached() {
- return getBillingQuoteUsed() >= ONE_HUNDRED;
- }
-
- @Override
- public boolean isUserQuoteReached(String user) {
- final Double userCost = getUserCost(user);
- return userSettingsDAO.getAllowedBudget(user)
- .filter(allowedBudget -> userCost.intValue() != 0 && allowedBudget <= userCost)
- .isPresent();
- }
-
- protected String getUserOrDefault(String user) {
- return StringUtils.isNotBlank(user) ? user : SHARED_RESOURCE_NAME;
- }
-
- private Integer toPercentage(Supplier<Optional<Integer>> allowedBudget, Double totalCost) {
- return allowedBudget.get()
- .map(userBudget -> (totalCost * ONE_HUNDRED) / userBudget)
- .map(Double::intValue)
- .orElse(BigDecimal.ZERO.intValue());
- }
-
- private List<Bson> matchCriteria(BillingFilter filter) {
-
- List<Bson> searchCriteria = new ArrayList<>();
-
- if (filter.getUser() != null && !filter.getUser().isEmpty()) {
- searchCriteria.add(Filters.in(MongoKeyWords.DLAB_USER, filter.getUser()));
- }
-
- if (filter.getResourceType() != null && !filter.getResourceType().isEmpty()) {
- searchCriteria.add(Filters.in("dlab_resource_type",
- DlabResourceType.getResourceTypeIds(filter.getResourceType())));
- }
-
- if (filter.getDlabId() != null && !filter.getDlabId().isEmpty()) {
- searchCriteria.add(regex(dlabIdFieldName(), filter.getDlabId(), "i"));
- }
-
- if (filter.getDateStart() != null && !filter.getDateStart().isEmpty()) {
- searchCriteria.add(gte(FIELD_USAGE_DATE, filter.getDateStart()));
- }
- if (filter.getDateEnd() != null && !filter.getDateEnd().isEmpty()) {
- searchCriteria.add(lte(FIELD_USAGE_DATE, filter.getDateEnd()));
- }
-
- searchCriteria.addAll(cloudMatchCriteria((T) filter));
- return searchCriteria;
- }
-
- protected abstract List<Bson> cloudMatchCriteria(T filter);
-
-
- private Optional<ShapeInfo> getComputationalShape(List<String> shapeNames, Document c) {
- return isDataEngine(c.getString(DATAENGINE_DOCKER_IMAGE)) ? getDataEngineShape(shapeNames, c) :
- getDataEngineServiceShape(shapeNames, c);
- }
-
- private Double aggregateBillingData(List<Bson> pipeline) {
- return Optional.ofNullable(aggregate(BILLING, pipeline).first())
- .map(d -> d.getDouble(TOTAL_FIELD_NAME))
- .orElse(BigDecimal.ZERO.doubleValue());
- }
-
- private FindIterable<Document> getUserInstances() {
- return getCollection(USER_INSTANCES)
- .find()
- .projection(
- fields(excludeId(),
- include(SHAPE, EXPLORATORY_ID, STATUS,
- COMPUTATIONAL_RESOURCES + "." + COMPUTATIONAL_ID,
- COMPUTATIONAL_RESOURCES + "." + MASTER_NODE_SHAPE,
- COMPUTATIONAL_RESOURCES + "." + SLAVE_NODE_SHAPE,
- COMPUTATIONAL_RESOURCES + "." + TOTAL_INSTANCE_NUMBER,
- COMPUTATIONAL_RESOURCES + "." + DATAENGINE_SHAPE,
- COMPUTATIONAL_RESOURCES + "." + DATAENGINE_INSTANCE_COUNT,
- COMPUTATIONAL_RESOURCES + "." + DATAENGINE_DOCKER_IMAGE,
- COMPUTATIONAL_RESOURCES + "." + STATUS
- )));
- }
-
- private Optional<ShapeInfo> getExploratoryShape(List<String> shapeNames, Document d) {
- final String shape = d.getString(SHAPE);
- if (isShapeAcceptable(shapeNames, shape)) {
- return Optional.of(new ShapeInfo(shape, UserInstanceStatus.of(d.getString(STATUS))));
- }
- return Optional.empty();
- }
-
- private boolean isDataEngine(String dockerImage) {
- return DataEngineType.fromDockerImageName(dockerImage) == DataEngineType.SPARK_STANDALONE;
- }
-
- private Optional<ShapeInfo> getDataEngineServiceShape(List<String> shapeNames,
- Document c) {
- final String desMasterShape = c.getString(MASTER_NODE_SHAPE);
- final String desSlaveShape = c.getString(SLAVE_NODE_SHAPE);
- if (isShapeAcceptable(shapeNames, desMasterShape, desSlaveShape)) {
- return Optional.of(new ShapeInfo(desMasterShape, desSlaveShape, c.getString(TOTAL_INSTANCE_NUMBER),
- UserInstanceStatus.of(c.getString(STATUS))));
- }
- return Optional.empty();
- }
-
- private Optional<ShapeInfo> getDataEngineShape(List<String> shapeNames, Document c) {
- final String dataEngineShape = c.getString(DATAENGINE_SHAPE);
- if ((isShapeAcceptable(shapeNames, dataEngineShape))
- && StringUtils.isNotEmpty(c.getString(COMPUTATIONAL_ID))) {
-
- return Optional.of(new ShapeInfo(dataEngineShape, c.getString(DATAENGINE_INSTANCE_COUNT),
- UserInstanceStatus.of(c.getString(STATUS))));
- }
- return Optional.empty();
- }
-
- private boolean isShapeAcceptable(List<String> shapeNames, String... shapes) {
- return shapeNames == null || shapeNames.isEmpty() || Arrays.stream(shapes).anyMatch(shapeNames::contains);
- }
-
- protected void appendSsnAndEdgeNodeType(List<String> shapeNames, Map<String, ShapeInfo> shapes) {
- final String ssnShape = getSsnShape();
- if (shapeNames == null || shapeNames.isEmpty() || shapeNames.contains(ssnShape)) {
- String serviceBaseName = getServiceBaseName();
- shapes.put(serviceBaseName + "-ssn", new ShapeInfo(ssnShape, UserInstanceStatus.RUNNING));
- FindIterable<Document> docs = getCollection(USER_EDGE)
- .find()
- .projection(fields(include(ID, EDGE_STATUS)));
- for (Document d : docs) {
- shapes.put(edgeId(d),
- new ShapeInfo(getEdgeSize(), UserInstanceStatus.of(d.getString(EDGE_STATUS))));
- }
- }
- }
-
- protected String getServiceBaseName() {
- return settings.getServiceBaseName();
- }
-
- protected abstract String getEdgeSize();
-
- protected abstract String edgeId(Document d);
-
- protected abstract String getSsnShape();
-
-
- protected String generateShapeName(ShapeInfo shape) {
- return Optional.ofNullable(shape).map(ShapeInfo::getName).orElse(StringUtils.EMPTY);
- }
-
- protected void usersToLowerCase(List<String> users) {
- if (users != null) {
- users.replaceAll(u -> u != null ? u.toLowerCase() : null);
- }
- }
-
- protected void setUserFilter(UserInfo userInfo, BillingFilter filter, boolean isFullReport) {
- if (isFullReport) {
- usersToLowerCase(filter.getUser());
- } else {
- filter.setUser(Lists.newArrayList(userInfo.getName().toLowerCase()));
- }
- }
-
- /**
- * Store shape info
- */
- @Getter
- @ToString
- protected class ShapeInfo {
- private static final String DES_NAME_FORMAT = "Master: %s%sSlave: %d x %s";
- private static final String DE_NAME_FORMAT = "%d x %s";
- private final boolean isDataEngine;
- private final String shape;
- private final String slaveShape;
- private final String slaveCount;
- private final boolean isExploratory;
- private final UserInstanceStatus status;
-
- private ShapeInfo(boolean isDataEngine, String shape, String slaveShape, String slaveCount, boolean
- isExploratory, UserInstanceStatus status) {
- this.isDataEngine = isDataEngine;
- this.shape = shape;
- this.slaveShape = slaveShape;
- this.slaveCount = slaveCount;
- this.isExploratory = isExploratory;
- this.status = status;
- }
-
- public ShapeInfo(String shape, UserInstanceStatus status) {
- this(false, shape, null, null, true, status);
- }
-
- ShapeInfo(String shape, String slaveShape, String slaveCount, UserInstanceStatus status) {
- this(false, shape, slaveShape, slaveCount, false, status);
- }
-
-
- ShapeInfo(String shape, String slaveCount, UserInstanceStatus status) {
- this(true, shape, null, slaveCount, false, status);
- }
-
- public String getName() {
- if (isExploratory) {
- return shape;
- } else {
- return clusterName();
- }
- }
-
- private String clusterName() {
- try {
- final Integer count = Integer.valueOf(slaveCount);
- return isDataEngine ? String.format(DE_NAME_FORMAT, count, shape) :
- String.format(DES_NAME_FORMAT, shape, System.lineSeparator(), count - 1, slaveShape);
- } catch (NumberFormatException e) {
- log.error("Cannot parse string {} to integer", slaveCount);
- return StringUtils.EMPTY;
- }
- }
- }
+ public static final String SHAPE = "shape";
+ public static final String SERVICE_BASE_NAME = "service_base_name";
+ public static final String ITEMS = "lines";
+ public static final String COST_TOTAL = "cost_total";
+ public static final String FULL_REPORT = "full_report";
+
+ private static final String PROJECT = "project";
+ private static final String MASTER_NODE_SHAPE = "master_node_shape";
+ private static final String SLAVE_NODE_SHAPE = "slave_node_shape";
+ private static final String TOTAL_INSTANCE_NUMBER = "total_instance_number";
+
+ private static final String DATAENGINE_SHAPE = "dataengine_instance_shape";
+ private static final String DATAENGINE_INSTANCE_COUNT = "dataengine_instance_count";
+
+ private static final String DATAENGINE_DOCKER_IMAGE = "image";
+ private static final int ONE_HUNDRED = 100;
+ private static final String TOTAL_FIELD_NAME = "total";
+ private static final String COST_FIELD = "$cost";
+ public static final String SHARED_RESOURCE_NAME = "Shared resource";
+
+ @Inject
+ protected SettingsDAO settings;
+ @Inject
+ private UserSettingsDAO userSettingsDAO;
+ @Inject
+ private ProjectDAO projectDAO;
+
++ @Override
++ public Document getReport(UserInfo userInfo, T filter) {
++ boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, "/api/infrastructure_provision/billing",
++ userInfo.getRoles());
++ setUserFilter(userInfo, filter, isFullReport);
++ List<Bson> matchCriteria = matchCriteria(filter);
++ List<Bson> pipeline = new ArrayList<>();
++ if (!matchCriteria.isEmpty()) {
++ pipeline.add(Aggregates.match(Filters.and(matchCriteria)));
++ }
++ pipeline.add(groupCriteria());
++ pipeline.add(sortCriteria());
++ final Map<String, ShapeInfo> shapes = getShapes(filter.getShapes());
++ return prepareReport(filter.getStatuses(), !filter.getShapes().isEmpty(),
++ getCollection(BILLING).aggregate(pipeline), shapes, isFullReport); //TODO add shapes
++ }
++
++ private Document prepareReport(List<UserInstanceStatus> statuses, boolean filterByShape,
++ AggregateIterable<Document> agg,
++ Map<String, ShapeInfo> shapes, boolean fullReport) {
++
++ List<Document> reportItems = new ArrayList<>();
++
++ String usageDateStart = null;
++ String usageDateEnd = null;
++ double costTotal = 0D;
++
++ for (Document d : agg) {
++ Document id = (Document) d.get(MongoKeyWords.MONGO_ID);
++ String resourceId = id.getString(dlabIdFieldName());
++ ShapeInfo shape = shapes.get(resourceId);
++ final UserInstanceStatus status = Optional.ofNullable(shape).map(ShapeInfo::getStatus).orElse(null);
++ if ((filterByShape && shape == null) ||
++ (!statuses.isEmpty() && statuses.stream().noneMatch(s -> s.equals(status)))) {
++ continue;
++ }
++
++
++ String dateStart = d.getString(MongoKeyWords.USAGE_FROM);
++ if (StringUtils.compare(usageDateStart, dateStart, false) > 0) {
++ usageDateStart = dateStart;
++ }
++ String dateEnd = d.getString(MongoKeyWords.USAGE_TO);
++ if (StringUtils.compare(usageDateEnd, dateEnd) < 0) {
++ usageDateEnd = dateEnd;
++ }
++
++
++ costTotal += d.getDouble(MongoKeyWords.COST);
++
++ final String statusString = Optional
++ .ofNullable(status)
++ .map(UserInstanceStatus::toString)
++ .orElse(StringUtils.EMPTY);
++ Document item = new Document()
++ .append(MongoKeyWords.DLAB_USER, getUserOrDefault(id.getString(USER)))
++ .append(dlabIdFieldName(), resourceId)
++ .append(shapeFieldName(), generateShapeName(shape))
++ .append("dlab_resource_type", DlabResourceType.getResourceTypeName(id.getString(
++ "dlab_resource_type"))) //todo check on azure!!!
++ .append(STATUS, statusString)
++ .append(FIELD_RESOURCE_TYPE, resourceType(id))
++ .append(productFieldName(), id.getString(productFieldName()))
++ .append(MongoKeyWords.COST, d.getDouble(MongoKeyWords.COST))
++ .append(costFieldName(), BillingCalculationUtils.formatDouble(d.getDouble(MongoKeyWords
++ .COST)))
++ .append(currencyCodeFieldName(), id.getString(currencyCodeFieldName()))
++ .append(usageDateFromFieldName(), dateStart)
++ .append(usageDateToFieldName(), dateEnd);
++
++
++ reportItems.add(item);
++ }
++
++ return new Document()
++ .append(SERVICE_BASE_NAME, settings.getServiceBaseName())
++ .append(usageDateFromFieldName(), usageDateStart)
++ .append(usageDateToFieldName(), usageDateEnd)
++ .append(ITEMS, reportItems)
++ .append(COST_TOTAL, BillingCalculationUtils.formatDouble(BillingCalculationUtils.round
++ (costTotal, 2)))
++ .append(currencyCodeFieldName(), (reportItems.isEmpty() ? null :
++ reportItems.get(0).getString(currencyCodeFieldName())))
++ .append(FULL_REPORT, fullReport);
++
++ }
++
++ protected String resourceType(Document id) {
++ return id.getString(FIELD_RESOURCE_TYPE);
++ }
++
++ protected String currencyCodeFieldName() {
++ return "currency_code";
++ }
++
++ protected String usageDateToFieldName() {
++ return MongoKeyWords.USAGE_TO;
++ }
++
++ protected String costFieldName() {
++ return MongoKeyWords.COST;
++ }
++
++ protected String productFieldName() {
++ return ReportLine.FIELD_PRODUCT;
++ }
++
++ protected String usageDateFromFieldName() {
++ return MongoKeyWords.USAGE_FROM;
++ }
++
++ protected String dlabIdFieldName() {
++ return ReportLine.FIELD_DLAB_ID;
++ }
++
++ protected String shapeFieldName() {
++ return SHAPE;
++ }
++
++ protected abstract Bson sortCriteria();
++
++ protected abstract Bson groupCriteria();
++
+ protected Map<String, ShapeInfo> getShapes(List<String> shapeNames) {
+ FindIterable<Document> userInstances = getUserInstances();
+ final Map<String, ShapeInfo> shapes = new HashMap<>();
+
+ for (Document d : userInstances) {
+ getExploratoryShape(shapeNames, d)
+ .ifPresent(shapeInfo -> shapes.put(d.getString(EXPLORATORY_ID), shapeInfo));
+ @SuppressWarnings("unchecked")
+ List<Document> comp = (List<Document>) d.get(COMPUTATIONAL_RESOURCES);
+ comp.forEach(computational ->
+ getComputationalShape(shapeNames, computational)
+ .ifPresent(shapeInfo -> shapes.put(computational.getString(COMPUTATIONAL_ID), shapeInfo)));
+ }
+
+ appendSsnAndEdgeNodeType(shapeNames, shapes);
+
+ log.trace("Loaded shapes is {}", shapes);
+ return shapes;
+ }
+
+ @Override
+ public Double getTotalCost() {
+ return aggregateBillingData(singletonList(group(null, sum(TOTAL_FIELD_NAME, COST_FIELD))));
+ }
+
+ @Override
+ public Double getUserCost(String user) {
+ final List<Bson> pipeline = Arrays.asList(match(eq(USER, user)),
+ group(null, sum(TOTAL_FIELD_NAME, COST_FIELD)));
+ return aggregateBillingData(pipeline);
+ }
+
+ @Override
+ public Double getProjectCost(String project) {
+ final List<Bson> pipeline = Arrays.asList(match(eq(PROJECT, project)),
+ group(null, sum(TOTAL_FIELD_NAME, COST_FIELD)));
+ return aggregateBillingData(pipeline);
+ }
+
+ @Override
+ public int getBillingQuoteUsed() {
+ return toPercentage(() -> settings.getMaxBudget(), getTotalCost());
+ }
+
+ @Override
+ public int getBillingUserQuoteUsed(String user) {
+ return toPercentage(() -> userSettingsDAO.getAllowedBudget(user), getUserCost(user));
+ }
+
+ @Override
- public int getBillingProjectQuoteUsed(String project) {
- return toPercentage(() -> projectDAO.getAllowedBudget(project), getProjectCost(project));
- }
-
- @Override
+ public boolean isBillingQuoteReached() {
+ return getBillingQuoteUsed() >= ONE_HUNDRED;
+ }
+
+ @Override
+ public boolean isUserQuoteReached(String user) {
+ final Double userCost = getUserCost(user);
+ return userSettingsDAO.getAllowedBudget(user)
+ .filter(allowedBudget -> userCost.intValue() != 0 && allowedBudget <= userCost)
+ .isPresent();
+ }
+
++
+ @Override
+ public boolean isProjectQuoteReached(String project) {
+ final Double projectCost = getProjectCost(project);
+ return projectDAO.getAllowedBudget(project)
+ .filter(allowedBudget -> projectCost.intValue() != 0 && allowedBudget <= projectCost)
+ .isPresent();
+ }
+
++ @Override
++ public int getBillingProjectQuoteUsed(String project) {
++ return toPercentage(() -> projectDAO.getAllowedBudget(project), getProjectCost(project));
++ }
++
+ protected String getUserOrDefault(String user) {
+ return StringUtils.isNotBlank(user) ? user : SHARED_RESOURCE_NAME;
+ }
+
+ private Integer toPercentage(Supplier<Optional<Integer>> allowedBudget, Double totalCost) {
+ return allowedBudget.get()
+ .map(userBudget -> (totalCost * ONE_HUNDRED) / userBudget)
+ .map(Double::intValue)
+ .orElse(BigDecimal.ZERO.intValue());
+ }
+
++ private List<Bson> matchCriteria(BillingFilter filter) {
++
++ List<Bson> searchCriteria = new ArrayList<>();
++
++ if (filter.getUser() != null && !filter.getUser().isEmpty()) {
++ searchCriteria.add(Filters.in(MongoKeyWords.DLAB_USER, filter.getUser()));
++ }
++
++ if (filter.getResourceType() != null && !filter.getResourceType().isEmpty()) {
++ searchCriteria.add(Filters.in("dlab_resource_type",
++ DlabResourceType.getResourceTypeIds(filter.getResourceType())));
++ }
++
++ if (filter.getDlabId() != null && !filter.getDlabId().isEmpty()) {
++ searchCriteria.add(regex(dlabIdFieldName(), filter.getDlabId(), "i"));
++ }
++
++ if (filter.getDateStart() != null && !filter.getDateStart().isEmpty()) {
++ searchCriteria.add(gte(FIELD_USAGE_DATE, filter.getDateStart()));
++ }
++ if (filter.getDateEnd() != null && !filter.getDateEnd().isEmpty()) {
++ searchCriteria.add(lte(FIELD_USAGE_DATE, filter.getDateEnd()));
++ }
++
++ searchCriteria.addAll(cloudMatchCriteria((T) filter));
++ return searchCriteria;
++ }
++
++ protected abstract List<Bson> cloudMatchCriteria(T filter);
++
+
+ private Optional<ShapeInfo> getComputationalShape(List<String> shapeNames, Document c) {
+ return isDataEngine(c.getString(DATAENGINE_DOCKER_IMAGE)) ? getDataEngineShape(shapeNames, c) :
+ getDataEngineServiceShape(shapeNames, c);
+ }
+
+ private Double aggregateBillingData(List<Bson> pipeline) {
+ return Optional.ofNullable(aggregate(BILLING, pipeline).first())
+ .map(d -> d.getDouble(TOTAL_FIELD_NAME))
+ .orElse(BigDecimal.ZERO.doubleValue());
+ }
+
+ private FindIterable<Document> getUserInstances() {
+ return getCollection(USER_INSTANCES)
+ .find()
+ .projection(
+ fields(excludeId(),
+ include(SHAPE, EXPLORATORY_ID, STATUS,
+ COMPUTATIONAL_RESOURCES + "." + COMPUTATIONAL_ID,
+ COMPUTATIONAL_RESOURCES + "." + MASTER_NODE_SHAPE,
+ COMPUTATIONAL_RESOURCES + "." + SLAVE_NODE_SHAPE,
+ COMPUTATIONAL_RESOURCES + "." + TOTAL_INSTANCE_NUMBER,
+ COMPUTATIONAL_RESOURCES + "." + DATAENGINE_SHAPE,
+ COMPUTATIONAL_RESOURCES + "." + DATAENGINE_INSTANCE_COUNT,
+ COMPUTATIONAL_RESOURCES + "." + DATAENGINE_DOCKER_IMAGE,
+ COMPUTATIONAL_RESOURCES + "." + STATUS
+ )));
+ }
+
+ private Optional<ShapeInfo> getExploratoryShape(List<String> shapeNames, Document d) {
+ final String shape = d.getString(SHAPE);
+ if (isShapeAcceptable(shapeNames, shape)) {
+ return Optional.of(new ShapeInfo(shape, UserInstanceStatus.of(d.getString(STATUS))));
+ }
+ return Optional.empty();
+ }
+
+ private boolean isDataEngine(String dockerImage) {
+ return DataEngineType.fromDockerImageName(dockerImage) == DataEngineType.SPARK_STANDALONE;
+ }
+
+ private Optional<ShapeInfo> getDataEngineServiceShape(List<String> shapeNames,
+ Document c) {
+ final String desMasterShape = c.getString(MASTER_NODE_SHAPE);
+ final String desSlaveShape = c.getString(SLAVE_NODE_SHAPE);
+ if (isShapeAcceptable(shapeNames, desMasterShape, desSlaveShape)) {
+ return Optional.of(new ShapeInfo(desMasterShape, desSlaveShape, c.getString(TOTAL_INSTANCE_NUMBER),
+ UserInstanceStatus.of(c.getString(STATUS))));
+ }
+ return Optional.empty();
+ }
+
+ private Optional<ShapeInfo> getDataEngineShape(List<String> shapeNames, Document c) {
+ final String dataEngineShape = c.getString(DATAENGINE_SHAPE);
+ if ((isShapeAcceptable(shapeNames, dataEngineShape))
+ && StringUtils.isNotEmpty(c.getString(COMPUTATIONAL_ID))) {
+
+ return Optional.of(new ShapeInfo(dataEngineShape, c.getString(DATAENGINE_INSTANCE_COUNT),
+ UserInstanceStatus.of(c.getString(STATUS))));
+ }
+ return Optional.empty();
+ }
+
+ private boolean isShapeAcceptable(List<String> shapeNames, String... shapes) {
+ return shapeNames == null || shapeNames.isEmpty() || Arrays.stream(shapes).anyMatch(shapeNames::contains);
+ }
+
- protected abstract void appendSsnAndEdgeNodeType(List<String> shapeNames, Map<String, ShapeInfo> shapes);
++ protected void appendSsnAndEdgeNodeType(List<String> shapeNames, Map<String, ShapeInfo> shapes) {
++ final String ssnShape = getSsnShape();
++ if (shapeNames == null || shapeNames.isEmpty() || shapeNames.contains(ssnShape)) {
++ String serviceBaseName = getServiceBaseName();
++ shapes.put(serviceBaseName + "-ssn", new ShapeInfo(ssnShape, UserInstanceStatus.RUNNING));
++ FindIterable<Document> docs = getCollection(USER_EDGE)
++ .find()
++ .projection(fields(include(ID, EDGE_STATUS)));
++ for (Document d : docs) {
++ shapes.put(edgeId(d),
++ new ShapeInfo(getEdgeSize(), UserInstanceStatus.of(d.getString(EDGE_STATUS))));
++ }
++ }
++ }
++
++ protected String getServiceBaseName() {
++ return settings.getServiceBaseName();
++ }
++
++ protected abstract String getEdgeSize();
++
++ protected abstract String edgeId(Document d);
++
++ protected abstract String getSsnShape();
++
+
+ protected String generateShapeName(ShapeInfo shape) {
+ return Optional.ofNullable(shape).map(ShapeInfo::getName).orElse(StringUtils.EMPTY);
+ }
+
+ protected void usersToLowerCase(List<String> users) {
+ if (users != null) {
+ users.replaceAll(u -> u != null ? u.toLowerCase() : null);
+ }
+ }
+
+ protected void setUserFilter(UserInfo userInfo, BillingFilter filter, boolean isFullReport) {
+ if (isFullReport) {
+ usersToLowerCase(filter.getUser());
+ } else {
+ filter.setUser(Lists.newArrayList(userInfo.getName().toLowerCase()));
+ }
+ }
+
+ /**
+ * Store shape info
+ */
+ @Getter
+ @ToString
+ protected class ShapeInfo {
+ private static final String DES_NAME_FORMAT = "Master: %s%sSlave: %d x %s";
+ private static final String DE_NAME_FORMAT = "%d x %s";
+ private final boolean isDataEngine;
+ private final String shape;
+ private final String slaveShape;
+ private final String slaveCount;
+ private final boolean isExploratory;
+ private final UserInstanceStatus status;
+
+ private ShapeInfo(boolean isDataEngine, String shape, String slaveShape, String slaveCount, boolean
+ isExploratory, UserInstanceStatus status) {
+ this.isDataEngine = isDataEngine;
+ this.shape = shape;
+ this.slaveShape = slaveShape;
+ this.slaveCount = slaveCount;
+ this.isExploratory = isExploratory;
+ this.status = status;
+ }
+
+ public ShapeInfo(String shape, UserInstanceStatus status) {
+ this(false, shape, null, null, true, status);
+ }
+
+ ShapeInfo(String shape, String slaveShape, String slaveCount, UserInstanceStatus status) {
+ this(false, shape, slaveShape, slaveCount, false, status);
+ }
+
+
+ ShapeInfo(String shape, String slaveCount, UserInstanceStatus status) {
+ this(true, shape, null, slaveCount, false, status);
+ }
+
+ public String getName() {
+ if (isExploratory) {
+ return shape;
+ } else {
+ return clusterName();
+ }
+ }
+
+ private String clusterName() {
+ try {
+ final Integer count = Integer.valueOf(slaveCount);
+ return isDataEngine ? String.format(DE_NAME_FORMAT, count, shape) :
+ String.format(DES_NAME_FORMAT, shape, System.lineSeparator(), count - 1, slaveShape);
+ } catch (NumberFormatException e) {
+ log.error("Cannot parse string {} to integer", slaveCount);
+ return StringUtils.EMPTY;
+ }
+ }
+ }
}
diff --cc services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
index d2f7268,adcef5e..71bda09
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
@@@ -19,20 -19,35 +19,29 @@@
package com.epam.dlab.backendapi.dao.aws;
-import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.MongoKeyWords;
import com.epam.dlab.backendapi.dao.BaseBillingDAO;
+ import com.epam.dlab.backendapi.domain.ProjectDTO;
import com.epam.dlab.backendapi.resources.dto.aws.AwsBillingFilter;
+import com.epam.dlab.util.UsernameUtils;
+ import com.epam.dlab.backendapi.roles.RoleType;
+ import com.epam.dlab.backendapi.roles.UserRoles;
+ import com.epam.dlab.billing.BillingCalculationUtils;
+ import com.epam.dlab.billing.DlabResourceType;
+ import com.epam.dlab.dto.UserInstanceStatus;
+ import com.mongodb.client.AggregateIterable;
+ import com.mongodb.client.FindIterable;
+ import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import org.bson.conversions.Bson;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import static com.epam.dlab.backendapi.dao.MongoCollections.BILLING;
import static com.epam.dlab.model.aws.ReportLine.*;
import static com.mongodb.client.model.Accumulators.*;
-import static com.mongodb.client.model.Aggregates.*;
-import static com.mongodb.client.model.Filters.*;
-import static com.mongodb.client.model.Projections.fields;
-import static com.mongodb.client.model.Projections.include;
+import static com.mongodb.client.model.Aggregates.group;
+import static com.mongodb.client.model.Aggregates.sort;
/**
* DAO for user billing.
diff --cc services/self-service/src/main/resources/webapp/package-lock.json
index e2afedc,b6db496..a8fcfde
--- a/services/self-service/src/main/resources/webapp/package-lock.json
+++ b/services/self-service/src/main/resources/webapp/package-lock.json
@@@ -417,24 -417,29 +417,29 @@@
"dependencies": {
"abbrev": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"optional": true,
"requires": {
@@@ -444,48 -449,61 +449,61 @@@
},
"balanced-match": {
"version": "1.0.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true,
+ "optional": true
},
"brace-expansion": {
"version": "1.1.11",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++ "resolved": false,
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "optional": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true,
"optional": true
},
"debug": {
"version": "2.6.9",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "resolved": false,
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"optional": true,
"requires": {
@@@ -494,25 -512,29 +512,29 @@@
},
"deep-extend": {
"version": "0.6.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -521,13 -543,15 +543,15 @@@
},
"fs.realpath": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++ "resolved": false,
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
"requires": {
@@@ -543,7 -567,8 +567,8 @@@
},
"glob": {
"version": "7.1.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -557,13 -582,15 +582,15 @@@
},
"has-unicode": {
"version": "2.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.24",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
++ "resolved": false,
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"optional": true,
"requires": {
@@@ -572,7 -599,8 +599,8 @@@
},
"ignore-walk": {
"version": "3.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -581,7 -609,8 +609,8 @@@
},
"inflight": {
"version": "1.0.6",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++ "resolved": false,
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"optional": true,
"requires": {
@@@ -591,54 -620,67 +620,67 @@@
},
"inherits": {
"version": "2.0.3",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true,
+ "optional": true
},
"ini": {
"version": "1.3.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
+ "optional": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
+ "optional": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++ "resolved": false,
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true,
+ "optional": true
},
"minipass": {
"version": "2.3.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
"dev": true,
+ "optional": true,
"requires": {
- "safe-buffer": "5.1.2",
- "yallist": "3.0.3"
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.2.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"dev": true,
"optional": true,
"requires": {
@@@ -647,21 -689,25 +689,25 @@@
},
"mkdirp": {
"version": "0.5.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true,
"optional": true
},
"needle": {
"version": "2.2.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
"dev": true,
"optional": true,
"requires": {
@@@ -672,7 -718,8 +718,8 @@@
},
"node-pre-gyp": {
"version": "0.10.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
"dev": true,
"optional": true,
"requires": {
@@@ -690,7 -737,8 +737,8 @@@
},
"nopt": {
"version": "4.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"dev": true,
"optional": true,
"requires": {
@@@ -700,13 -748,15 +748,15 @@@
},
"npm-bundled": {
"version": "1.0.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -716,7 -766,8 +766,8 @@@
},
"npmlog": {
"version": "4.1.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"optional": true,
"requires": {
@@@ -728,38 -779,46 +779,46 @@@
},
"number-is-nan": {
"version": "1.0.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "4.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
+ "optional": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"dev": true,
"optional": true,
"requires": {
@@@ -769,19 -828,22 +828,22 @@@
},
"path-is-absolute": {
"version": "1.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.8",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
++ "resolved": false,
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
"optional": true,
"requires": {
@@@ -793,7 -855,8 +855,8 @@@
"dependencies": {
"minimist": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true,
"optional": true
}
@@@ -801,7 -864,8 +864,8 @@@
},
"readable-stream": {
"version": "2.3.6",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
++ "resolved": false,
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"optional": true,
"requires": {
@@@ -816,7 -880,8 +880,8 @@@
},
"rimraf": {
"version": "2.6.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"optional": true,
"requires": {
@@@ -825,52 -890,62 +890,62 @@@
},
"safe-buffer": {
"version": "5.1.2",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true,
"optional": true
},
"semver": {
"version": "5.6.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
+ "optional": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"optional": true,
"requires": {
@@@ -879,21 -954,25 +954,25 @@@
},
"strip-ansi": {
"version": "3.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
+ "optional": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.8",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
++ "resolved": false,
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -908,13 -987,15 +987,15 @@@
},
"util-deprecate": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"optional": true,
"requires": {
@@@ -923,13 -1004,17 +1004,17 @@@
},
"wrappy": {
"version": "1.0.2",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "optional": true
},
"yallist": {
"version": "3.0.3",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true,
+ "optional": true
}
}
},
@@@ -5043,27 -4523,17 +4523,17 @@@
"dev": true,
"optional": true
},
- "ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "dev": true,
- "optional": true,
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
- },
"ansi-regex": {
"version": "2.1.1",
-- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++ "resolved": false,
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz",
- "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true,
"optional": true
},
@@@ -5092,37 -4573,38 +4573,38 @@@
"dev": true,
"optional": true
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "code-point-at": {
+ "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true,
"optional": true
},
- "aws-sign2": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
- "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "concat-map": {
+ "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true,
"optional": true
},
- "aws4": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
- "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "console-control-strings": {
+ "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
"dev": true,
"optional": true
},
- "balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
- "dev": true
+ "core-util-is": {
+ "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true,
+ "optional": true
},
- "bcrypt-pbkdf": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"optional": true,
"requires": {
@@@ -5170,101 -4618,9 +4618,9 @@@
"dev": true,
"optional": true
},
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
- "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
- "dev": true,
- "requires": {
- "delayed-stream": "1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cryptiles": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
- "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
- "dev": true,
- "optional": true,
- "requires": {
- "boom": "2.10.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "optional": true
- }
- }
- },
- "debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
- "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
- "dev": true,
- "optional": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
"delegates": {
"version": "1.0.0",
-- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++ "resolved": false,
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"dev": true,
"optional": true
@@@ -5313,37 -4644,14 +4644,14 @@@
},
"fs.realpath": {
"version": "1.0.0",
-- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++ "resolved": false,
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fstream": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
- "dev": true,
- "requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.1"
- }
- },
- "fstream-ignore": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
- "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
"dev": true,
- "optional": true,
- "requires": {
- "fstream": "1.0.11",
- "inherits": "2.0.3",
- "minimatch": "3.0.4"
- }
+ "optional": true
},
"gauge": {
"version": "2.7.4",
-- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++ "resolved": false,
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
@@@ -5417,7 -4683,7 +4683,7 @@@
},
"has-unicode": {
"version": "2.0.1",
-- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++ "resolved": false,
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"dev": true,
"optional": true
@@@ -5455,77 -4710,60 +4710,60 @@@
},
"inflight": {
"version": "1.0.6",
-- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++ "resolved": false,
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
+ "optional": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
-- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++ "resolved": false,
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"ini": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
- "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
-- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
++ "resolved": false,
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
+ "optional": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true,
- "optional": true
- },
"isarray": {
"version": "1.0.0",
-- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "resolved": false,
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true,
"optional": true
},
- "jodid25519": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
- "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
+ "minimatch": {
+ "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "brace-expansion": "^1.1.7"
}
},
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true,
- "optional": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "minimist": {
+ "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++ "resolved": false,
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true,
"optional": true
},
@@@ -5560,56 -4785,15 +4785,15 @@@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.0.2",
- "json-schema": "0.2.3",
- "verror": "1.3.6"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "optional": true
- }
- }
- },
- "mime-db": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
- "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.15",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
- "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
- "dev": true,
- "requires": {
- "mime-db": "1.27.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.7"
+ "minipass": "^2.2.1"
}
},
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
"mkdirp": {
"version": "0.5.1",
-- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++ "resolved": false,
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@@ -5641,7 -4838,7 +4838,7 @@@
},
"nopt": {
"version": "4.0.1",
-- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++ "resolved": false,
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"dev": true,
"optional": true,
@@@ -5665,43 -4880,38 +4880,38 @@@
},
"number-is-nan": {
"version": "1.0.1",
-- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++ "resolved": false,
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
-- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++ "resolved": false,
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
-- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++ "resolved": false,
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
+ "optional": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
-- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++ "resolved": false,
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
-- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++ "resolved": false,
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true,
"optional": true
@@@ -5719,14 -4929,8 +4929,8 @@@
},
"path-is-absolute": {
"version": "1.0.1",
-- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++ "resolved": false,
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "performance-now": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
- "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
"dev": true,
"optional": true
},
@@@ -5765,7 -4956,7 +4956,7 @@@
"dependencies": {
"minimist": {
"version": "1.2.0",
-- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++ "resolved": false,
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true,
"optional": true
@@@ -5918,37 -5017,24 +5017,24 @@@
"dev": true,
"optional": true
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "set-blocking": {
+ "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
+ "optional": true
},
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "signal-exit": {
+ "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true,
"optional": true
},
- "tar": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
- "dev": true,
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- }
- },
- "tar-pack": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
- "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
+ "string-width": {
+ "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"optional": true,
"requires": {
@@@ -5969,23 -5050,23 +5050,23 @@@
"dev": true,
"optional": true,
"requires": {
- "punycode": "1.4.1"
+ "safe-buffer": "~5.1.0"
}
},
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "strip-ansi": {
+ "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"optional": true,
"requires": {
- "safe-buffer": "5.0.1"
+ "ansi-regex": "^2.0.0"
}
},
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "strip-json-comments": {
+ "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true,
"optional": true
},
@@@ -5998,14 -5088,8 +5088,8 @@@
},
"util-deprecate": {
"version": "1.0.2",
-- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++ "resolved": false,
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "uuid": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
- "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
"dev": true,
"optional": true
},
@@@ -6031,9 -5105,17 +5105,17 @@@
},
"wrappy": {
"version": "1.0.2",
-- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++ "resolved": false,
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true,
+ "optional": true
}
}
},
@@@ -13078,24 -11200,29 +11200,29 @@@
"dependencies": {
"abbrev": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"optional": true,
"requires": {
@@@ -13105,48 -11232,61 +11232,61 @@@
},
"balanced-match": {
"version": "1.0.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true,
+ "optional": true
},
"brace-expansion": {
"version": "1.1.11",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++ "resolved": false,
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "optional": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true,
"optional": true
},
"debug": {
"version": "2.6.9",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "resolved": false,
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"optional": true,
"requires": {
@@@ -13155,25 -11295,29 +11295,29 @@@
},
"deep-extend": {
"version": "0.6.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -13182,13 -11326,15 +11326,15 @@@
},
"fs.realpath": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++ "resolved": false,
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
"requires": {
@@@ -13204,7 -11350,8 +11350,8 @@@
},
"glob": {
"version": "7.1.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -13218,13 -11365,15 +11365,15 @@@
},
"has-unicode": {
"version": "2.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.24",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
++ "resolved": false,
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"optional": true,
"requires": {
@@@ -13233,7 -11382,8 +11382,8 @@@
},
"ignore-walk": {
"version": "3.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -13242,7 -11392,8 +11392,8 @@@
},
"inflight": {
"version": "1.0.6",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++ "resolved": false,
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"optional": true,
"requires": {
@@@ -13252,54 -11403,67 +11403,67 @@@
},
"inherits": {
"version": "2.0.3",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true,
+ "optional": true
},
"ini": {
"version": "1.3.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
+ "optional": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
+ "optional": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++ "resolved": false,
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true,
+ "optional": true
},
"minipass": {
"version": "2.3.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
"dev": true,
+ "optional": true,
"requires": {
- "safe-buffer": "5.1.2",
- "yallist": "3.0.3"
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.2.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"dev": true,
"optional": true,
"requires": {
@@@ -13308,21 -11472,25 +11472,25 @@@
},
"mkdirp": {
"version": "0.5.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true,
"optional": true
},
"needle": {
"version": "2.2.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
"dev": true,
"optional": true,
"requires": {
@@@ -13333,7 -11501,8 +11501,8 @@@
},
"node-pre-gyp": {
"version": "0.10.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
"dev": true,
"optional": true,
"requires": {
@@@ -13351,7 -11520,8 +11520,8 @@@
},
"nopt": {
"version": "4.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"dev": true,
"optional": true,
"requires": {
@@@ -13361,13 -11531,15 +11531,15 @@@
},
"npm-bundled": {
"version": "1.0.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -13377,7 -11549,8 +11549,8 @@@
},
"npmlog": {
"version": "4.1.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"optional": true,
"requires": {
@@@ -13389,38 -11562,46 +11562,46 @@@
},
"number-is-nan": {
"version": "1.0.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "4.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
+ "optional": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"dev": true,
"optional": true,
"requires": {
@@@ -13430,19 -11611,22 +11611,22 @@@
},
"path-is-absolute": {
"version": "1.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.8",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
++ "resolved": false,
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
"optional": true,
"requires": {
@@@ -13454,7 -11638,8 +11638,8 @@@
"dependencies": {
"minimist": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true,
"optional": true
}
@@@ -13462,7 -11647,8 +11647,8 @@@
},
"readable-stream": {
"version": "2.3.6",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
++ "resolved": false,
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"optional": true,
"requires": {
@@@ -13477,7 -11663,8 +11663,8 @@@
},
"rimraf": {
"version": "2.6.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"optional": true,
"requires": {
@@@ -13486,52 -11673,62 +11673,62 @@@
},
"safe-buffer": {
"version": "5.1.2",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true,
"optional": true
},
"semver": {
"version": "5.6.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
+ "optional": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"optional": true,
"requires": {
@@@ -13540,21 -11737,25 +11737,25 @@@
},
"strip-ansi": {
"version": "3.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
+ "optional": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.8",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
++ "resolved": false,
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -13569,13 -11770,15 +11770,15 @@@
},
"util-deprecate": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"optional": true,
"requires": {
@@@ -13584,13 -11787,17 +11787,17 @@@
},
"wrappy": {
"version": "1.0.2",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "optional": true
},
"yallist": {
"version": "3.0.3",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true,
+ "optional": true
}
}
},
@@@ -14547,24 -12780,29 +12780,29 @@@
"dependencies": {
"abbrev": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"optional": true,
"requires": {
@@@ -14574,48 -12812,61 +12812,61 @@@
},
"balanced-match": {
"version": "1.0.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true,
+ "optional": true
},
"brace-expansion": {
"version": "1.1.11",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++ "resolved": false,
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "optional": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true,
"optional": true
},
"debug": {
"version": "2.6.9",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "resolved": false,
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"optional": true,
"requires": {
@@@ -14624,25 -12875,29 +12875,29 @@@
},
"deep-extend": {
"version": "0.6.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -14651,13 -12906,15 +12906,15 @@@
},
"fs.realpath": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++ "resolved": false,
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"optional": true,
"requires": {
@@@ -14673,7 -12930,8 +12930,8 @@@
},
"glob": {
"version": "7.1.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -14687,13 -12945,15 +12945,15 @@@
},
"has-unicode": {
"version": "2.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.24",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
++ "resolved": false,
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"optional": true,
"requires": {
@@@ -14702,7 -12962,8 +12962,8 @@@
},
"ignore-walk": {
"version": "3.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -14711,7 -12972,8 +12972,8 @@@
},
"inflight": {
"version": "1.0.6",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++ "resolved": false,
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"optional": true,
"requires": {
@@@ -14721,54 -12983,67 +12983,67 @@@
},
"inherits": {
"version": "2.0.3",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true,
+ "optional": true
},
"ini": {
"version": "1.3.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
+ "optional": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
+ "optional": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++ "resolved": false,
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true,
+ "optional": true
},
"minipass": {
"version": "2.3.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
"dev": true,
+ "optional": true,
"requires": {
- "safe-buffer": "5.1.2",
- "yallist": "3.0.3"
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.2.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"dev": true,
"optional": true,
"requires": {
@@@ -14777,21 -13052,25 +13052,25 @@@
},
"mkdirp": {
"version": "0.5.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true,
"optional": true
},
"needle": {
"version": "2.2.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
"dev": true,
"optional": true,
"requires": {
@@@ -14802,7 -13081,8 +13081,8 @@@
},
"node-pre-gyp": {
"version": "0.10.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
"dev": true,
"optional": true,
"requires": {
@@@ -14820,7 -13100,8 +13100,8 @@@
},
"nopt": {
"version": "4.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"dev": true,
"optional": true,
"requires": {
@@@ -14830,13 -13111,15 +13111,15 @@@
},
"npm-bundled": {
"version": "1.0.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -14846,7 -13129,8 +13129,8 @@@
},
"npmlog": {
"version": "4.1.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"optional": true,
"requires": {
@@@ -14858,38 -13142,46 +13142,46 @@@
},
"number-is-nan": {
"version": "1.0.1",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "4.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
+ "optional": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
++ "resolved": false,
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"dev": true,
"optional": true,
"requires": {
@@@ -14899,19 -13191,22 +13191,22 @@@
},
"path-is-absolute": {
"version": "1.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.8",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
++ "resolved": false,
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
"optional": true,
"requires": {
@@@ -14923,7 -13218,8 +13218,8 @@@
"dependencies": {
"minimist": {
"version": "1.2.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true,
"optional": true
}
@@@ -14931,7 -13227,8 +13227,8 @@@
},
"readable-stream": {
"version": "2.3.6",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
++ "resolved": false,
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"optional": true,
"requires": {
@@@ -14946,7 -13243,8 +13243,8 @@@
},
"rimraf": {
"version": "2.6.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"optional": true,
"requires": {
@@@ -14955,52 -13253,62 +13253,62 @@@
},
"safe-buffer": {
"version": "5.1.2",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++ "resolved": false,
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
++ "resolved": false,
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true,
"optional": true
},
"semver": {
"version": "5.6.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
++ "resolved": false,
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++ "resolved": false,
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
+ "optional": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++ "resolved": false,
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"optional": true,
"requires": {
@@@ -15009,21 -13317,25 +13317,25 @@@
},
"strip-ansi": {
"version": "3.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
+ "optional": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++ "resolved": false,
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.8",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
++ "resolved": false,
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
"dev": true,
"optional": true,
"requires": {
@@@ -15038,13 -13350,15 +13350,15 @@@
},
"util-deprecate": {
"version": "1.0.2",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.3",
- "bundled": true,
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"optional": true,
"requires": {
@@@ -15053,13 -13367,17 +13367,17 @@@
},
"wrappy": {
"version": "1.0.2",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++ "resolved": false,
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "optional": true
},
"yallist": {
"version": "3.0.3",
- "bundled": true,
- "dev": true
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
++ "resolved": false,
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true,
+ "optional": true
}
}
},
diff --cc services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
index 86355b1,e477161..4db72cf
--- a/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
+++ b/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
@@@ -18,72 -18,74 +18,74 @@@
*/
export const NAMING_CONVENTION = {
- 'cloud_provider': 'gcp',
- 'use_ldap': true,
- 'notebook_instance_size': 'Instance type',
- 'personal_storage': 'Data bucket',
- 'collaboration_storage': 'Collaboration bucket',
- 'account': '',
- 'container': '',
- 'data_engine': 'Deploy Spark Server / Deploy Dataproc',
- 'image': 'Not available',
- 'data_engine_master_instance_size': 'Master machine type',
- 'data_engine_slave_instance_size': 'Slave machine type',
+ 'cloud_provider': 'gcp',
+ 'use_ldap': true,
+ 'notebook_instance_size': 'Instance type',
+ 'personal_storage': 'Data bucket',
+ 'collaboration_storage': 'Collaboration bucket',
+ 'account': '',
+ 'container': '',
+ 'data_engine': 'Deploy Spark Server / Deploy Dataproc',
+ 'image': 'Not available',
+ 'data_engine_master_instance_size': 'Master machine type',
+ 'data_engine_slave_instance_size': 'Slave machine type',
- 'master_node_shape': 'master_node_shape',
- 'slave_node_shape': 'slave_node_shape',
- 'total_instance_number': 'total_instance_number',
+ 'master_node_shape': 'master_node_shape',
+ 'slave_node_shape': 'slave_node_shape',
+ 'total_instance_number': 'total_instance_number',
- 'spot_instance': 'Preemptible worker nodes',
- 'billing': {
- 'resourceName': 'resource_name',
- 'cost': 'cost',
- 'costTotal': 'cost_total',
- 'currencyCode': 'currency_code',
- 'dateFrom': 'from',
- 'dateTo': 'to',
- 'service': 'product',
- 'service_filter_key': 'product',
- 'type': 'dlab_resource_type',
- 'resourceType': 'dlab_resource_type',
- 'instance_size': 'shape',
- 'dlabId': 'dlab_id'
- },
- 'service': 'Product',
- 'type': 'Resource',
- 'instance_size': 'Type',
- 'computational_resource': 'Computational resources',
- 'user_storage_account_name': '',
- 'shared_storage_account_name': '',
- 'bucket_name': 'user_own_bucket_name',
- 'shared_bucket_name': 'shared_bucket_name',
- 'datalake_name': '',
- 'datalake_user_directory_name': '',
- 'datalake_shared_directory_name': '',
- 'docker.dlab-dataengine-service': {
- 'total_instance_number_min': 'min_instance_count',
- 'total_instance_number_max': 'max_instance_count',
- 'min_emr_spot_instance_bid_pct': 'min_emr_spot_instance_bid_pct',
- 'max_emr_spot_instance_bid_pct': 'max_emr_spot_instance_bid_pct',
- 'data_engine_master_instance_size': 'Master machine type',
- 'data_engine_slave_instance_size': 'Slave machine type',
- 'instance_number': 'Total machine count',
- 'master_instance_number': 'Master node count',
- 'slave_instance_number': 'Worker node count',
- 'master_node_shape': 'master_node_shape',
- 'slave_node_shape': 'slave_node_shape',
- 'total_instance_number': 'total_master_instance_number',
- 'total_slave_instance_number': 'total_slave_instance_number',
- },
- 'docker.dlab-dataengine': {
- 'total_instance_number_min': 'min_spark_instance_count',
- 'total_instance_number_max': 'max_spark_instance_count',
- 'data_engine_master_instance_size': 'Machine type',
- 'instance_number': 'Total machine number',
- 'master_instance_number': 'Master machine number',
- 'master_node_shape': 'dataengine_instance_shape',
- 'total_instance_number': 'dataengine_instance_count',
- }
+ 'spot_instance': 'Preemptible worker nodes',
+ 'cluster_version': 'dataproc_version',
+ 'billing': {
+ 'resourceName': 'resource_name',
+ 'cost': 'cost',
+ 'costTotal': 'cost_total',
+ 'currencyCode': 'currency_code',
- 'dateFrom': 'usage_date_start',
- 'dateTo': 'usage_date_end',
++ 'dateFrom': 'from',
++ 'dateTo': 'to',
+ 'service': 'product',
+ 'service_filter_key': 'product',
- 'type': 'resource_type',
++ 'type': 'dlab_resource_type',
+ 'resourceType': 'dlab_resource_type',
+ 'instance_size': 'shape',
+ 'dlabId': 'dlab_id'
+ },
+ 'service': 'Product',
+ 'type': 'Resource',
+ 'instance_size': 'Type',
+ 'computational_resource': 'Computational resources',
+ 'user_storage_account_name': '',
+ 'shared_storage_account_name': '',
+ 'bucket_name': 'user_own_bucket_name',
+ 'shared_bucket_name': 'shared_bucket_name',
+ 'datalake_name': '',
+ 'datalake_user_directory_name': '',
+ 'datalake_shared_directory_name': '',
+ 'docker.dlab-dataengine-service': {
+ 'total_instance_number_min': 'min_instance_count',
+ 'total_instance_number_max': 'max_instance_count',
+ 'min_emr_spot_instance_bid_pct': 'min_emr_spot_instance_bid_pct',
+ 'max_emr_spot_instance_bid_pct': 'max_emr_spot_instance_bid_pct',
+ 'data_engine_master_instance_size': 'Master machine type',
+ 'data_engine_slave_instance_size': 'Slave machine type',
+ 'instance_number': 'Total machine count',
+ 'master_instance_number': 'Master node count',
+ 'slave_instance_number': 'Worker node count',
+ 'master_node_shape': 'master_node_shape',
+ 'slave_node_shape': 'slave_node_shape',
+ 'total_instance_number': 'total_master_instance_number',
+ 'total_slave_instance_number': 'total_slave_instance_number',
+ },
+ 'docker.dlab-dataengine': {
+ 'total_instance_number_min': 'min_spark_instance_count',
+ 'total_instance_number_max': 'max_spark_instance_count',
+ 'data_engine_master_instance_size': 'Machine type',
+ 'instance_number': 'Total machine number',
+ 'master_instance_number': 'Master machine number',
+ 'master_node_shape': 'dataengine_instance_shape',
+ 'total_instance_number': 'dataengine_instance_count',
+ },
+ 'max_project_name_length': 10
};
export class ReportingConfigModel {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org