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

# Authentication info

# Explicit azure authentication parameters
clientId: <CLIENT_ID>
clientSecret: <CLIENT_SECRET>
tenantId: <TENANT_ID>
subscriptionId: <SUBSCRIPTION_ID>

# Contains authentication info (clientId, clientSecret, tenantId, subscriptionId) received after Azure CLI authentication
# Overrides explicit azure authentication parameters above
authenticationFile: <AUTHENTICATION_FILE>

# Billing configuration for RateCard API. For more details please see https://msdn.microsoft.com/en-us/library/mt219004.aspx
offerNumber: <OFFER_NUMBER>
currency: <CURRENCY>
locale: <LOCALE>
regionInfo: <REGION_INFO>

# Azure provides with aggregated data by date. Scheduler tries to retrieve data every <period> with <initialDelay> from
# application startup in minutes.
# Scheduler retrieves data only for the past period of time from midnight of start day to midnight of end date.
# Scheduler does not retrieve data for the current date
initialDelay: 10
period: 60

billingEnabled: false

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

ssnStorageAccountTagName: <AZURE_SSN_STORAGE_ACCOUNT_TAG>
sharedStorageAccountTagName: <AZURE_SHARED_STORAGE_ACCOUNT_TAG>
datalakeTagName: <AZURE_DATALAKE_TAG>

# 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