# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.

logsearch.solr.zk_connect_string=localhost:9983

# Service Logs
logsearch.solr.service.logs.collection=hadoop_logs
logsearch.solr.service.logs.numshards=3
logsearch.solr.service.logs.replication.factor=2

# Audit logs
logsearch.solr.audit.logs.zk_connect_string=localhost:9983
logsearch.solr.audit.logs.collection=audit_logs
logsearch.solr.audit.logs.url=
logsearch.solr.audit.logs.numshards=3
logsearch.solr.audit.logs.replication.factor=2

logsearch.solr.config_set.folder=/root/ambari/ambari-logsearch/ambari-logsearch-server/target/package/conf/solr_configsets
logsearch.solr.audit.logs.config_set.folder=/root/ambari/ambari-logsearch/ambari-logsearch-server/target/package/conf/solr_configsets

# Metrics
logsearch.solr.metrics.collector.hosts=
logsearch.solr.jmx.port=18886

# logsearch-admin.json
logsearch.auth.file.enabled=true
logsearch.login.credentials.file=user_pass.json

logsearch.auth.ldap.enabled=false
logsearch.auth.simple.enabled=false
logsearch.auth.external_auth.enabled=false

logsearch.https.port=61888
logsearch.protocol=http

logsearch.config.zk_connect_string=localhost:9983

logsearch.auth.jwt.enabled=true
logsearch.auth.jwt.public_key=MIICOjCCAaOgAwIBAgIJAMY1lA6gY1V/MA0GCSqGSIb3DQEBBQUAMF8xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRUZXN0MQ0wCwYDVQQHEwRUZXN0MQ8wDQYDVQQKEwZIYWRvb3AxDTALBgNVBAsTBFRlc3QxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xODAyMDIxNTAwMTdaFw0xOTAyMDIxNTAwMTdaMF8xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRUZXN0MQ0wCwYDVQQHEwRUZXN0MQ8wDQYDVQQKEwZIYWRvb3AxDTALBgNVBAsTBFRlc3QxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAq3Gu6ji2nrjCbc3r3ls7L8zG5IoZhDgrO108ke+82Zp9QU9SCdekon0YR9nGnXxJI/gynyPdmjFOmCgrMbwCN8LiIMvaeK7IRtmzh1zzFO4omOVYYYZIeSfEBU8qEw2I2ruHbzC9Qxjf3+ZV+9LWEso5xhBimvA+XUfNN8PB868CAwEAATANBgkqhkiG9w0BAQUFAAOBgQASoA1EgaTZEokjIbWeZABbRDrml4oxQ+mkzrn1DgIx1zbdPBTFbGGXZN81TZ7nq64UFoQLKQq7a7l20iHizTz7oTTM99+1uzHYn2TkdAHNpTWCux+5aQkpUCjZStTbp/S6AHgZKchcY7IUfGTiyeYHnJAPsCqVSEzXWymLKMPjTQ==
logsearch.auth.jwt.provider_url=https://localhost:8443/gateway/knoxsso/api/v1/websso
logsearch.auth.jwt.cookie.name=hadoop-jwt
logsearch.auth.jwt.query.param.original_url=originalUrl

logsearch.auth.trusted.proxy=true
logsearch.auth.proxyuser.users=*
