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

#
# This is our factory that will create our engine
#
xacml.PAP.papEngineFactory=org.openecomp.policy.xacml.std.pap.StdEngineFactory

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

################################################################################################
# Adding properties for getting properties previously used by PAP-ADMIN for creating Policies
# THis is part of the Policy Creation API project
################################################################################################

# Set your domain here:
xacml.rest.pap.domain=com

# Location where all the user workspaces are located.
xacml.rest.pap.workspace=workspace

# Location where the GIT repository is located
xacml.rest.pap.repository=repository

# new Property Please mention your PAP-REST webapps Location here. 
xacml.rest.config.webapps=C:\\Second Tomcat\\apache-tomcat-8.0.23\\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
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 MySql xacml database:  PLEASE DO NOT REMOVE... NEEDED FOR APIs
javax.persistence.jdbc.driver=com.mysql.jdbc.Driver
javax.persistence.jdbc.url=jdbc:mysql://localhost:3306/ecomp_sdk
javax.persistence.jdbc.user=root
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=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

#AutoPush Policy Flag
xacml.rest.pap.autopush.flag=false
#AutoPush Policy 
xacml.rest.pap.autopush.file=autopush.properties

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

ENVIRONMENT=DEVL
