# 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.
#
{{- if .Values.features.rover.enabled}}

apiVersion: v1
kind: ConfigMap
metadata:
  name: profiling-config
  namespace: {{ .Values.sampleServices.namespace }}
  labels:
    app: profiling-config
data:
  network-profiling-sampling.yaml: |
    samplings:
      - min_duration: 0
        when_4xx: true
        when_5xx: true
        setting:
          require_request: true
          require_response: true
---

apiVersion: batch/v1
kind: CronJob
metadata:
  name: ebpf-profiling-trgigger
  namespace: {{ .Values.sampleServices.namespace }}
spec:
  schedule: "10 */2 * * *"
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "false"
        spec:
          containers:
            - name: ebpf-profiling-trigger
              image: "{{ .Values.features.rover.swctl.image }}"
              imagePullPolicy: IfNotPresent
              command:
                - /bin/sh
                - -c
                - >
                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                    --service-name mesh-svr::recommendation --labels mesh-envoy --duration=9m --target-type ON_CPU;
                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                    --service-name mesh-svr::app --labels mesh-envoy --duration=9m --target-type ON_CPU;
                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                    --service-name mesh-svr::songs --labels mesh-envoy --duration=9m --target-type ON_CPU;
                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                    --service-name mesh-svr::gateway --labels mesh-envoy --duration=9m --target-type ON_CPU;

                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create fixed \
                    --service-name mesh-svr::songs --labels mesh-envoy --duration=9m --target-type OFF_CPU;

                  apk update && apk add yq;
                  /swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql profiling ebpf create network \
                    --sampling-config=/profiling/network-profiling-sampling.yaml \
                    --service-name=mesh-svr::recommendation \
                    --instance-name=$(/swctl --base-url={{ template "skywalking.oap.address.http" . }}/graphql instance ls --service-name mesh-svr::recommendation|yq e '.[0].name' -);
              volumeMounts:
                - name: profiling-config
                  mountPath: /profiling
          restartPolicy: Never
          volumes:
            - name: profiling-config
              configMap:
                name: profiling-config
{{- end }}
