# Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
#
# Licensed 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.

apiVersion: v1
kind: ConfigMap
metadata:
  name: wso2am-analytics-worker-conf
  namespace : wso2-system
data:
  deployment.yaml: |-
    ################################################################################
    #   Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved
    #
    #   Licensed 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.
    ################################################################################

      # Carbon Configuration Parameters
    wso2.carbon:
      type: wso2-apim-analytics
        # value to uniquely identify a server
      id: ${NODE_ID}
        # server name
      name: WSO2 API Manager Analytics Server
        # ports used by this server
      ports:
          # port offset
        offset: 1

    wso2.transport.http:
      transportProperties:
        -
          name: "server.bootstrap.socket.timeout"
          value: 60
        -
          name: "client.bootstrap.socket.timeout"
          value: 60
        -
          name: "latency.metrics.enabled"
          value: true

      listenerConfigurations:
        -
          id: "default"
          host: "0.0.0.0"
          port: 9090
        -
          id: "msf4j-https"
          host: "0.0.0.0"
          port: 9443
          scheme: https
          keyStoreFile: "${carbon.home}/resources/security/wso2carbon.jks"
          keyStorePassword: wso2carbon
          certPass: wso2carbon

      senderConfigurations:
        -
          id: "http-sender"

    siddhi.stores.query.api:
      transportProperties:
        -
          name: "server.bootstrap.socket.timeout"
          value: 60
        -
          name: "client.bootstrap.socket.timeout"
          value: 60
        -
          name: "latency.metrics.enabled"
          value: true

      listenerConfigurations:
        -
          id: "default"
          host: "0.0.0.0"
          port: 7071
        -
          id: "msf4j-https"
          host: "0.0.0.0"
          port: 7444
          scheme: https
          keyStoreFile: "${carbon.home}/resources/security/wso2carbon.jks"
          keyStorePassword: wso2carbon
          certPass: wso2carbon

      # Configuration used for the databridge communication
    databridge.config:
        # No of worker threads to consume events
        # THIS IS A MANDATORY FIELD
      workerThreads: 10
        # Maximum amount of messages that can be queued internally in MB
        # THIS IS A MANDATORY FIELD
      maxEventBufferCapacity: 10000000
        # Queue size; the maximum number of events that can be stored in the queue
        # THIS IS A MANDATORY FIELD
      eventBufferSize: 2000
        # Keystore file path
        # THIS IS A MANDATORY FIELD
      keyStoreLocation : ${sys:carbon.home}/resources/security/wso2carbon.jks
        # Keystore password
        # THIS IS A MANDATORY FIELD
      keyStorePassword : wso2carbon
        # Session Timeout value in mins
        # THIS IS A MANDATORY FIELD
      clientTimeoutMin: 30
        # Data receiver configurations
        # THIS IS A MANDATORY FIELD
      dataReceivers:
      -
          # Data receiver configuration
        dataReceiver:
            # Data receiver type
            # THIS IS A MANDATORY FIELD
          type: Thrift
            # Data receiver properties
          properties:
            tcpPort: '7611'
            sslPort: '7711'

      -
          # Data receiver configuration
        dataReceiver:
            # Data receiver type
            # THIS IS A MANDATORY FIELD
          type: Binary
            # Data receiver properties
          properties:
            tcpPort: '9611'
            sslPort: '9711'
            tcpReceiverThreadPoolSize: '100'
            sslReceiverThreadPoolSize: '100'
            hostName: 0.0.0.0

      # Configuration of the Data Agents - to publish events through databridge
    data.agent.config:
        # Data agent configurations
        # THIS IS A MANDATORY FIELD
      agents:
      -
          # Data agent configuration
        agentConfiguration:
            # Data agent name
            # THIS IS A MANDATORY FIELD
          name: Thrift
            # Data endpoint class
            # THIS IS A MANDATORY FIELD
          dataEndpointClass: org.wso2.carbon.databridge.agent.endpoint.thrift.ThriftDataEndpoint
            # Data publisher strategy
          publishingStrategy: async
            # Trust store path
          trustStorePath: '${sys:carbon.home}/resources/security/client-truststore.jks'
            # Trust store password
          trustStorePassword: 'wso2carbon'
            # Queue Size
          queueSize: 32768
            # Batch Size
          batchSize: 200
            # Core pool size
          corePoolSize: 1
            # Socket timeout in milliseconds
          socketTimeoutMS: 30000
            # Maximum pool size
          maxPoolSize: 1
            # Keep alive time in pool
          keepAliveTimeInPool: 20
            # Reconnection interval
          reconnectionInterval: 30
            # Max transport pool size
          maxTransportPoolSize: 250
            # Max idle connections
          maxIdleConnections: 250
            # Eviction time interval
          evictionTimePeriod: 5500
            # Min idle time in pool
          minIdleTimeInPool: 5000
            # Secure max transport pool size
          secureMaxTransportPoolSize: 250
            # Secure max idle connections
          secureMaxIdleConnections: 250
            # secure eviction time period
          secureEvictionTimePeriod: 5500
            # Secure min idle time in pool
          secureMinIdleTimeInPool: 5000
            # SSL enabled protocols
          sslEnabledProtocols: TLSv1.1,TLSv1.2
            # Ciphers
          ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
      -
          # Data agent configuration
        agentConfiguration:
            # Data agent name
            # THIS IS A MANDATORY FIELD
          name: Binary
            # Data endpoint class
            # THIS IS A MANDATORY FIELD
          dataEndpointClass: org.wso2.carbon.databridge.agent.endpoint.binary.BinaryDataEndpoint
            # Data publisher strategy
          publishingStrategy: async
            # Trust store path
          trustStorePath: '${sys:carbon.home}/resources/security/client-truststore.jks'
            # Trust store password
          trustStorePassword: 'wso2carbon'
            # Queue Size
          queueSize: 32768
            # Batch Size
          batchSize: 200
            # Core pool size
          corePoolSize: 1
            # Socket timeout in milliseconds
          socketTimeoutMS: 30000
            # Maximum pool size
          maxPoolSize: 1
            # Keep alive time in pool
          keepAliveTimeInPool: 20
            # Reconnection interval
          reconnectionInterval: 30
            # Max transport pool size
          maxTransportPoolSize: 250
            # Max idle connections
          maxIdleConnections: 250
            # Eviction time interval
          evictionTimePeriod: 5500
            # Min idle time in pool
          minIdleTimeInPool: 5000
            # Secure max transport pool size
          secureMaxTransportPoolSize: 250
            # Secure max idle connections
          secureMaxIdleConnections: 250
            # secure eviction time period
          secureEvictionTimePeriod: 5500
            # Secure min idle time in pool
          secureMinIdleTimeInPool: 5000
            # SSL enabled protocols
          sslEnabledProtocols: TLSv1.1,TLSv1.2
            # Ciphers
          ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

    # This is the main configuration for metrics
    wso2.metrics:
      # Enable Metrics
      enabled: false
      reporting:
        console:
          - # The name for the Console Reporter
            name: Console

            # Enable Console Reporter
            enabled: false

            # Polling Period in seconds.
            # This is the period for polling metrics from the metric registry and printing in the console
            pollingPeriod: 5

    wso2.metrics.jdbc:
      # Data Source Configurations for JDBC Reporters
      dataSource:
        # Default Data Source Configuration
        - &JDBC01
          # JNDI name of the data source to be used by the JDBC Reporter.
          # This data source should be defined in a *-datasources.xml file in conf/datasources directory.
          dataSourceName: java:comp/env/jdbc/WSO2MetricsDB
          # Schedule regular deletion of metrics data older than a set number of days.
          # It is recommended that you enable this job to ensure your metrics tables do not get extremely large.
          # Deleting data older than seven days should be sufficient.
          scheduledCleanup:
            # Enable scheduled cleanup to delete Metrics data in the database.
            enabled: true

            # The scheduled job will cleanup all data older than the specified days
            daysToKeep: 3

            # This is the period for each cleanup operation in seconds.
            scheduledCleanupPeriod: 86400

      # The JDBC Reporter is in the Metrics JDBC Core feature
      reporting:
        # The JDBC Reporter configurations will be ignored if the Metrics JDBC Core feature is not available in runtime
        jdbc:
          - # The name for the JDBC Reporter
            name: JDBC

            # Enable JDBC Reporter
            enabled: true

            # Source of Metrics, which will be used to identify each metric in database -->
            # Commented to use the hostname by default
            # source: Carbon

            # Alias referring to the Data Source configuration
            dataSource: *JDBC01

            # Polling Period in seconds.
            # This is the period for polling metrics from the metric registry and updating the database with the values
            pollingPeriod: 60

      # Deployment configuration parameters
    wso2.artifact.deployment:
        # Scheduler update interval
      updateInterval: 5

      # Periodic Persistence Configuration
    state.persistence:
      enabled: true
      intervalInMin: 1
      revisionsToKeep: 2
      persistenceStore: org.wso2.carbon.streaming.integrator.core.persistence.DBPersistenceStore
      config:
        datasource: PERSISTENCE_DB   # A datasource with this name should be defined in wso2.datasources namespace
        table: PERSISTENCE_TABLE

      # Secure Vault Configuration
    wso2.securevault:
      secretRepository:
        type: org.wso2.carbon.secvault.repository.DefaultSecretRepository
        parameters:
          privateKeyAlias: wso2carbon
          keystoreLocation: ${sys:carbon.home}/resources/security/securevault.jks
          secretPropertiesFile: ${sys:carbon.home}/conf/${sys:wso2.runtime}/secrets.properties
      masterKeyReader:
        type: org.wso2.carbon.secvault.reader.DefaultMasterKeyReader
        parameters:
          masterKeyReaderFile: ${sys:carbon.home}/conf/${sys:wso2.runtime}/master-keys.yaml

      # Datasource Configurations
    wso2.datasources:
      dataSources:
        # carbon metrics data source
        - name: WSO2_METRICS_DB
          description: The datasource used for dashboard feature
          jndiConfig:
            name: jdbc/WSO2MetricsDB
          definition:
            type: RDBMS
            configuration:
              jdbcUrl: 'jdbc:h2:${sys:carbon.home}/wso2/dashboard/database/metrics;AUTO_SERVER=TRUE'
              username: wso2carbon
              password: wso2carbon
              driverClassName: org.h2.Driver
              maxPoolSize: 30
              idleTimeout: 60000
              connectionTestQuery: SELECT 1
              validationTimeout: 30000
              isAutoCommit: false

        - name: WSO2_PERMISSIONS_DB
          description: The datasource used for permission feature
          jndiConfig:
            name: jdbc/PERMISSION_DB
            useJndiReference: true
          definition:
            type: RDBMS
            configuration:
              jdbcUrl: 'jdbc:mysql://mysql-svc:3306/PERMISSION_DB?useSSL=false'
              username: wso2carbon
              password: wso2carbon
              driverClassName: com.mysql.cj.jdbc.Driver
              maxPoolSize: 10
              idleTimeout: 60000
              connectionTestQuery: SELECT 1
              validationTimeout: 30000
              isAutoCommit: false

        - name: GEO_LOCATION_DATA
          description: "The data source used for geo location database"
          jndiConfig:
            name: jdbc/GEO_LOCATION_DATA
          definition:
            type: RDBMS
            configuration:
              jdbcUrl: 'jdbc:h2:${sys:carbon.home}/wso2/worker/database/GEO_LOCATION_DATA;AUTO_SERVER=TRUE'
              username: wso2carbon
              password: wso2carbon
              driverClassName: org.h2.Driver
              maxPoolSize: 50
              idleTimeout: 60000
              validationTimeout: 30000
              isAutoCommit: false

        - name: APIM_ANALYTICS_DB
          description: "The datasource used for APIM statistics aggregated data."
          jndiConfig:
            name: jdbc/APIM_ANALYTICS_DB
          definition:
            type: RDBMS
            configuration:
              jdbcUrl: 'jdbc:mysql://mysql-svc:3306/APIM_ANALYTICS_DB?useSSL=false'
              username: wso2carbon
              password: wso2carbon
              driverClassName: com.mysql.cj.jdbc.Driver
              maxPoolSize: 50
              idleTimeout: 60000
              connectionTestQuery: SELECT 1
              validationTimeout: 30000
              isAutoCommit: false

        -
          name: WSO2_CLUSTER_DB
          description: "The datasource used by cluster coordinators in HA deployment"
          jndiConfig:
            name: jdbc/WSO2_CLUSTER_DB
          definition:
            type: RDBMS
            configuration:
              connectionTestQuery: "SELECT 1"
              driverClassName: com.mysql.cj.jdbc.Driver
              idleTimeout: 60000
              isAutoCommit: false
              jdbcUrl: "jdbc:mysql://mysql-svc:3306/WSO2_CLUSTER_DB?useSSL=false"
              maxPoolSize: 50
              password: wso2carbon
              username: wso2carbon
              validationTimeout: 30000

        -
          name: PERSISTENCE_DB
          description: "Datasource used for persistence"
          jndiConfig:
            name: jdbc/PERSISTENCE_DB
          definition:
            type: RDBMS
            configuration:
              connectionTestQuery: "SELECT 1"
              driverClassName: com.mysql.cj.jdbc.Driver
              idleTimeout: 60000
              isAutoCommit: false
              jdbcUrl: "jdbc:mysql://mysql-svc:3306/PERSISTENCE_DB?useSSL=false"
              maxPoolSize: 50
              password: wso2carbon
              username: wso2carbon
              validationTimeout: 30000

    siddhi:
      # properties:
      #  partitionById: true
      #  shardId: 1
      refs:
        - ref:
            name: 'grpcSource'
            type: 'grpc'
            properties:
              receiver.url : grpc://localhost:9806/org.wso2.analytics.mgw.grpc.service.AnalyticsSendService/sendAnalytics
      extensions:
        -
          extension:
            name: 'findCountryFromIP'
            namespace: 'geo'
            properties:
              geoLocationResolverClass: org.wso2.extension.siddhi.execution.geo.internal.impl.DefaultDBBasedGeoLocationResolver
              isCacheEnabled: true
              cacheSize: 10000
              isPersistInDatabase: true
              datasource: GEO_LOCATION_DATA
        -
          extension:
            name: 'findCityFromIP'
            namespace: 'geo'
            properties:
              geoLocationResolverClass: org.wso2.extension.siddhi.execution.geo.internal.impl.DefaultDBBasedGeoLocationResolver
              isCacheEnabled: true
              cacheSize: 10000
              isPersistInDatabase: true
              datasource: GEO_LOCATION_DATA
       #Enabling GRPC Service with an Extension
        -
          extension:
            name: 'grpc'
            namespace: 'source'
            properties:
              keyStoreFile : ${sys:carbon.home}/resources/security/wso2carbon.jks
              keyStorePassword : wso2carbon
              keyStoreAlgorithm : SunX509
              trustStoreFile : ${sys:carbon.home}/resources/security/client-truststore.jks
              trustStorePassword : wso2carbon
              trustStoreAlgorithm : SunX509
        # Provides the regular expression collection to parse the user-agent header
        -
          extension:
            name: 'getUserAgentProperty'
            namespace: 'env'
            properties:
              regexFilePath : ${sys:carbon.home}/conf/worker/regexes.yaml

      # Cluster Configuration
    cluster.config:
      enabled: true
      groupId:  sp
      coordinationStrategyClass: org.wso2.carbon.cluster.coordinator.rdbms.RDBMSCoordinationStrategy
      strategyConfig:
        datasource: WSO2_CLUSTER_DB
        heartbeatInterval: 5000
        heartbeatMaxRetry: 5
        eventPollingInterval: 5000

    # Authentication configuration
    auth.configs:
      type: 'local'        # Type of the IdP client used
      userManager:
        adminRole: admin   # Admin role which is granted all permissions
        userStore:         # User store
          users:
           -
             user:
               username: admin
               password: YWRtaW4=
               roles: 1
          roles:
           -
             role:
               id: 1
               displayName: admin

      # Configuration to enable apim alerts
    #analytics.solutions:
    #  APIM-alerts.enabled: true

    # Sample of deployment.config for Two node HA
    deployment.config:
      type: ha
      passiveNodeDetailsWaitTimeOutMillis: 300000
      passiveNodeDetailsRetrySleepTimeMillis: 500
      eventByteBufferQueueCapacity: 20000
      byteBufferExtractorThreadPoolSize: 5
      eventSyncServer:
        host: ${NODE_IP}
        port: 9893
        advertisedHost: ${NODE_IP}
        advertisedPort: 9893
        bossThreads: 10
        workerThreads: 10
      eventSyncClientPool:
        maxActive: 10
        maxTotal: 10
        maxIdle: 10
        maxWait: 60000
        minEvictableIdleTimeMillis: 120000

      # Sample of deployment.config for Distributed deployment
    #deployment.config:
    #  type: distributed
    #  httpsInterface:
    #    host: 192.168.1.3
    #    port: 9443
    #    username: admin
    #    password: admin
    #  leaderRetryInterval: 10000
    #  resourceManagers:
    #    - host: 192.168.1.1
    #      port: 9543
    #      username: admin
    #      password: admin
    #    - host: 192.168.1.2
    #      port: 9543
    #      username: admin
    #      password: admin
