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

# A configuration file for alertmanager.
# Can be reloaded at runtime by sending a SIGHUP signal to the alertmanager
# process or sending a HTTP POST request to the /reload endpoint.

global:
  resolve_timeout: 7d

route:
  receiver: 'default'
  group_by: ['alertname']
  group_wait: 0s
  group_interval: 3d
  repeat_interval: 3d
  routes:
    - match_re:
        job: 'beam'
      receiver: 'emails-and-slack'
      group_by: ['test']

receivers:
  - name: 'default'
  # TODO: Add details about emails-and-slack receiver
  - name: 'emails-and-slack'
