{#
 # 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.
 #}
{
  "input":[
    {
      "type":"logsearch_app",
      "rowtype":"service",
      "path":"{{logsearch_log_dir}}/logsearch.json"
    },
    {
      "type":"logsearch_feeder",
      "rowtype":"service",
      "path":"{{logfeeder_log_dir}}/logsearch-logfeeder.json"
    },
    {
      "type":"logsearch_perf",
      "rowtype":"service",
      "path":"{{logsearch_log_dir}}/logsearch-performance.json"
    }
  ],
  "filter":[
    {
      "filter":"json",
      "conditions":{
        "fields":{
          "type":[
            "logsearch_app",
            "logsearch_feeder",
            "logsearch_perf"
          ]

        }

      }

    }

  ]

}