Compare commits

...

19 Commits

Author SHA1 Message Date
keptn 39ef816ea8 Updated resource 2025-01-21 16:33:22 +00:00
keptn 919fe580be Updated resource 2025-01-21 16:31:28 +00:00
keptn 7eb7f3978b Updated resource 2025-01-21 16:31:06 +00:00
keptn 54caa0648e Updated resource 2025-01-21 16:24:34 +00:00
keptn 5ad293a3a8 Updated resource 2025-01-21 15:57:07 +00:00
keptn 6c3f2f628b Updated resource 2025-01-21 15:48:08 +00:00
keptn 49dbd40ee0 Updated resource 2025-01-21 15:04:48 +00:00
keptn e0c11c3a57 Updated resource 2025-01-21 15:02:12 +00:00
keptn e390050c3d Updated resource 2025-01-21 14:59:48 +00:00
keptn 04f0d553b7 Updated resource 2025-01-21 14:59:15 +00:00
keptn 97e085afdc Updated resource 2025-01-21 14:09:12 +00:00
keptn e4d4a40b05 Updated resource 2025-01-21 14:09:09 +00:00
keptn c47dc52202 Updated resource 2025-01-21 14:09:06 +00:00
keptn 90a0d09b96 Updated resource 2025-01-21 14:09:03 +00:00
keptn 7563c3f4e2 Updated resource 2025-01-21 14:09:01 +00:00
keptn a9a9b0eb9e Updated resource 2025-01-21 14:08:58 +00:00
keptn 62e947bf60 Added service: carts-db 2025-01-21 14:08:55 +00:00
keptn 0c2c6bff8a Added service: carts 2025-01-21 14:08:53 +00:00
keptn b16ffa4daa created stage 2025-01-21 14:08:50 +00:00
13 changed files with 230 additions and 0 deletions

Binary file not shown.

66
carts-db/job/config.yaml Normal file
View File

