# *****************************************************************************
#
# 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: MONGO_HOST
port: 27017
username: admin
password: MONGO_PASSWORD
database: dlabdb

# 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: MONGO_HOST
    port: 27017
    username: admin
    password: MONGO_PASSWORD
    database: dlabdb
#    bufferSize: 10000
    upsert: true
    serviceBaseName: SERVICE_BASE_NAME

# Filter for source and converted data.
filter:
  - type: aws
    currencyCode: USD
    columnDlabTag: CONF_BILLING_TAG
    serviceBaseName: 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