master
SLW\ARNAUA 2023-03-06 15:00:17 +01:00
parent 245a296ec4
commit 121ee28bc1
34 changed files with 616 additions and 168 deletions

View File

@ -14,27 +14,17 @@ slo_definition:
filter:
- service: "Netty on 0.0.0.0:8080 - rtti - prod"
keyRequests:
- "/api/default"
- "/api/tw"
- "/api/ru"
- "/api/au"
- "/api/sea"
- "/api/br"
- "/api/mx"
- "/api/za"
- "/api/tw-mgu21"
- "/api/nz"
- "/api/ae"
- "/api/kw"
- ""
NA-Prod:
- metric: "builtin:service.errors.fivexx.successCount"
- metric: "builtin:service.keyRequest.errors.server.successCount"
filter:
- service: "Netty on 0.0.0.0:8080 - rtti - prod"
- service: "btc-vehicle-composite-service - PROD"
keyRequests:
- "/api/na"
- "GET /api/v2/vehicles"
- "GET /api/v4/vehicles"
CN-Prod:
- metric: "builtin:service.errors.fivexx.successCount"
filter:
- service: "Netty on 0.0.0.0:8080 - rtti - prod"
keyRequests:
- "/api/cn"
- ""

View File

@ -0,0 +1,45 @@
---
slo_id: "9"
slo_name: 'TP_Mobile_PersonalFavorites'
displayname: "Personal Favorites"
department: "DE-443"
description: "2.0 SLO Mobile"
doc_url: "https://atc.bmwgroup.net/confluence/x/w1SqdQ"
slo_definition:
tresholds:
warning: 99 #traffic light orange
failure: 98 #traffic light red
EMEA-Prod:
- metric: "builtin:service.keyRequest.errors.server.successCount"
filter:
- service: "btc-destination-composite-service - PROD"
keyRequests:
- "POST /api/v2/favorites/"
- "POST /api/v3/favorites/"
- "GET /api/v2/favorites/"
- "GET /api/v3/favorites/"
- "GET /api/v1/favorites"
- "PUT /api/v2/favorites/<favoriteId>"
- "PUT /api/v3/favorites/<favoriteId>"
- "PUT /api/v2/favorites/homework/1"
- "PUT /api/v2/favorites/homework/2"
NA-Prod:
- metric: "builtin:service.keyRequest.errors.server.successCount"
filter:
- service: "btc-destination-composite-service - PROD"
keyRequests:
- "POST /api/v2/favorites/"
- "POST /api/v3/favorites/"
- "GET /api/v2/favorites/"
- "GET /api/v3/favorites/"
- "PUT /api/v2/favorites/<favoriteId>"
- "PUT /api/v3/favorites/<favoriteId>"
- "DELETE /api/v2/favorites/<favoriteId>"
CN-Prod:
- metric: "builtin:service.keyRequest.errors.server.successCount"
filter:
- service: "btc-destination-composite-service - PROD"
keyRequests:
- "GET /api/v3/favorites/"
- "POST /api/v3/favorites/"
- "PUT /api/v3/favorites/<favoriteId>"

View File

@ -0,0 +1,44 @@
---
slo_id: "10"
slo_name: 'TP_Mobile_DigitalKey'
displayname: "Digital Key"
department: "DE-730"
description: "2.0 SLO Mobile"
doc_url: "https://atc.bmwgroup.net/confluence/x/u1SqdQ"
slo_definition:
tresholds:
warning: 99 #traffic light orange
failure: 98 #traffic light red
EMEA-Prod:
- metric: "builtin:service.keyRequest.errors.fivexx.count"
filter:
- service: "TrackApi - smc - PROD"
keyRequests:
- "trackKey"
- "manageKey"
- service: "digital-key-composite-service - PROD"
keyRequests:
- "GET /api/v1/digitalkey/<VIN>/password"
- "GET /api/v1/digitalkey/<VIN>/pairing"
NA-Prod:
- metric: "builtin:service.keyRequest.errors.fivexx.count"
filter:
- service: "TrackApi - smc - PROD"
keyRequests:
- "trackKey"
- "manageKey"
- service: "digital-key-composite-service - PROD"
keyRequests:
- "GET /api/v1/digitalkey/<VIN>/password"
- "GET /api/v1/digitalkey/<VIN>/pairing"
CN-Prod:
- metric: "builtin:service.keyRequest.errors.fivexx.count"
filter:
- service: "TrackApi - smc - PROD"
keyRequests:
- "trackKey"
- "manageKey"
- service: "digital-key-composite-service - PROD"
keyRequests:
- "GET /api/v1/digitalkey/<VIN>/password"
- "GET /api/v1/digitalkey/<VIN>/pairing"