@ -0,0 +1,66 @@
apiVersion: v2
actions:
- name: "Deploy using helm"
events:
- name: "sh.keptn.event.deployment.triggered"
tasks:
- name: "Run helm"
files:
- /charts
env:
- name: IMAGE
value: "$.data.configurationChange.values.image"
valueFrom: event
image: "alpine/helm:3.7.2"
serviceAccount: "jes-deploy-using-helm"
cmd: ["helm"]
args: ["upgrade", "--force", "--create-namespace", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--set", "keptn.project=$(KEPTN_PROJECT)","--set", "keptn.stage=$(KEPTN_STAGE)", "--wait"]
- name: "Uninstall"
events:
- name: "sh.keptn.event.uninstall.triggered"
tasks:
- name: "Run helm uninstall"
serviceAccount: "jes-deploy-using-helm"
image: "alpine/helm:3.7.2"
cmd: ["helm"]
args: ["uninstall", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
# - name: "Rollback using helm"
# events:
# - name: "sh.keptn.event.rollback.triggered"
# tasks:
# - name: "Run helm"
# serviceAccount: "jes-deploy-using-helm"
# image: "alpine/helm:3.7.2"
# cmd: ["helm"]
# args: ["rollback", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
# - name: "Scale using kubectl"
# events:
# - name: "sh.keptn.event.action.triggered"
# jsonpath:
# property: "$.data.action.action"
# match: "scaling"
# tasks:
# - name: "Run kubectl"
# serviceAccount: "jes-deploy-using-helm"
# env:
# - name: SCALING
# value: $.data.action.value
# valueFrom: event
# image: "alpine/k8s:1.20.15"
# cmd: ["sh"]
# # Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
# args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
# - name: "Run tests using locust"
# events:
# - name: "sh.keptn.event.test.triggered"
# tasks:
# - name: "Run locust"
# files:
# - locust/basic.py
# - locust/locust.conf
# image: "locustio/locust:2.8.6"
# cmd: ["locust"]
# args: ["--config", "/keptn/locust/locust.conf", "-f", "/keptn/locust/basic.py", "--host", "http://$(KEPTN_SERVICE)-$(KEPTN_STAGE).nttdata-xlabs.com", "--only-summary"]

2
carts-db/metadata.yaml Normal file
View File

@ -0,0 +1,2 @@
servicename: carts-db
creationtimestamp: 2025-01-21 14:08:55.781321133 +0000 UTC

BIN
carts/charts/carts.tgz Normal file

Binary file not shown.

View File

@ -0,0 +1,2 @@
spec_version: '0.1.0'
dtCreds: dynatrace-service

12
carts/dynatrace/sli.yaml Normal file
View File

@ -0,0 +1,12 @@
---
spec_version: '1.0'
indicators:
throughput: "metricSelector=builtin:service.requestCount.total:merge(\"dt.entity.service\"):sum&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
error_rate: "metricSelector=builtin:service.errors.total.count:merge(\"dt.entity.service\"):avg&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
response_time_p50: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(50)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
response_time_p90: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(90)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
response_time_p95: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(95)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
#rt_addToCart: "metricSelector=calc:service.itemscontroller.qg:filter(eq(url,addToCart)):merge(0):percentile(95)&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(SERVICE)"
pg_heap_suspension: "metricSelector=builtin:tech.jvm.memory.gc.suspensionTime:merge(\"dt.entity.process_group_instance\"):max&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(PROCESS_GROUP_INSTANCE)"
pg_cpu_usage: "metricSelector=builtin:tech.generic.cpu.usage:merge(\"dt.entity.process_group_instance\"):max&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(PROCESS_GROUP_INSTANCE)"
response_time_avg: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):avg&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"

77
carts/job/config.yaml Normal file
View File

@ -0,0 +1,77 @@
apiVersion: v2
actions:
- name: "Deploy using helm"
events:
- name: "sh.keptn.event.deployment.triggered"
tasks:
# - name: "Create Namespace"
# serviceAccount: "jes-deploy-using-helm"
# # env:
# # - name: SCALING
# # value: $.data.action.value
# # valueFrom: event
# image: "alpine/k8s:1.20.15"
# cmd: ["sh"]
# # Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
# args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
- name: "Run helm"
files:
- /charts
env:
- name: IMAGE
value: "$.data.configurationChange.values.image"
valueFrom: event
image: "alpine/helm:3.7.2"
serviceAccount: "jes-deploy-using-helm"
cmd: ["helm"]
#args: ["upgrade", "--force", "--create-namespace", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--set", "keptn.project=$(KEPTN_PROJECT)","--set", "keptn.stage=$(KEPTN_STAGE)", "--wait"]
args: ["upgrade", "--force", "--install", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "/keptn/charts/$(KEPTN_SERVICE).tgz", "--set", "image=$(IMAGE)", "--set", "keptn.service=$(KEPTN_SERVICE)", "--set", "keptn.deployment=$(KEPTN_STAGE)", "--set", "keptn.project=$(KEPTN_PROJECT)","--set", "keptn.stage=$(KEPTN_STAGE)", "--wait"]
- name: "Uninstall"
events:
- name: "sh.keptn.event.uninstall.triggered"
tasks:
- name: "Run helm uninstall"
serviceAccount: "jes-deploy-using-helm"
image: "alpine/helm:3.7.2"
cmd: ["helm"]
args: ["uninstall", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
- name: "Rollback using helm"
events:
- name: "sh.keptn.event.rollback.triggered"
tasks:
- name: "Run helm"
serviceAccount: "jes-deploy-using-helm"
image: "alpine/helm:3.7.2"
cmd: ["helm"]
args: ["rollback", "-n", "$(KEPTN_PROJECT)-$(KEPTN_STAGE)", "$(KEPTN_SERVICE)", "--wait"]
- name: "Scale using kubectl"
events:
- name: "sh.keptn.event.action.triggered"
jsonpath:
property: "$.data.action.action"
match: "scaling"
tasks:
- name: "Run kubectl"
serviceAccount: "jes-deploy-using-helm"
env:
- name: SCALING
value: $.data.action.value
valueFrom: event
image: "alpine/k8s:1.20.15"
cmd: ["sh"]
# Note: Hardcoded kubernetes namespace & KEPTN_SERVICE does most likely not match the deployment name
args: ["-c", "REPLICAS=$(kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} get deployment/${KEPTN_SERVICE} -o go-template='{{.spec.replicas}}');DESIRED=$((${SCALING}+${REPLICAS}));echo Scaling deployment to ${DESIRED} && kubectl -n ${KEPTN_PROJECT}-${KEPTN_STAGE} scale --replicas=${DESIRED} deployment/${KEPTN_SERVICE}"]
- name: "Run tests using locust"
events:
- name: "sh.keptn.event.test.triggered"
tasks:
- name: "Run locust"
files:
- locust/basic.py
- locust/locust.conf
image: "locustio/locust:2.8.6"
cmd: ["locust"]
args: ["--config", "/keptn/locust/locust.conf", "-f", "/keptn/locust/basic.py", "--host", "http://$(KEPTN_SERVICE)-$(KEPTN_STAGE).nttdata-xlabs.com", "--only-summary"]

8
carts/locust/basic.py Normal file
View File

@ -0,0 +1,8 @@
from locust import HttpUser, between, task
class WebsiteUser(HttpUser):
#wait_time = between(5, 15)
@task
def index(self):
self.client.post("/carts/1/items", json= {"itemId":"03fef6ac-1896-4ce8-bd69-b798f85c6e0b","unitPrice":"99.99"}, headers={"x-dynatrace-test": "LSN=Test;"})

5
carts/locust/locust.conf Normal file
View File

@ -0,0 +1,5 @@
locustfile = /locust/locust.py
headless = true
users = 5
run-time = 1m
exit-code-on-error=0

2
carts/metadata.yaml Normal file
View File

@ -0,0 +1,2 @@
servicename: carts
creationtimestamp: 2025-01-21 14:08:53.496967972 +0000 UTC

42
carts/slo.yaml Normal file
View File

@ -0,0 +1,42 @@
---
spec_version: "0.1.1"
comparison:
aggregate_function: "avg"
compare_with: "single_result"
include_result_with_score: "pass"
number_of_comparison_results: 1
filter:
objectives:
- sli: "response_time_p95"
key_sli: false
pass: # pass if (relative change <= 10% AND absolute value is < 600ms)
- criteria:
- "<=+25%" # relative values require a prefixed sign (plus or minus)
- "<600000" # absolute values only require a logical operator
warning: # if the response time is below 800ms, the result should be a warning
- criteria:
- "<=800000"
weight: 1
# - sli: "rt_addToCart" # looking at a particular transaction
# weight: 3 # business critical transaction
# pass:
# - criteria:
# - "<=+20%" # Degradation-driven
# - "<300000" # NFR-driven
# warning:
# - criteria:
# - "<=+50%"
# - "<=500000"
- sli: "error_rate"
pass:
- criteria:
- "<=+50%"
- "<5"
warning:
- criteria:
- "<10"
- sli: "pg_heap_suspension"
- sli: "pg_cpu_usage"
total_score:
pass: "90%"
warning: "70%"

View File

@ -0,0 +1,2 @@
spec_version: '0.1.0'
dtCreds: dynatrace-service

12
dynatrace/sli.yaml Normal file
View File

@ -0,0 +1,12 @@
---
spec_version: '1.0'
indicators:
throughput: "metricSelector=builtin:service.requestCount.total:merge(\"dt.entity.service\"):sum&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
error_rate: "metricSelector=builtin:service.errors.total.count:merge(\"dt.entity.service\"):avg&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
response_time_p50: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(50)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
response_time_p90: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(90)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
response_time_p95: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):percentile(95)&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"
#rt_addToCart: "metricSelector=calc:service.itemscontroller.qg:filter(eq(url,addToCart)):merge(0):percentile(95)&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(SERVICE)"
pg_heap_suspension: "metricSelector=builtin:tech.jvm.memory.gc.suspensionTime:merge(\"dt.entity.process_group_instance\"):max&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(PROCESS_GROUP_INSTANCE)"
pg_cpu_usage: "metricSelector=builtin:tech.generic.cpu.usage:merge(\"dt.entity.process_group_instance\"):max&entitySelector=tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE),type(PROCESS_GROUP_INSTANCE)"
response_time_avg: "metricSelector=builtin:service.response.time:merge(\"dt.entity.service\"):avg&entitySelector=type(SERVICE),tag(keptn_project:$PROJECT),tag(keptn_stage:$STAGE),tag(keptn_service:$SERVICE)"