###
# ============LICENSE_START=======================================================
# ONAP-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.onap.policy.xacml.std.pap.StdEngineFactory
# Dictionary and Policy Implementation Classes Properties
dictionary.impl.className=org.onap.policy.pap.xacml.rest.handler.DictionaryHandlerImpl
savePolicy.impl.className=org.onap.policy.pap.xacml.rest.handler.SavePolicyHandler
pushPolicy.impl.className=org.onap.policy.pap.xacml.rest.handler.PushPolicyHandler
deletePolicy.impl.className=org.onap.policy.pap.xacml.rest.handler.DeleteHandler

#=====================================================================================#
#===============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=100000
#
# Heartbeat connection timeout (in milliseconds)
#
xacml.rest.pap.heartbeat.timeout=100000

# 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=true

#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
xacm.xcor.required.pattern=1,1
# id
xacml.rest.pap.userid=testpap
# pass
xacml.rest.pap.password=alpha123
# pdps file
xacml.rest.pdp.idfile=test.properties

#Properties for db access
#properties for MySql xacml database:  PLEASE DO NOT REMOVE... NEEDED FOR APIs
javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
javax.persistence.jdbc.url=jdbc:mariadb://localhost:3306/onap_sdk?failOverReadOnly=false&autoReconnect=true
javax.persistence.jdbc.user=policy_user
javax.persistence.jdbc.password=policy_user

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

#Policy Audit timeout in ms after it has obtained the transaction lock object
xacml.rest.pap.audit.timeoutms=500000

#controls how long the pap will wait before giving up when sending notifications to other paps
xacml.rest.pap.notify.timeoutms=10000

#the number of times an incoming policy update notification will be tried to be processed (or until it succeeds)
xacml.rest.pap.incomingnotification.tries=4

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

#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 
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

ENVIRONMENT=DEVL

#
#PolicySafetyChecker properties
#
#Turn safetyChecker on/off
xacml.rest.pap.safetychecker=on
PDP_URL1 = http://localhost:8082/pdp/, testpdp, alpha456
CLIENT_ID=
CLIENT_KEY=

#Micro Service Model Properties
xacml.policy.msOnapName=http://org.onap
xacml.policy.msPolicyName=http://org.onap.policy