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

apiVersion: v1
kind: ConfigMap
metadata:
  name: oap-config
  namespace: skywalking
data:
  application.yml: |-
    # Generated by 'docker-entrypoint.sh'
    cluster:
      standalone:
    core:
      default:
        # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
        # Receiver: Receive agent data, Level 1 aggregate
        # Aggregator: Level 2 aggregate
        role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
        restHost: ${SW_CORE_REST_HOST:0.0.0.0}
        restPort: ${SW_CORE_REST_PORT:12800}
        restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
        gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
        gRPCPort: ${SW_CORE_GRPC_PORT:11800}
        downsampling:
        - Hour
        - Day
        - Month
        # Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted.
        enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # Turn it off then automatically metrics data delete will be close.
        recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90} # Unit is minute
        minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90} # Unit is minute
        hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36} # Unit is hour
        dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45} # Unit is day
        monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18} # Unit is month
    storage:
      elasticsearch:
        nameSpace: ${SW_NAMESPACE:""}
        clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:10.1.1.99:9200}
        user: ${SW_ES_USER:""}
        password: ${SW_ES_PASSWORD:""}
        indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
        indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
        # Those data TTL settings will override the same settings in core module.
        recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
        otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
        monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month
        # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
        bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000} # Execute the bulk every 2000 requests
        bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20} # flush the bulk every 20mb
        flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
        concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
        metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
        segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
    receiver-sharing-server:
      default:
    receiver-register:
      default:
    receiver-trace:
      default:
        bufferPath: ${SW_RECEIVER_BUFFER_PATH:../trace-buffer/}  # Path to trace buffer files, suggest to use absolute path
        bufferOffsetMaxFileSize: ${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
        bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
        bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
        sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
        slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.
    receiver-jvm:
      default:
    receiver-clr:
      default:
    service-mesh:
      default:
        bufferPath: ${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/}  # Path to trace buffer files, suggest to use absolute path
        bufferOffsetMaxFileSize: ${SW_SERVICE_MESH_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
        bufferDataMaxFileSize: ${SW_SERVICE_MESH_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
        bufferFileCleanWhenRestart: ${SW_SERVICE_MESH_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
    istio-telemetry:
      default:
    query:
      graphql:
        path: ${SW_QUERY_GRAPHQL_PATH:/graphql}
    alarm:
      default:
    telemetry:
      prometheus:
        host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
        port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
    configuration:
      none:
    envoy-metric:

  log4j2.xml: |-
    <Configuration status="info">
        <Properties>
            <Property name="log-path">${sys:oap.logDir}</Property>
        </Properties>
        <Appenders>
            <RollingFile name="RollingFile" fileName="${log-path}/skywalking-oap-server.log"
                         filePattern="${log-path}/skywalking-oap-server-%d{yyyy-MM-dd}-%i.log" >
                <PatternLayout>
                    <pattern>%d - %c - %L [%t] %-5p %x - %m%n</pattern>
                </PatternLayout>
                <Policies>
                    <SizeBasedTriggeringPolicy size="102400KB" />
                </Policies>
                <DefaultRolloverStrategy max="30"/>
            </RollingFile>
        </Appenders>
        <Loggers>
            <logger name="org.eclipse.jetty" level="INFO"/>
            <logger name="org.apache.zookeeper" level="INFO"/>
            <logger name="io.grpc.netty" level="INFO"/>
            <Root level="info">
                <AppenderRef ref="RollingFile"/>
            </Root>
        </Loggers>
    </Configuration>

  alarm-settings.yml: |-
    # Sample alarm rules.
    rules:
      # Rule unique name, must be ended with `_rule`.
      service_resp_time_rule:
        metrics-name: service_resp_time
        op: ">"
        threshold: 1000
        period: 10
        count: 3
        silence-period: 5
        message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.
      service_sla_rule:
        # Metrics value need to be long, double or int
        metrics-name: service_sla
        op: "<"
        threshold: 8000
        # The length of time to evaluate the metrics
        period: 10
        # How many times after the metrics match the condition, will trigger alarm
        count: 2
        # How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.
        silence-period: 3
        message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutes
      service_p90_sla_rule:
        # Metrics value need to be long, double or int
        metrics-name: service_p90
        op: ">"
        threshold: 1000
        period: 10
        count: 3
        silence-period: 5
        message: 90% response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes
      service_instance_resp_time_rule:
        metrics-name: service_instance_resp_time
        op: ">"
        threshold: 1000
        period: 10
        count: 2
        silence-period: 5
        message: Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutes
    #  Active endpoint related metrics alarm will cost more memory than service and service instance metrics alarm.
    #  Because the number of endpoint is much more than service and instance.
    #
    #  endpoint_avg_rule:
    #    metrics-name: endpoint_avg
    #    op: ">"
    #    threshold: 1000
    #    period: 10
    #    count: 2
    #    silence-period: 5
    #    message: Response time of endpoint {name} is more than 1000ms in 2 minutes of last 10 minutes

    webhooks:
    #  - http://127.0.0.1/notify/
    #  - http://127.0.0.1/go-wechat/

  component-libraries.yml: |-
    Tomcat:
      id: 1
      languages: Java
    HttpClient:
      id: 2
      languages: Java,C#,Node.js
    Dubbo:
      id: 3
      languages: Java
    H2:
      id: 4
      languages: Java
    Mysql:
      id: 5
      languages: Java,C#,Node.js
    ORACLE:
      id: 6
      languages: Java
    Redis:
      id: 7
      languages: Java,C#,Node.js
    Motan:
      id: 8
      languages: Java
    MongoDB:
      id: 9
      languages: Java,C#,Node.js
    Resin:
      id: 10
      languages: Java
    Feign:
      id: 11
      languages: Java
    OKHttp:
      id: 12
      languages: Java
    SpringRestTemplate:
      id: 13
      languages: Java
    SpringMVC:
      id: 14
      languages: Java
    Struts2:
      id: 15
      languages: Java
    NutzMVC:
      id: 16
      languages: Java
    NutzHttp:
      id: 17
      languages: Java
    JettyClient:
      id: 18
      languages: Java
    JettyServer:
      id: 19
      languages: Java
    Memcached:
      id: 20
      languages: Java
    ShardingJDBC:
      id: 21
      languages: Java
    PostgreSQL:
      id: 22
      languages: Java,C#,Node.js
    GRPC:
      id: 23
      languages: Java
    ElasticJob:
      id: 24
      languages: Java
    RocketMQ:
      id: 25
      languages: Java
    httpasyncclient:
      id: 26
      languages: Java
    Kafka:
      id: 27
      languages: Java
    ServiceComb:
      id: 28
      languages: Java
    Hystrix:
      id: 29
      languages: Java
    Jedis:
      id: 30
      languages: Java
    SQLite:
      id: 31
      languages: Java,C#
    h2-jdbc-driver:
      id: 32
      languages: Java
    mysql-connector-java:
      id: 33
      languages: Java
    ojdbc:
      id: 34
      languages: Java
    Spymemcached:
      id: 35
      languages: Java
    Xmemcached:
      id: 36
      languages: Java
    postgresql-jdbc-driver:
      id: 37
      languages: Java
    rocketMQ-producer:
      id: 38
      languages: Java
    rocketMQ-consumer:
      id: 39
      languages: Java
    kafka-producer:
      id: 40
      languages: Java
    kafka-consumer:
      id: 41
      languages: Java
    mongodb-driver:
      id: 42
      languages: Java
    SOFARPC:
      id: 43
      languages: Java
    ActiveMQ:
      id: 44
      languages: Java
    activemq-producer:
      id: 45
      languages: Java
    activemq-consumer:
      id: 46
      languages: Java
    Elasticsearch:
      id: 47
      languages: Java
    transport-client:
      id: 48
      languages: Java
    http:
      id: 49
      languages: Java,C#,Node.js
    rpc:
      id: 50
      languages: Java,C#,Node.js
    RabbitMQ:
      id: 51
      languages: Java
    rabbitmq-producer:
      id: 52
      languages: Java
    rabbitmq-consumer:
      id: 53
      languages: Java
    Canal:
      id: 54
      languages: Java
    Gson:
      id: 55
      languages: Java
    Redisson:
      id: 56
      languages: Java
    Lettuce:
      id: 57
      languages: Java
    Zookeeper:
      id: 58
      languages: Java
    Vertx:
      id: 59
      languages: Java
    ShardingSphere:
      id: 60
      languages: Java
    spring-cloud-gateway:
      id: 61
      languages: Java
    RESTEasy:
      id: 62
      languages: Java
    SolrJ:
      id: 63
      languages: Java
    Solr:
      id: 64
      languages: Java


    # .NET/.NET Core components
    # [3000, 4000) for C#/.NET only
    AspNetCore:
      id: 3001
      languages: C#
    EntityFrameworkCore:
      id: 3002
      languages: C#
    SqlClient:
      id: 3003
      languages: C#
    CAP:
      id: 3004
      languages: C#
    StackExchange.Redis:
      id: 3005
      languages: C#
    SqlServer:
      id: 3006
      languages: C#
    Npgsql:
      id: 3007
      languages: C#
    MySqlConnector:
      id: 3008
      languages: C#
    EntityFrameworkCore.InMemory:
      id: 3009
      languages: C#
    EntityFrameworkCore.SqlServer:
      id: 3010
      languages: C#
    EntityFrameworkCore.Sqlite:
      id: 3011
      languages: C#
    Pomelo.EntityFrameworkCore.MySql:
      id: 3012
      languages: C#
    Npgsql.EntityFrameworkCore.PostgreSQL:
      id: 3013
      languages: C#
    InMemoryDatabase:
      id: 3014
      languages: C#
    AspNet:
      id: 3015
      languages: C#
    SmartSql:
      id: 3016
      languages: C#

    # NoeJS components
    # [4000, 5000) for Node.js agent
    HttpServer:
      id: 4001
      languages: Node.js
    express:
      id: 4002
      languages: Node.js
    Egg:
      id: 4003
      languages: Node.js
    Koa:
      id: 4004
      languages: Node.js

    # Component Server mapping defines the server display names of some components
    # e.g.
    # Jedis is a client library in Java for Redis server
    Component-Server-Mappings:
      mongodb-driver: MongoDB
      rocketMQ-producer: RocketMQ
      rocketMQ-consumer: RocketMQ
      kafka-producer: Kafka
      kafka-consumer: Kafka
      activemq-producer: ActiveMQ
      activemq-consumer: ActiveMQ
      rabbitmq-producer: RabbitMQ
      rabbitmq-consumer: RabbitMQ
      postgresql-jdbc-driver: PostgreSQL
      Xmemcached: Memcached
      Spymemcached: Memcached
      h2-jdbc-driver: H2
      mysql-connector-java: Mysql
      Jedis: Redis
      StackExchange.Redis: Redis
      Redisson: Redis
      Lettuce: Redis
      Zookeeper: Zookeeper
      SqlClient: SqlServer
      Npgsql: PostgreSQL
      MySqlConnector: Mysql
      EntityFrameworkCore.InMemory: InMemoryDatabase
      EntityFrameworkCore.SqlServer: SqlServer
      EntityFrameworkCore.Sqlite: SQLite
      Pomelo.EntityFrameworkCore.MySql: Mysql
      Npgsql.EntityFrameworkCore.PostgreSQL: PostgreSQL
      transport-client: Elasticsearch
      SolrJ: Solr