###
# ============LICENSE_START=======================================================
# LogParser
# ================================================================================
# Copyright (C) 2017-2018 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=========================================================
###

#Health Check Values
RESOURCE_NAME=logparser_pap01
javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
javax.persistence.jdbc.url=jdbc:mariadb://localhost:3306/onap_sdk
javax.persistence.jdbc.user=policy_user
#javax.persistence.jdbc.password=policy_user
javax.persistence.jdbc.password=Za2Xy8XOo9wn8V1EetPgoQ==

#Log Parser application values
JDBC_DRIVER=org.mariadb.jdbc.Driver
JDBC_URL=jdbc:mariadb://localhost:3306/log
JDBC_USER=policy_user
#JDBC_PASSWORD=policy_user
JDBC_PASSWORD=Za2Xy8XOo9wn8V1EetPgoQ==
SERVER=https://localhost:9091/pap/
LOGTYPE=PAP
LOGPATH=C:\\Workspaces\\HealthCheck\\pap-rest.log
PARSERLOGPATH=parserlog.log
node_type=logparser
site_name=site_1
