# Service level objectives in the OpenSLO shape. All targets are invented.
apiVersion: openslo/v1
kind: SLO
metadata:
  name: checkout-availability
  displayName: Checkout availability
  labels:
    service: checkout-api
    team: shop
spec:
  description: >-
    Successful checkout requests as a fraction of all checkout requests,
    measured at the load balancer over a rolling 28 day window.
  service: checkout-api
  indicator:
    metadata:
      name: checkout-success-ratio
    spec:
      ratioMetric:
        counter: true
        good:
          metricSource:
            type: Prometheus
            spec:
              query: sum(rate(http_requests_total{service="checkout-api",status!~"5.."}[5m]))
        total:
          metricSource:
            type: Prometheus
            spec:
              query: sum(rate(http_requests_total{service="checkout-api"}[5m]))
  timeWindow:
    - duration: 28d
      isRolling: true
  budgetingMethod: Occurrences
  objectives:
    - displayName: 99.9% of checkout requests succeed
      target: 0.999
---
apiVersion: openslo/v1
kind: SLO
metadata:
  name: checkout-latency
  labels:
    service: checkout-api
    team: shop
spec:
  service: checkout-api
  indicator:
    metadata:
      name: checkout-latency-ratio
    spec:
      ratioMetric:
        counter: true
        good:
          metricSource:
            type: Prometheus
            spec:
              query: sum(rate(http_request_duration_seconds_bucket{service="checkout-api",le="1"}[5m]))
        total:
          metricSource:
            type: Prometheus
            spec:
              query: sum(rate(http_request_duration_seconds_count{service="checkout-api"}[5m]))
  timeWindow:
    - duration: 28d
      isRolling: true
  budgetingMethod: Occurrences
  objectives:
    - displayName: 99% of checkout requests finish within one second
      target: 0.99
