###
# ============LICENSE_START=======================================================
# ONAP CLAMP
# ================================================================================
# Copyright (C) 2017 AT&T Intellectual Property. All rights
#                             reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License"); 
# you may not use this file except in compliance with the License. 
# You may obtain a copy of the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License.
# ============LICENSE_END============================================
# ===================================================================
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
###

info.build.artifact=@project.artifactId@
info.build.name=@project.name@
info.build.description=@project.description@
info.build.version=@project.version@


server.contextPath=/
#Modified engine-rest applicationpath
spring.jersey.application-path=/engine-rest
spring.profiles.active=clamp-default
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

#The max number of active threads in this pool
server.tomcat.max-threads=200
#The minimum number of threads always kept alive
server.tomcat.min-Spare-Threads=25
#The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads
server.tomcat.max-idle-time=60000


#Add this properties only if you want to change the URL, AJSC Framework interceptors will intercept
#com.att.ajsc.common.interceptors.PreInterceptor.url=/**
#com.att.ajsc.common.interceptors.PostInterceptor.url=/**

#Servlet context parameters
server.context_parameters.p-name=value #context parameter with p-name as key and value as value.

camel.springboot.consumer-template-cache-size=1000
camel.springboot.producer-template-cache-size=1000
camel.springboot.jmx-enabled=true
camel.defaultthreadpool.poolsize=10
camel.defaultthreadpool.maxpoolsize=20
camel.defaultthreadpool.maxqueuesize=1000
camel.defaultthreadpool.keepaliveTime=60
camel.defaultthreadpool.rejectpolicy=CallerRuns

kubernetes.namespace=com-att-ajsc

#server.port=0

#Camunda Process Engine DataSource connection Details
spring.datasource.url=jdbc:mysql://localhost:${docker.mariadb.port.host}/camundabpm?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true
spring.datasource.username=camunda
spring.datasource.password=ndMSpw4CAM
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#Camunda application properties
#Camunda history level
camunda.bpm.history-level=auto

#clds datasource connection details
spring.cldsdatasource.driver-class-name=com.mysql.jdbc.Driver
spring.cldsdatasource.url=jdbc:mysql://localhost:${docker.mariadb.port.host}/cldsdb4?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true
spring.cldsdatasource.username=clds
spring.cldsdatasource.password=sidnnd83K
spring.cldsdatasource.poolinitialsize=1
spring.cldsdatasource.poolmaxactive=5
spring.cldsdatasource.poolmaxwait=5000
spring.cldsdatasource.pooltestonborrow=true
spring.cldsdatasource.poolvalidationquery=SELECT 1
spring.cldsdatasource.poolvalidationquerytimeout=5000

#Async Executor default Parameters
async.core.pool.size=10
async.max.pool.size=20
async.queue.capacity=500

#CSI Logging Queue
JMS_WMQ_PROVIDER_URL=aftdsc://AFTUAT/34.07/-84.28
JMS_WMQ_CONNECTION_FACTORY_NAME=aftdsc://AFTUAT/?service=CSILOG,version=4.0,bindingType=fusionBus,envContext=Q,Q30A=YES
JMS_WMQ_INITIAL_CONNECTION_FACTORY_NAME=com.att.aft.jms.FusionCtxFactory
JMS_WMQ_AUDIT_DESTINATION_NAME=queue:///CSILOGQL.M2E.DASHBOARD01.NOT.Q30A
JMS_WMQ_PERF_DESTINATION_NAME=queue:///CSILOGQL.M2E.PERFORMANCE01.NOT.Q30A
csiEnable=true

#GRM Edge endpoint details
service.name=ajsc6camundademo
service.version=1.0.0.0
routeoffer=TEST
#Update with your application name
application.name=AJSC6CAMUNDA

org.onap.clamp.config.files.cldsReference=classpath:/clds/clds-reference.properties
org.onap.clamp.config.files.cldsPolicyConfig=classpath:/clds/clds-policy-config.properties
org.onap.clamp.config.files.cldsUsers=classpath:/clds/clds-users.properties
