apiVersion: v1
kind: ConfigMap
metadata:
  name: gatus
  namespace: kube-system
data:
  config.yaml: |
    metrics: true
    endpoints:
      - name: website
        url: https://twin.sh/health
        interval: 5m
        conditions:
          - "[STATUS] == 200"
          - "[BODY].status == UP"

      - name: github
        url: https://api.github.com/healthz
        interval: 5m
        conditions:
          - "[STATUS] == 200"

      - name: cat-fact
        url: "https://cat-fact.herokuapp.com/facts/random"
        interval: 5m
        conditions:
          - "[STATUS] == 200"
          - "[BODY].deleted == false"
          - "len([BODY].text) > 0"
          - "[BODY].text == pat(*cat*)"
          - "[STATUS] == pat(2*)"
          - "[CONNECTED] == true"

      - name: example
        url: https://example.com/
        conditions:
          - "[STATUS] == 200"
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: gatus
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gatus
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gatus
  template:
    metadata:
      name: gatus
      namespace: kube-system
      labels:
        app: gatus
    spec:
      serviceAccountName: gatus
      terminationGracePeriodSeconds: 5
      containers:
        - image: twinproduction/gatus
          imagePullPolicy: IfNotPresent
          name: gatus
          ports:
            - containerPort: 8080
              name: http
              protocol: TCP
          resources:
            limits:
              cpu: 250m
              memory: 100M
            requests:
              cpu: 50m
              memory: 30M
          readinessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          livenessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 5
          volumeMounts:
            - mountPath: /config
              name: gatus-config
      volumes:
        - configMap:
            name: gatus
          name: gatus-config
---
apiVersion: v1
kind: Service
metadata:
  name: gatus
  namespace: kube-system
spec:
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: gatus