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

{
  "envContextConfig": {
    "env": "storm",
    "mode": "local",
    "topologyName": "cassandrawQueryLogMonitorTopology",
    "stormConfigFile": "cassandraw-querlog-storm.yaml",
    "parallelismConfig": {
      "cassandraQueryLogStream": 1,
      "cassandraQueryLogExecutor*": 1
    }
  },
  "dataSourceConfig": {
    "topic": "cassandra_querylog_local",
    "zkConnection": "localhost:2181",
    "zkConnectionTimeoutMS": 15000,
    "consumerGroupId": "eagle.consumer",
    "fetchSize": 1048586,
    "deserializerClass": "org.apache.eagle.datastream.storm.JsonMessageDeserializer",
    "transactionZKServers": "localhost",
    "transactionZKPort": 2181,
    "transactionZKRoot": "/consumers",
    "transactionStateUpdateMS": 2000
  },
  "alertExecutorConfigs": {
    "cassandraQueryLogExecutor": {
      "parallelism": 1,
      "partitioner": "org.apache.eagle.policy.DefaultPolicyPartitioner"
      "needValidation": "true"
    }
  },
  "eagleProps": {
    "site": "sandbox",
    "application": "cassandraQueryLog",
    "dataJoinPollIntervalSec": 30,
    "mailHost": "mailHost.com",
    "mailSmtpPort": "25",
    "mailDebug": "true",
    "balancePartitionEnabled": true,
    #"partitionRefreshIntervalInMin" : 60,
    #"kafkaStatisticRangeInMin" : 60,
    "eagleService": {
      "host": "localhost",
      "port": 9099,
      "username": "admin",
      "password": "secret"
    }
    "readHdfsUserCommandPatternFrom": "file"
  },
  "dynamicConfigSource": {
    "enabled": true,
    "initDelayMillis": 0,
    "delayMillis": 30000
  }
}