View File

@ -15,30 +15,15 @@ slo_definition:
- service: "LegacyPoiApi - msgsvc - prod"
keyRequests:
- ""
- metric: "builtin:service.requestCount.total"
filter:
- service: "LegacyPoiApi - msgsvc - prod"
keyRequests:
- ""
NA-Prod:
- metric: "builtin:service.errors.server.successCount"
filter:
- service: "LegacyPoiApi - msgsvc - prod"
keyRequests:
- ""
- metric: "builtin:service.requestCount.total"
filter:
- service: "LegacyPoiApi - msgsvc - prod"
keyRequests:
- ""
CN-Prod:
- metric: "builtin:service.errors.server.successCount"
filter:
- service: "LegacyPoiApi - msgsvc - prod"
keyRequests:
- ""
- metric: "builtin:service.requestCount.total"
filter:
- service: "LegacyPoiApi - msgsvc - prod"
keyRequests:
- ""

View File

@ -1,7 +1,27 @@
Requirements:
Welche SLOs sollen reingepackt werden?
Nur QM-Report und Dashboard
# YAML 2 Terraform Generator
## Description
The task was to create a first draft of a script that can use a specific YAML file datastructure to generate Terraform configuration files. Afterwards it can be used as part of a Jenkins pipeline.
1 Skript YAML files für jede dieser SLOs https://atc.bmwgroup.net/bitbucket/projects/OPAPM/repos/qm_report/browse/slo_parameter.yaml?at=refs%2Fheads%2FVersion2 eintragen
2 Skript, dass die YAML files einliest und Terraform files generiert, welche dann via Jenkins eingespielt werden können
## Info
- YAML files should be stored according to the business line
- DE-3
- DE-4
- DE-7
- EC-DE
- Some YAML files have been created for testing purposes based on the shared_configuration and CoCo_Terraform_Config repositories.
- [shared_configuration](https://atc.bmwgroup.net/bitbucket/projects/OPAPM/repos/shared_configuration)
- [CoCo_Terraform_Config](https://atc.bmwgroup.net/bitbucket/projects/OPAPM/repos/coco_terraform_config)
## Requirements
### Python
The used python version for running the script is 3.11.2.
### Libraries
Some python packages need to be installed. Please use the requirements.txt file to install missing packages.
## Running the program
Using the program is straightforward.
- `.\generate.py <business line>`
- Example: `.\generate.py DE-3`
- `.\generate DE-3,DE-4,DE-7,EC-DE`

View File

@ -12,10 +12,11 @@ from pathlib import Path
OUTPUT_FOLDER_BASENAME = os.path.basename("output")
TEMPLATE_FOLDER_BASENAME = os.path.basename("jinja-templates")
TEMPLATE_FILES = {
"terraform-template.j2": ["builtin:service.keyRequest.errors.fivexx.rate"],
"terraform-template-1.j2":["builtin:service.keyRequest.errors.fivexx.rate"],
"terraform-template-2.j2":["builtin:service.keyRequest.errors.server.successCount"],
"terraform-template-3.j2":["builtin:service.keyRequest.errors.fivexx.count"],
"terraform-template-4.j2":["builtin:service.successes.server.rate"]
"terraform-template-4.j2":["builtin:service.errors.server.successCount"],
"terraform-template-5.j2":["builtin:service.errors.fivexx.successCount"]
}
FOLDERS = {"My Journey":"DE-3",
"Connected Vehicle Platforms":"DE-7",
@ -45,8 +46,8 @@ def main(configFile):
environments = {}
template = None
metric = None
services = None
keyRequests = None
services = []
keyRequests = []
try:
# read yaml file
@ -89,20 +90,21 @@ def main(configFile):
metric = nested_lookup('metric',ev)
for service in ev[0]["filter"]:
services = nested_lookup('service',service)
keyRequests = nested_lookup('keyRequests',service)
services.append(nested_lookup('service',service))
keyRequests.append(nested_lookup('keyRequests',service))
with open(os.path.join(folder_path,module_name+".tf"),"w+") as file:
jinja_template = jinja_environment.get_template(template_logic(metric))
file.write(jinja_template.render(module=module_name,
slo_name=slo_name,
metric=metric,
metric=metric[0],
description=description,
services='~",\n\t\t\t\t~"'.join(services),
keyRequests='~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(keyRequests)),
services='~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(services)),
keyRequests='~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(itertools.chain.from_iterable(keyRequests))),
target=slo_definition_tresholds_failure,
warning=slo_definition_tresholds_warning))
services = []
keyRequests = []
if __name__ == "__main__":
@ -111,9 +113,9 @@ if __name__ == "__main__":
print(sys.argv)
if len(sys.argv) != 2:
print(".\convert.py <FOLDER>")
print("Example: .\convert.py DE-3")
print("Example: .\convert.py DE-3,DE-4,...")
print(".\generate.py <FOLDER>")
print("Example: .\generate.py DE-3")
print("Example: .\generate.py DE-3,DE-4,...")
sys.exit()
# init folder

View File

@ -10,11 +10,15 @@ module {{ module }} {
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<<EOT
{{ metric }}:filter(and(or(in("dt.entity.service",entitySelector("type(~"SERVICE~"),
metric_expression = <<EOT
(100)*((:filter(and(or(in("dt.entity.service",entitySelector("type(service),entityName.in(
~"{{ service }}~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.in(
~"{{ services }}~"
)"))))):splitBy()
~"{{ service }}~"
)"))))):splitBy()))
EOT
# if not set (removed) it's defaulted to "-1d"

View File

@ -0,0 +1,35 @@
module {{ module }} {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "{{ slo_name }}"
description = "{{ description }}"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*(({{ metric }}:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"{{ services }}~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"{{ services }}~"
)"))))):splitBy()))
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = {{ target }} # if not set(removed) it's defaulted to 98
warning = {{ warning }} # if not set(removed) it's defaulted to 99
}

View File

@ -1,8 +1,8 @@
module TP_Mobile_VehicleList {
module TP_Mobile_DigitalKey {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleList"
name = "TP_Mobile_DigitalKey"
description = "2.0 SLO Mobile"
@ -11,22 +11,30 @@ module TP_Mobile_VehicleList {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((1)-(builtin:service.keyRequest.errors.fivexx.count:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):splitBy()))
EOT

View File

@ -11,12 +11,17 @@ module TP_Mobile_Login {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"btc-cn-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/profile-account~",
~"GET /api/v2/presentation/profile-account~",
~"POST /api/v2/presentation/profile-account~",
~"GET /api/v1/presentation/profile-tab/contacts~",
~"POST /api/v2/cop/login/pwd~",
~"POST /api/v2/cop/login/sms~",
~"POST /api/v2/cop/sso~",
@ -26,9 +31,14 @@ module TP_Mobile_Login {
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"btc-cn-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/profile-account~",
~"GET /api/v2/presentation/profile-account~",
~"POST /api/v2/presentation/profile-account~",
~"GET /api/v1/presentation/profile-tab/contacts~",
~"POST /api/v2/cop/login/pwd~",
~"POST /api/v2/cop/login/sms~",
~"POST /api/v2/cop/sso~",

View File

@ -11,12 +11,14 @@ module TP_Mobile_Mapping {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"vehicle-mapping-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/presentation/users/validate~",
~"POST /api/v2/vehicles/<VIN>/primary~",
~"POST /api/v2/vehicles/<VIN>/primary/map~",
~"POST /api/v1/vehicles/<VIN>/validate-security-code~",
@ -27,9 +29,11 @@ module TP_Mobile_Mapping {
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"vehicle-mapping-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/presentation/users/validate~",
~"POST /api/v2/vehicles/<VIN>/primary~",
~"POST /api/v2/vehicles/<VIN>/primary/map~",
~"POST /api/v1/vehicles/<VIN>/validate-security-code~",

View File

@ -11,7 +11,7 @@ module TP_Mobile_Remote360 {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"

View File

@ -11,7 +11,7 @@ module TP_Mobile_Send2VehicleMGU {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"

View File

@ -0,0 +1,34 @@
module TP_Vehicle_FTS {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_FTS"
description = "CoCo-QM-Report_Draft"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)-(builtin:service.keyRequest.errors.fivexx.rate:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"POIs~"
)
),entityName.in(
~"getPOIs (FTS Calls)~"
)"))))):splitBy())
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

View File

@ -0,0 +1,35 @@
module TP_Vehicle_RTTI {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_RTTI"
description = "CoCo-QM-Report_Vehicle"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((builtin:service.errors.fivexx.successCount:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"Netty on 0.0.0.0:8080 - rtti - prod~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"Netty on 0.0.0.0:8080 - rtti - prod~"
)"))))):splitBy()))
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

View File

@ -1,8 +1,8 @@
module TP_Mobile_VehicleList {
module TP_Mobile_DigitalKey {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleList"
name = "TP_Mobile_DigitalKey"
description = "2.0 SLO Mobile"
@ -11,22 +11,30 @@ module TP_Mobile_VehicleList {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((1)-(builtin:service.keyRequest.errors.fivexx.count:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):splitBy()))
EOT

View File

@ -11,12 +11,17 @@ module TP_Mobile_Login {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"btc-cn-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/profile-account~",
~"GET /api/v2/presentation/profile-account~",
~"POST /api/v2/presentation/profile-account~",
~"GET /api/v1/presentation/profile-tab/contacts~",
~"POST /api/v2/cop/login/pwd~",
~"POST /api/v2/cop/login/sms~",
~"POST /api/v2/cop/sso~",
@ -26,9 +31,14 @@ module TP_Mobile_Login {
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"btc-cn-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/profile-account~",
~"GET /api/v2/presentation/profile-account~",
~"POST /api/v2/presentation/profile-account~",
~"GET /api/v1/presentation/profile-tab/contacts~",
~"POST /api/v2/cop/login/pwd~",
~"POST /api/v2/cop/login/sms~",
~"POST /api/v2/cop/sso~",

View File

@ -11,12 +11,14 @@ module TP_Mobile_Mapping {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"vehicle-mapping-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/presentation/users/validate~",
~"POST /api/v2/vehicles/<VIN>/primary~",
~"POST /api/v2/vehicles/<VIN>/primary/map~",
~"POST /api/v1/vehicles/<VIN>/validate-security-code~",
@ -27,9 +29,11 @@ module TP_Mobile_Mapping {
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"vehicle-mapping-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/presentation/users/validate~",
~"POST /api/v2/vehicles/<VIN>/primary~",
~"POST /api/v2/vehicles/<VIN>/primary/map~",
~"POST /api/v1/vehicles/<VIN>/validate-security-code~",

View File

@ -11,7 +11,7 @@ module TP_Mobile_Remote360 {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"

View File

@ -11,7 +11,7 @@ module TP_Mobile_Send2VehicleMGU {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"

View File

@ -0,0 +1,34 @@
module TP_Vehicle_FTS {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_FTS"
description = "CoCo-QM-Report_Draft"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)-(builtin:service.keyRequest.errors.fivexx.rate:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"POIs~"
)
),entityName.in(
~"getPOIs (FTS Calls)~"
)"))))):splitBy())
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

View File

@ -0,0 +1,35 @@
module TP_Vehicle_RTTI {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_RTTI"
description = "CoCo-QM-Report_Vehicle"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((builtin:service.errors.fivexx.successCount:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"Netty on 0.0.0.0:8080 - rtti - prod~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"Netty on 0.0.0.0:8080 - rtti - prod~"
)"))))):splitBy()))
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

View File

@ -0,0 +1,37 @@
module TP_Vehicle_eRoute {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_eRoute"
description = "CoCo QM-Report_Vehicle"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)-(builtin:service.keyRequest.errors.fivexx.rate:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"Netty on 0.0.0.0:8080 - eroute-ext - prod~",
~"Netty on 0.0.0.0:8080 - eroute-adapter - prod~"
)
),entityName.in(
~"/api/eu/2.5/eroute/protobuf3~",
~"/api/eu/2.5/eroute-costs/protobuf3~",
~"/route/eroute~"
)"))))):splitBy())
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

View File

@ -1,8 +1,8 @@
module TP_Mobile_VehicleList {
module TP_Mobile_DigitalKey {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleList"
name = "TP_Mobile_DigitalKey"
description = "2.0 SLO Mobile"
@ -11,22 +11,30 @@ module TP_Mobile_VehicleList {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((1)-(builtin:service.keyRequest.errors.fivexx.count:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):splitBy()))
EOT

View File

@ -11,12 +11,17 @@ module TP_Mobile_Login {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"btc-cn-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/profile-account~",
~"GET /api/v2/presentation/profile-account~",
~"POST /api/v2/presentation/profile-account~",
~"GET /api/v1/presentation/profile-tab/contacts~",
~"POST /api/v2/cop/login/pwd~",
~"POST /api/v2/cop/login/sms~",
~"POST /api/v2/cop/sso~",
@ -26,9 +31,14 @@ module TP_Mobile_Login {
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"btc-cn-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/profile-account~",
~"GET /api/v2/presentation/profile-account~",
~"POST /api/v2/presentation/profile-account~",
~"GET /api/v1/presentation/profile-tab/contacts~",
~"POST /api/v2/cop/login/pwd~",
~"POST /api/v2/cop/login/sms~",
~"POST /api/v2/cop/sso~",

View File

@ -11,12 +11,14 @@ module TP_Mobile_Mapping {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"vehicle-mapping-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/presentation/users/validate~",
~"POST /api/v2/vehicles/<VIN>/primary~",
~"POST /api/v2/vehicles/<VIN>/primary/map~",
~"POST /api/v1/vehicles/<VIN>/validate-security-code~",
@ -27,9 +29,11 @@ module TP_Mobile_Mapping {
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"vehicle-mapping-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/presentation/users/validate~",
~"POST /api/v2/vehicles/<VIN>/primary~",
~"POST /api/v2/vehicles/<VIN>/primary/map~",
~"POST /api/v1/vehicles/<VIN>/validate-security-code~",

View File

@ -11,7 +11,7 @@ module TP_Mobile_Remote360 {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"

View File

@ -11,7 +11,7 @@ module TP_Mobile_Send2VehicleMGU {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((['builtin:service.keyRequest.errors.server.successCount']:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
(100)*((builtin:service.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"

View File

@ -0,0 +1,34 @@
module TP_Vehicle_FTS {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_FTS"
description = "CoCo-QM-Report_Draft"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)-(builtin:service.keyRequest.errors.fivexx.rate:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"POIs~"
)
),entityName.in(
~"getPOIs (FTS Calls)~"
)"))))):splitBy())
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

View File

@ -0,0 +1,35 @@
module TP_Vehicle_RTTI {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_RTTI"
description = "CoCo-QM-Report_Vehicle"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((builtin:service.errors.fivexx.successCount:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"Netty on 0.0.0.0:8080 - rtti - prod~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.equals(
~"Netty on 0.0.0.0:8080 - rtti - prod~"
)"))))):splitBy()))
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

View File

@ -0,0 +1,37 @@
module TP_Vehicle_eRoute {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Vehicle_eRoute"
description = "CoCo QM-Report_Vehicle"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)-(builtin:service.keyRequest.errors.fivexx.rate:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"Netty on 0.0.0.0:8080 - eroute-ext - prod~",
~"Netty on 0.0.0.0:8080 - eroute-adapter - prod~"
)
),entityName.in(
~"/api/eu/2.5/eroute/protobuf3~",
~"/api/eu/2.5/eroute-costs/protobuf3~",
~"/route/eroute~"
)"))))):splitBy())
EOT
# if not set (removed) it's defaulted to "-1d"
timeframe = "-1d"
# currently the only possible value
evaluation = "AGGREGATE"
# target and warning percentage of the SLO as double
target = 98 # if not set(removed) it's defaulted to 98
warning = 99 # if not set(removed) it's defaulted to 99
}

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
Jinja2==3.1.2
nested_lookup==0.2.25
PyYAML==6.0

View File

@ -10,15 +10,6 @@ slo_definition:
warning: 99 #traffic light orange
failure: 98 #traffic light red
EMEA-Prod:
- metric: ""
filter:
- service: ""
keyRequests:
- ""
- ""
- service: ""
keyRequests:
- ""
- metric: ""
filter:
- service: ""
@ -29,15 +20,6 @@ slo_definition:
keyRequests:
- ""
NA-Prod:
- metric: ""
filter:
- service: ""
keyRequests:
- ""
- ""
- service: ""
keyRequests:
- ""
- metric: ""
filter:
- service: ""
@ -57,12 +39,3 @@ slo_definition:
- service: ""
keyRequests:
- ""
- metric: ""
filter:
- service: ""
keyRequests:
- ""
- ""
- service: ""
keyRequests:
- ""