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

# The command `dashboard global` supports displaying three kinds of data:
# `global metrics`, `global response latency`, `Global heat map`.
# If you don't want to display an item, you can just delete or comment its whole configuration below.
# Generally, there is no need to modify properties unless there is a explanatory comment.

# Set the style for the dashboard.
style:
  # Xterm colors number, an integer from 0 to 255.
  # Refer to https://jonasjacek.github.io/colors/ to change to other colors.
  buttonColor: 220
  titleColor: 9
  gaugeColor: 13

# The global metrics, there are four kinds of metrics displaying by default.
# Each metric will occupy one column to display.
# Similarly, you can delete or comment corresponding whole configuration to change the metrics to be displayed.
metrics:
  - condition:
      name: "service_cpm"
      normal: true
      scope: "Service"
      # You can modify `topN` to change the amount of results to be displayed, the same below.
      topN: 10
      # You can modify `order` to `ASC` to display the results in ascending order, the same below.
      order: "DES"
    title: " Service Load (calls/min) "

  - condition:
      name: "service_resp_time"
      normal: true
      scope: "Service"
      topN: 10
      order: "DES"
    title: "    Slow Services (ms)    "

  - condition:
      name: "service_apdex"
      normal: true
      scope: "Service"
      topN: 10
      order: "ASC"
    title: "Un-Health Services (Apdex)"
    # The returned apdex data is integer, like '3115',
    # need to be converted into a number between 0 and 1.
    aggregation: "/"
    aggregationNum: 10000

  - condition:
      name: "endpoint_avg"
      normal: true
      scope: "Endpoint"
      topN: 10
      order: "DES"
    title: "    Slow Endpoints (ms)   "
