###
# ============LICENSE_START=======================================================
# ECOMP-PAP-REST
# ================================================================================
# 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=========================================================
###
#=====================================================================================#
#================The Below Properties are default, shouldn't change them==============#
#=====================================================================================#
#
# This is our factory that will create our engine
#
xacml.PAP.papEngineFactory=org.openecomp.policy.xacml.std.pap.StdEngineFactory
# Dictionary and Policy Implementation Classes Properties
dictionary.impl.className=org.openecomp.policy.pap.xacml.rest.handler.DictionaryHandlerImpl
savePolicy.impl.className=org.openecomp.policy.pap.xacml.rest.handler.SavePolicyHandler
pushPolicy.impl.className=org.openecomp.policy.pap.xacml.rest.handler.PushPolicyHandler
deletePolicy.impl.className=org.openecomp.policy.pap.xacml.rest.handler.DeleteHandler
#AutoPush Policy 
xacml.rest.pap.autopush.file=autopush.properties
#=====================================================================================#
#===============The Below Properties will be changed based on Environment=============#
#=====================================================================================#
#
# Where we store our PAP PDP Group/Node information
#
xacml.pap.pdps=pdps
#
# Need the PAP's url (how PDPs will reach it) configured here
# because we need it to generate the URLs of the Policy Files
# sent to the PDPs in the configuration when the PAP is first brought up.
# (In other cases, such as the PDP calling the PAP, we could generate this URL, 
# but for startup there is no other way to get it.)
#
#
xacml.rest.pap.url=http://localhost:8070/pap/
#
# Upon startup, have the PAP servlet send latest configuration information to all
# the PDP nodes it knows about.
#
xacml.rest.pap.initiate.pdp=true
#
# Heartbeat from PAP to PDPs
#
# How much time (in milliseconds) between heartbeats
# (i.e. the time between completing the heartbeat with all PDPs and starting the next cycle)
#
xacml.rest.pap.heartbeat.interval=10000
#
# Heartbeat connection timeout (in milliseconds)
#
xacml.rest.pap.heartbeat.timeout=10000

# new Property Please mention your PAP-REST webapps Location here. 
xacml.rest.config.webapps=/home/users/PolicyEngine/webapps/ConfigPAP/

#Turn the audit on to synchronize the DB/file system
#xacml.rest.pap.run.audit.flag=true
#Turn the audit off to not synchronize the DB/file system
#xacml.rest.pap.run.audit.flag=false
xacml.rest.pap.run.audit.flag=false

#Audit will synchronize the file system to match the contents of the DB
#xacml.rest.pap.filesystem.audit=true
#Audit will synchronize the DB to match the contents of the file system 
#xacml.rest.pap.filesystem.audit=false
xacml.rest.pap.filesystem.audit=false

# id
xacml.rest.pap.userid=testpap
# pass
xacml.rest.pap.password=alpha123
# pdps file
xacml.rest.pdp.idfile=test.properties

#Properties for db access
javax.persistence.jdbc.driver=org.h2.Driver
javax.persistence.jdbc.url=jdbc:h2:file:./sql/xacmlTest
javax.persistence.jdbc.user=sa
javax.persistence.jdbc.password=

#Time in ms which a Policy DB transaction will wait to get the transaction lock object
xacml.rest.pap.transaction.waitms=1000
	
#Policy DB transaction timeout in ms after it has obtained the transaction lock object
xacml.rest.pap.transaction.timeoutms=500
	
#Policy Audit timeout in ms after it has obtained the transaction lock object
xacml.rest.pap.audit.timeoutms=5000

#***Properties for IntegrityMonitor integration defined in IntegrityMonitorProperties.java***

#JMX URL for the PAP-REST.  Need to update to real IP and port
xacml.rest.pap.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:9990/jmxrmi

#The name of the PAP.  Must be unique across the system
xacml.rest.pap.resource.name=site_1.pap_1

#***Properties for IntegrityMonitor integration defined in IntegrityMonitorProperties.java***

#Interval between forward progress counter updates in seconds
fp_monitor_interval=30

#Number of forward progress counter failures before failover
failed_counter_threshold=3

#Interval in seconds between test transactions if there is no other traffic
test_trans_interval=10

#Interval in seconds between updates of the forward progress counter in the DB
write_fpc_interval=5

#Name of the site
site_name=site_1

#Node type. Can take values of: pdp-xacml, pdp-drools, pap, pap-admin, logparser, brms-gateway, 
#astra-gateway, elk-server and pypdp
node_type=pap
 
#Dependency groups are groups of resources upon which a node operational state is dependent upon (dependency_groups). 
#Each group is a comma-separated list of resource names and groups are separated by a semicolon. A group may contain
#one or more members.
dependency_groups=site_1.logparser_1;site_1.adminconsole_1;site_1.elk_1

# The (optional) period of time in seconds between executions of the integrity audit.
# Value < 0 : Audit does not run (default value if property is not present = -1)
# Value = 0 : Audit runs continuously
# Value > 0 : The period of time in seconds between execution of the audit on a particular node
#integrity_audit_period_seconds=-1
integrity_audit_period_seconds=0

ENVIRONMENT=DEVL
