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

# Specify the parameters enclosed in angle brackets.
# Run the follows command to get help for details of configuration:
# java -jar billing-1.0.jar --help conf
# java -jar billing-1.0.jar --help {adapter | parser | filter | logappender} [name]

billingEnabled: true

host: localhost
port: 27017
username: admin
password: <MONGODB_PASSWORD>
database: dlabdb

scheduler:
# Schedule is comma separated values of time in format hh[:mm[:ss]]. hh - in the 24-hour clock, at 8:15PM is 20:15.
  schedule: 0:00, 3:00, 6:00, 9:00, 12:00, 15:00, 18:00, 21:00

# Adapter for reading source data. Known types: file, s3file
adapterIn:
  - type: s3file
    bucket: <BILLING_BUCKET_NAME>
    path: <REPORT_PATH>
    awsJobEnabled: <AWS_JOB_ENABLED>
    accountId: <ACCOUNT_ID>
    accessKeyId: <ACCESS_KEY_ID>
    secretAccessKey: <SECRET_ACCESS_KEY>

# Adapter for writing converted data. Known types: console, file, s3file, mongodb
adapterOut:
  - type: mongodlab
    host: localhost
    port: 27017
    username: admin
    password: <MONGODB_PASSWORD>
    database: dlabdb
#    bufferSize: 10000
    upsert: true

# Filter for source and converted data.
filter:
  - type: aws
    currencyCode: USD
    columnDlabTag: <CONF_BILLING_TAG>
    serviceBaseName: <CONF_SERVICE_BASE_NAME>


# Parser of source data to common format.
parser:
  - type: csv
    headerLineNo: 1
    skipLines: 1
    columnMapping: >-
      dlab_id=<DLAB_ID>;usage_date=<USAGE_DATE>;product=<PRODUCT>;
      usage_type=<USAGE_TYPE>;usage=<USAGE>;cost=<COST>;
      resource_id=<RESOURCE_ID>;tags=<TAGS>
    aggregate: day


# Logging configuration.
logging:
 # Default logging level
  level: INFO
  # Logging levels for appenders.
  loggers:
    com.epam: DEBUG
    org.apache.http: WARN
    org.mongodb.driver: WARN
    org.hibernate: WARN
 # Logging appenders
  appenders:
    #- type: console
    - type: file
      currentLogFilename: /var/opt/dlab/log/ssn/billing.log
      archive: true
      archivedLogFilenamePattern: /var/opt/dlab/log/ssn/billing-%d{yyyy-MM-dd}.log.gz
      archivedFileCount: 10
