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

// Defines the default configuration for Fey
// User can override this configuration by creating a configuration file
// with the same schema and passing it as a argument to Fey.
fey-global-configuration{

  // If check point is not enabled Fey won't check out the last state
  // and will not be able to recovery properly in case of a failure (The json files
  // will also not be update to add the extension .processed
  // Disabling the checkpoint is recommended during a development phase
  // or when the Orchestration will not change frequently
  enable-checkpoint = true

  // Directory where fey is going to store its checkpoint
  // Only the latest running Orchestration JSONs will be saved, no message will be checkpointed.
  // It will not be used if "enable-checkpoint" is false
  checkpoint-directory = "/tmp/fey/checkpoint"

  // Directory that will be watched by Fey in order to get the Orchestration JSON files
  // This directory must exist on your computer, Fey will not create it in case it does not
  // and a exception will be thrown by the WatchService actor
  json-repository = ${HOME}"/feyJSONRepo"

  // Defines the file extension that will be processed by Fey.
  // Files that does not have this extension will be ignored.
  json-extension = ".json"

  // Directory where Fey will be loading the Performers from.
  // This directory must exist on your computer, as well as all of the
  // jars that are being specified in the Orchestration JSON
  jar-repository = ${HOME}"/feyJarRepo"

  // Configuration for downloading performers jar at runtime
  // using the JSON Location property
  dynamic-jar-population{
    // Directory where Fey will download the jars that the location is
    // specified in the JSON
    downloaded-repository = ${HOME}"/.fey/jars"

    // If enabled, Fey will clean up the jar-downloaded-repository everytime
    // it starts, forcing the jars to be downloaded again
    // If false, Fey will only download jars that are not in jar-downloaded-repository
    force-pull = false
  }

  // Fey Log Level
  log-level = "DEBUG"

  // Defines where the log will be appended to
  // Options:
  // FILE -> Appends log the a rolling file at ~/.fey/logs/fey_core.log
  // STDOUT -> Appends log to STDOUT
  // FILE_STDOUT -> Appends log to STDOUT as well as to FILE
  log-appender = "STDOUT"

  //Router configuration when using auto scaling
  auto-scale{
    //volume of messages to trigger resize
    messages-per-resize = 500
  }

  // Holds all the Akka dispatchers configured by the user.
  // These dispatchers will be given to Fey ActorSystem and will be available
  // to be used by the performers. To do so, just specify the property "dispatcher"
  // on the performer json using the path of the dispatcher inside the custom-dispatcher
  custom-dispatchers{
    // No default custom implementations
  }

  // Configure monitoring options. If enabled the actors events will be stored
  // together with other information, and the user should be able to visualize
  // using the rest-api.
  // Types:
  //    COMPLETE: Keeps track of all the events for all of the actors. Backed by a Trie data structure
  //    SIMPLE: Keeps track only of the latest event for each actor. Backed by HashMap
  monitoring{
    enable = true,
    type = "COMPLETE"
  }
  port = 16666
  urlPath = "127.0.0.1"
}

// Fey akka configuration. Can not be overwritten by user
akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "DEBUG"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"

  fey-dispatchers {
    control-aware-dispatcher {
      mailbox-type = "akka.dispatch.UnboundedControlAwareMailbox"
    }
  }
}

//Configuration for rest Api .

play.crypto.secret = "apacheiota"
play.crypto.secret = ${?APPLICATION_SECRET}