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

##### Storm #####

topology.worker.childopts={{profiler_topology_worker_childopts}}
topology.auto-credentials={{topology_auto_credentials}}
profiler.workers={{profiler_topology_workers}}
profiler.acker.executors={{profiler_acker_executors}}
profiler.spout.parallelism={{profiler_spout_parallelism}}
profiler.splitter.parallelism={{profiler_splitter_parallelism}}
profiler.builder.parallelism={{profiler_builder_parallelism}}
profiler.hbase.writer.parallelism={{profiler_hbase_writer_parallelism}}
profiler.kafka.writer.parallelism={{profiler_kafka_writer_parallelism}}
topology.message.timeout.secs={{profiler_topology_message_timeout_secs}}
topology.max.spout.pending={{profiler_topology_max_spout_pending}}
topology.fall.back.on.java.serialization=true
topology.testing.always.try.serialize=false
topology.kryo.register=[ org.apache.metron.profiler.ProfileMeasurement, \
    org.apache.metron.profiler.ProfilePeriod, \
    org.apache.metron.common.configuration.profiler.ProfileResult, \
    org.apache.metron.common.configuration.profiler.ProfileResultExpressions, \
    org.apache.metron.common.configuration.profiler.ProfileTriageExpressions, \
    org.apache.metron.common.configuration.profiler.ProfilerConfig, \
    org.apache.metron.common.configuration.profiler.ProfileConfig, \
    org.json.simple.JSONObject, \
    org.json.simple.JSONArray, \
    java.util.LinkedHashMap, \
    org.apache.metron.statistics.OnlineStatisticsProvider ]

##### Profiler #####

profiler.input.topic={{enrichment_output_topic}}
profiler.output.topic={{enrichment_input_topic}}
profiler.period.duration={{profiler_period_duration}}
profiler.period.duration.units={{profiler_period_units}}
profiler.window.duration={{profiler_window_duration}}
profiler.window.duration.units={{profiler_window_units}}
profiler.ttl={{profiler_ttl}}
profiler.ttl.units={{profiler_ttl_units}}
profiler.window.lag={{profiler_window_lag}}
profiler.window.lag.units={{profiler_window_lag_units}}
profiler.max.routes.per.bolt={{profiler_max_routes_per_bolt}}

##### HBase #####

profiler.hbase.salt.divisor=1000
profiler.hbase.table={{profiler_hbase_table}}
profiler.hbase.column.family={{profiler_hbase_cf}}
profiler.hbase.batch={{profiler_hbase_batch}}
profiler.hbase.flush.interval.seconds={{profiler_hbase_flush_interval}}

##### Kafka #####

kafka.zk={{zookeeper_quorum}}
kafka.broker={{kafka_brokers}}
kafka.start={{profiler_kafka_start}}
kafka.security.protocol={{kafka_security_protocol}}
