master
SLW\ARNAUA 2023-03-10 15:50:17 +01:00
parent 071c415a93
commit f1ab6ce267
46 changed files with 2047 additions and 53 deletions

View File

@ -1,6 +1,6 @@
---
slo_id: "7"
slo_name: 'TP_Mobile_Send2VehicleMGU'
slo_name: "TP_Mobile_Send2VehicleMGU"
displayname: "Send to Vehicle (MGU)"
department: "DE-320"
description: "2.0 SLO Mobile"

View File

@ -1,6 +1,6 @@
---
slo_id: "9"
slo_name: 'TP_Mobile_PersonalFavorites'
slo_name: "TP_Mobile_PersonalFavorites"
displayname: "Personal Favorites"
department: "DE-443"
description: "2.0 SLO Mobile"

View File

@ -1,6 +1,6 @@
---
slo_id: "10"
slo_name: 'TP_Mobile_DigitalKey'
slo_name: "TP_Mobile_DigitalKey"
displayname: "Digital Key"
department: "DE-730"
description: "2.0 SLO Mobile"

2
Jenkinsfile vendored
View File

@ -104,7 +104,7 @@
pwd
python3 --version
pip3 --version
pip3 install --user -r ./coco_apm_slo_yaml2tf/requirements.txt
pip3 install --user -r ./coco_apm_slo_yaml2tf/requirements.txt
'''
}
}

225
README.md
View File

@ -1,27 +1,214 @@
# 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.
## 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.
## Table of contents
[**1. Description**](#description)<br />
[**2. Info**](#info)<br />
[**3. Repositories**](#repositories)<br />
[**4. Requirements**](#requirements)<br />
[**5. Documentation**](#documentation)<br />
<a id="description"></a>
## **1. Description**
This repository contains a first draft script that can use a specific YAML file datastructure in order to generate Terraform configuration files. Afterwards it is used to be part of a Jenkins pipeline.
<a id="info"></a>
## **2. Info**
- The current version of this script is able to generate Terraform files that support the metrics mentioned within section Supported Metrics. Therefore not all use cases might be covered!
- YAML files should be stored according to the business line (DE-3, DE-4, DE-7, EC-DE) within the respective business line folder!
- Some YAML files have already been created for testing purposes based on the shared_configuration and coco_terraform_config repositories and were therefore added in this repository.
<a id="repositories"></a>
## **3 Repositories**
The following repositores have been used to create some YAML files.
- [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)
- [coco_terraform_config](https://atc.bmwgroup.net/bitbucket/projects/OPAPM/repos/coco_terraform_config)
## Requirements
### Python
<a id="requirements"></a>
## **4. 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`
### **Libraries**
Some python packages need to be installed. Please use the requirements.txt file to install missing packages. The command for installing the missing packages is:
```sh
pip3 install --user -r requirements.txt
```
<a id="documentation"></a>
## **5. Documentation**
The following section is just a small exhibit tailored to the use of the script.
### **Arguments**
If the script needs to be used for local execution, then the following command should be used:
```
.\generate.py <path to yaml file/folder> <path to output folder>
```
Please note that two arguments are necessary:
- <b>`<path to yaml folder>`</b> - Here it is necessary to provide the path to the folder where the yaml files are stored. Fore example, if the yaml files are stored within the DE-3 business line folder, then it is important to convey the correct path as an argument for the script, in this case <b>`.\DE-3\`</b>. It is also possible to provide multiple folders, but they have to be delimited by a comma when parsing, in this case <b>`.\DE-3\,.\DE-4\,.\DE-7\`</b>!
- <b>`<optional:path to output folder>`</b> - If it is necessary to store the generated Terraform files to a specific location, then the correct path to that particular folder needs to be provided! Alternatively, the default path <b>`.\output\`</b> will be used which is within the current working directory of the script.
#### **Examples**
Here are some examples when executing the script:
```sh
# The YAML Files are stored within the business line folder DE-3, in the same working directory as the script, and by the following command it is possible to generate the Terraform files and store them into the default output folder.
.\generate.py .\DE-3\
```
```sh
# The YAML Files are stored within the business line folder DE-3, in the same working directory as the script, and by the following command it is possible to generate the Terraform files and store them to a folder at a different location.
.\generate.py .\DE-3\ ..\coco_terraform_config\
```
```sh
# The YAML Files are stored within the business line folder DE-3, outside the working directory of the script, and by the following command it is possible to generate the Terraform files and store them to a folder at a different location.
.\generate.py ..\shared_configuration\DE-3\ ..\coco_terraform_config\
```
```sh
# The YAML Files are stored within multiple business line folders (DE-3, DE-4, DE-7), in the same working directory as the script, and by the following command it is possible to generate the Terraform files and store them into the default output folder.
.\generate.py .\DE-3\,.\DE-4\,.\DE-7\
```
```sh
# The YAML Files are stored within multiple business line folders (DE-3, DE-4, DE-7), in the same working directory as the script, and by the following command it is possible to generate the Terraform files and store them to a folder at a different location.
.\generate.py .\DE-3\,.\DE-4\,.\DE-7\ ..\coco_terraform_config\
```
```sh
# The YAML Files are stored within multiple business line folders and outside the working directory of the script. By using the following command it is possible to generate the Terraform files and store them to a folder at a different location.
.\generate.py ..\shared_configuration\DE-3\,..\shared_configuration\DE-4\,..\shared_configuration\DE-7\ ..\coco_terraform_config\
# Note here: If all yaml files of the shared_configuration repository need to be provided as an input argument it would also suffice to use the following command:
.\generate.py ..\shared_configuration\ ..\coco_terraform_config\
```
### **Jenkins Pipeline**
This is the link to the pipeline:
[Pipeline CoCo SLO YAML 2 TF](https://jaws.bmwgroup.net/opapm/job/CoCo%20SLO%20YAML%202%20TF/). There are basically five main stages:
- Fetch Repositories:
- [shared_configuration](https://atc.bmwgroup.net/bitbucket/scm/opapm/shared_configuration.git)
- [coco_terraform_config](https://atc.bmwgroup.net/bitbucket/scm/opapm/coco_terraform_config.git)
- [coco_apm_slo_yaml2tf](https://atc.bmwgroup.net/bitbucket/scm/opapm/coco_apm_slo_yaml2tf.git)
- Checkout New Branch: A new branch is checked out (with a timestamp) which will be needed before any changes can be made after the script is run. The branch name will be something like ***<timestamp>-automatedSLOGeneration***.
- Install Required Python Packages: It is necessary to install the required packages before the script can be run!
- Execute Script: The script is executed and the YAML files with the corresponding business lines
- Push Changes: Once the script finished with its exection the changes will be pushed with a commit that just includes a timestamp. The changes will be pushed to the newly created branch as mentioned above!
### **Data Structure of the YAML Files**
The majority of the key and value pairs have been taken respectively from the [shared_configuration](https://atc.bmwgroup.net/bitbucket/projects/OPAPM/repos/shared_configuration/) repository.
> ⚠️ **Please make sure that the YAML File does not include any tabs otherwise the correct functionality cannot be assured!**
```yaml
slo_id: # <type:string> - Order of the given SLO within the dashboard
slo_name: # <type:string> - Touchpoint Mobile or Vehicle
displayname: # <type:string> - Display name of the SLO to be displayed on the dashboard
department: # <type:string> - Department/Business Line, responsible for this SLO
description: # <type:string> - Description Field: CoCo QM-Report_Mobile or CoCo QM-Report_Vehicle
doc_url: # <type:string> - Link to the documenation of the particular SLO
slo_definition:
tresholds:
warning: # <type:integer> - Traffic light orange
failure: # <type:integer> - Traffic light red
EMEA-Prod:
- metric: # <type:string> - Used metric, see section Supported Metrics
filter:
- service: # <type:string> - Name of the Service
keyRequests:
- # <type:string> - The name of the particular Key-Request of that Service
- # <type:string> - ...
- service: # <type:string> - ...
keyRequests:
- # <type:string>
NA-Prod:
- metric: # <type:string>
filter:
- service: # <type:string>
keyRequests: # <type:string>
- # <type:string>
- # <type:string>
- service: # <type:string>
keyRequests:
- # <type:string>
CN-Prod:
- metric: # <type:string>
filter:
- service: # <type:string>
keyRequests: # <type:string>
- # <type:string>
- # <type:string>
- service: # <type:string>
keyRequests:
- # <type:string>
```
#### **Supported Metrics**
Currently the following metrics are supported:
```yaml
builtin:service.keyRequest.errors.fivexx.rate
builtin:service.keyRequest.errors.server.successCount
builtin:service.keyRequest.errors.fivexx.count
builtin:service.errors.server.successCount
builtin:service.errors.fivexx.successCount
```
### **Jinja Templates**
Currently there are only five Jinja Templates setup to cover mainly five different types of metrics as mentioned before. They can be found within the jinja-templates folder.
```sh
├───jinja-templates
│ terraform-template-1.j2
│ terraform-template-2.j2
│ terraform-template-3.j2
│ terraform-template-4.j2
│ terraform-template-5.j2
```
- terraform-template-1.j2 is used for builtin:service.keyRequest.errors.fivexx.rate
- terraform-template-2.j2 is used for builtin:service.keyRequest.errors.server.successCount
- terraform-template-3.j2 is used for builtin:service.keyRequest.errors.fivexx.count
- terraform-template-4.j2 is used for builtin:service.errors.server.successCount
- terraform-template-5.j2 is used for builtin:service.errors.fivexx.successCount
### **Terraform Output Folder Structure**
The output folder structure will look like the following example:
```sh
C:.s
├───CN_Prod
│ └───slo
│ TP_Mobile_DigitalKey.tf
│ TP_Mobile_Login.tf
│ TP_Mobile_Mapping.tf
│ TP_Mobile_PersonalFavorites.tf
│ TP_Mobile_Remote360.tf
│ TP_Mobile_RemoteServices.tf
│ TP_Mobile_Send2VehicleLegacy.tf
│ TP_Mobile_Send2VehicleMGU.tf
│ TP_Mobile_VehicleData.tf
│ TP_Mobile_VehicleList.tf
│ TP_Vehicle_FTS.tf
│ TP_Vehicle_RTTI.tf
├───EMEA_Prod
│ └───slo
│ TP_Mobile_DigitalKey.tf
│ TP_Mobile_Login.tf
│ TP_Mobile_Mapping.tf
│ TP_Mobile_PersonalFavorites.tf
│ TP_Mobile_Remote360.tf
│ TP_Mobile_RemoteServices.tf
│ TP_Mobile_Send2VehicleLegacy.tf
│ TP_Mobile_Send2VehicleMGU.tf
│ TP_Mobile_VehicleData.tf
│ TP_Mobile_VehicleList.tf
│ TP_Vehicle_eRoute.tf
│ TP_Vehicle_FTS.tf
│ TP_Vehicle_RTTI.tf
└───NA_Prod
└───slo
TP_Mobile_DigitalKey.tf
TP_Mobile_Login.tf
TP_Mobile_Mapping.tf
TP_Mobile_PersonalFavorites.tf
TP_Mobile_Remote360.tf
TP_Mobile_RemoteServices.tf
TP_Mobile_Send2VehicleLegacy.tf
TP_Mobile_Send2VehicleMGU.tf
TP_Mobile_VehicleData.tf
TP_Mobile_VehicleList.tf
TP_Vehicle_eRoute.tf
TP_Vehicle_FTS.tf
TP_Vehicle_RTTI.tf
```

View File

@ -7,9 +7,9 @@ import yaml
import os
from nested_lookup import nested_lookup
from pathlib import Path
import datetime
# defines
OUTPUT_FOLDER_BASENAME = os.path.basename("output")
TEMPLATE_FOLDER_BASENAME = os.path.basename("jinja-templates")
TEMPLATE_FILES = {
"terraform-template-1.j2":["builtin:service.keyRequest.errors.fivexx.rate"],
@ -34,11 +34,6 @@ def template_logic(metric):
# main
def main(configFile,output_path):
if output_path:
op = output_path
else:
op = OUTPUT_FOLDER_BASENAME
slo_id = None
slo_name = None
module_name = None
@ -75,12 +70,8 @@ def main(configFile,output_path):
slo["slo_definition"].pop("tresholds")
for env in slo["slo_definition"]:
if "EMEA-Prod" in slo["slo_definition"]:
environments["EMEA-Prod"] = slo["slo_definition"][env]
if "NA-Prod" in slo["slo_definition"]:
environments["NA-Prod"] = slo["slo_definition"][env]
if "CN-Prod" in slo["slo_definition"]:
environments["CN-Prod"] = slo["slo_definition"][env]
if env in slo["slo_definition"]:
environments[env] = slo["slo_definition"][env]
# read template file
jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATE_FOLDER_BASENAME),
@ -116,20 +107,26 @@ if __name__ == "__main__":
# pre-initialization get current working directory
cwd = os.getcwd()
print("Current working directory:",cwd)
OUTPUT_FOLDER_BASENAME = os.path.basename("output")
if len(sys.argv) != 3:
print(".\generate.py <path to yaml file/folder> <output path>")
print("Example: .\generate.py .\DE-3\\ .\test\\")
print("Example: .\generate.py .\DE-3\,.\DE-4\,...")
if len(sys.argv) <= 1 or len(sys.argv) > 3:
print(datetime.datetime.now(),".\generate.py <path to yaml folder> <optional:path to output folder>")
print(datetime.datetime.now(),"Example: .\generate.py .\DE-3\ .\generated\\")
print(datetime.datetime.now(),"Example: .\generate.py .\DE-3\,.\DE-4\,... .\generated\\")
print(datetime.datetime.now(),"Missing input arguments. Exiting...")
sys.exit()
print("Script is running...")
print("Check arguments:",sys.argv)
print(datetime.datetime.now(),"Script is running...")
print(datetime.datetime.now(),"Current working directory:",cwd)
print(datetime.datetime.now(),"Check arguments:",sys.argv)
if len(sys.argv) == 3:
op = sys.argv[2]
else:
op = OUTPUT_FOLDER_BASENAME
# TESTING: Unocmment this if you want to test it
# TESTING
# for folderName,businessLine in FOLDERS.items():
# businessLinePath = os.path.join(cwd,businessLine)
# businessLinePath = os.path.join(businessLine)
# if not os.path.exists(businessLinePath):
# os.makedirs(businessLinePath)
@ -137,15 +134,15 @@ if __name__ == "__main__":
arguments = sys.argv[1].split(',')
for arg in arguments:
pathname = os.path.join(arg)
print("pathname:",pathname)
print(datetime.datetime.now(),"pathname:",pathname)
# return path of slo config files
configFiles = glob.glob(pathname=pathname + '/**/[TP_]*.yaml',
# root_dir=os.path.join(cwd,os.path.basename(arg)),
recursive=True)
print("configFiles:",configFiles)
print(datetime.datetime.now(),"configFiles:",configFiles)
# for each slo config file in folder
for configFile in configFiles:
print("File:",configFile)
main(configFile,sys.argv[2])
print("Script finished.")
print(datetime.datetime.now(),"Generating Terraform Files for:",configFile)
main(configFile,op)
print(datetime.datetime.now(),"Script finished.")

View File

@ -12,12 +12,12 @@ module {{ module }} {
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((:filter(and(or(in("dt.entity.service",entitySelector("type(service),entityName.in(
~"{{ service }}~"
~"{{ services }}~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.in(
~"{{ service }}~"
~"{{ services }}~"
)"))))):splitBy()))
EOT

View File

@ -0,0 +1,51 @@
module TP_Mobile_DigitalKey {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_DigitalKey"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(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(
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"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(
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):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,59 @@
module TP_Mobile_Login {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Login"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
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~",
~"GET /api/v1/cop/logout~"
)"))))):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-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~",
~"GET /api/v1/cop/logout~"
)"))))):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,55 @@
module TP_Mobile_Mapping {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Mapping"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
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~",
~"POST /api/v1/vehicles/<VIN>/resend-security-code~",
~"DELETE /api/v1/vehicles/<VIN>~"
)"))))):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-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~",
~"POST /api/v1/vehicles/<VIN>/resend-security-code~",
~"DELETE /api/v1/vehicles/<VIN>~"
)"))))):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,47 @@
module TP_Mobile_PersonalFavorites {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_PersonalFavorites"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-destination-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v3/favorites/~",
~"POST /api/v3/favorites/~",
~"PUT /api/v3/favorites/<favoriteId>~"
)"))))):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-destination-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v3/favorites/~",
~"POST /api/v3/favorites/~",
~"PUT /api/v3/favorites/<favoriteId>~"
)"))))):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,57 @@
module TP_Mobile_Remote360 {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Remote360"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/events/[UUID]~",
~"POST /api/v1/events/[UUID]/cancel~",
~"POST /api/v1/event/execute~",
~"GET /api/v1/download/[UUID]/<fileName>~",
~"POST /api/v1/download/[UUID]/<fileName>/confirm~",
~"GET /api/v1/vehicle/<VIN>/egomodelurl~",
~"GET /api/v1/vehicle/<VIN>/key~",
~"GET /api/v1/recordings/vehicle/<VIN>~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/events/[UUID]~",
~"POST /api/v1/events/[UUID]/cancel~",
~"POST /api/v1/event/execute~",
~"GET /api/v1/download/[UUID]/<fileName>~",
~"POST /api/v1/download/[UUID]/<fileName>/confirm~",
~"GET /api/v1/vehicle/<VIN>/egomodelurl~",
~"GET /api/v1/vehicle/<VIN>/key~",
~"GET /api/v1/recordings/vehicle/<VIN>~"
)"))))):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,61 @@
module TP_Mobile_RemoteServices {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_RemoteServices"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-remote-commands-composite-service - PROD~"
)
),entityName.in(
~"POST /api/v2/presentation/remote-commands/eventStatus~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-lock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-unlock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-now~",
~"GET /api/v2/presentation/remote-history/<VIN>~",
~"POST /api/v2/presentation/remote-commands/<VIN>/horn-blow~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-timer~",
~"POST /api/v2/presentation/remote-commands/<VIN>/light-flash~",
~"POST /api/v2/presentation/remote-commands/<VIN>/vehicle-finder~",
~"GET /api/v1/presentation/remote-history/<VIN>~"
)"))))):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-remote-commands-composite-service - PROD~"
)
),entityName.in(
~"POST /api/v2/presentation/remote-commands/eventStatus~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-lock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-unlock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-now~",
~"GET /api/v2/presentation/remote-history/<VIN>~",
~"POST /api/v2/presentation/remote-commands/<VIN>/horn-blow~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-timer~",
~"POST /api/v2/presentation/remote-commands/<VIN>/light-flash~",
~"POST /api/v2/presentation/remote-commands/<VIN>/vehicle-finder~",
~"GET /api/v1/presentation/remote-history/<VIN>~"
)"))))):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,34 @@
module TP_Mobile_Send2VehicleLegacy {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Send2VehicleLegacy"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((:filter(and(or(in("dt.entity.service",entitySelector("type(service),entityName.in(
~"LegacyPoiApi - msgsvc - prod~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.in(
~"LegacyPoiApi - msgsvc - 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,45 @@
module TP_Mobile_Send2VehicleMGU {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Send2VehicleMGU"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"
)
),entityName.in(
~"/v3/motorist/[UUID]/trips~",
~"/v2/motorist/[UUID]/trips~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"
)
),entityName.in(
~"/v3/motorist/[UUID]/trips~",
~"/v2/motorist/[UUID]/trips~"
)"))))):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,43 @@
module TP_Mobile_VehicleData {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleData"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
)"))))):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~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
)"))))):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,43 @@
module TP_Mobile_VehicleList {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleList"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
)"))))):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~"
)
),entityName.in(
~"GET /api/v1/vehicles~"
)"))))):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,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,51 @@
module TP_Mobile_DigitalKey {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_DigitalKey"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(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(
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"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(
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):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_Mobile_Login {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Login"
description = "2.0 SLO Mobile"
# 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(
~"btc-user-composite-service - PROD~",
~"btc-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/oauth/config~",
~"GET /api/v1/presentation/profile-tab~",
~"POST /api/v1/oauth/token/identifier~"
)"))))):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,67 @@
module TP_Mobile_Mapping {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Mapping"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
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~",
~"POST /api/v1/vehicles/<VIN>/resend-security-code~",
~"DELETE /api/v1/vehicles/<VIN>~",
~"POST /api/v3/mappings/create~",
~"POST /api/v3/mappings/continue~",
~"POST /api/v3/mappings/validate-security-code~",
~"POST /api/v3/mappings/resend-security-code~",
~"GET /api/v3/images/<image>~",
~"DELETE /api/v3/mappings~"
)"))))):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-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~",
~"POST /api/v1/vehicles/<VIN>/resend-security-code~",
~"DELETE /api/v1/vehicles/<VIN>~",
~"POST /api/v3/mappings/create~",
~"POST /api/v3/mappings/continue~",
~"POST /api/v3/mappings/validate-security-code~",
~"POST /api/v3/mappings/resend-security-code~",
~"GET /api/v3/images/<image>~",
~"DELETE /api/v3/mappings~"
)"))))):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,59 @@
module TP_Mobile_PersonalFavorites {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_PersonalFavorites"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-destination-composite-service - PROD~"
)
),entityName.in(
~"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~"
)"))))):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-destination-composite-service - PROD~"
)
),entityName.in(
~"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~"
)"))))):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,57 @@
module TP_Mobile_Remote360 {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Remote360"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/events/[UUID]~",
~"POST /api/v1/events/[UUID]/cancel~",
~"POST /api/v1/event/execute~",
~"GET /api/v1/download/[UUID]/<fileName>~",
~"POST /api/v1/download/[UUID]/<fileName>/confirm~",
~"GET /api/v1/vehicle/<VIN>/egomodelurl~",
~"GET /api/v1/vehicle/<VIN>/key~",
~"GET /api/v1/recordings/vehicle/<VIN>~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/events/[UUID]~",
~"POST /api/v1/events/[UUID]/cancel~",
~"POST /api/v1/event/execute~",
~"GET /api/v1/download/[UUID]/<fileName>~",
~"POST /api/v1/download/[UUID]/<fileName>/confirm~",
~"GET /api/v1/vehicle/<VIN>/egomodelurl~",
~"GET /api/v1/vehicle/<VIN>/key~",
~"GET /api/v1/recordings/vehicle/<VIN>~"
)"))))):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,61 @@
module TP_Mobile_RemoteServices {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_RemoteServices"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-remote-commands-composite-service - PROD~"
)
),entityName.in(
~"POST /api/v2/presentation/remote-commands/<VIN>/door-lock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-unlock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-now~",
~"POST /api/v2/presentation/remote-commands/<VIN>/vehicle-finder~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-timer~",
~"POST /api/v2/presentation/remote-commands/<VIN>/light-flash~",
~"POST /api/v2/presentation/remote-commands/<VIN>/charging-profile~",
~"POST /api/v2/presentation/remote-commands/eventPosition~",
~"GET /api/v1/presentation/remote-history/<VIN>~",
~"POST /api/v2/presentation/remote-commands/eventStatus~"
)"))))):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-remote-commands-composite-service - PROD~"
)
),entityName.in(
~"POST /api/v2/presentation/remote-commands/<VIN>/door-lock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-unlock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-now~",
~"POST /api/v2/presentation/remote-commands/<VIN>/vehicle-finder~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-timer~",
~"POST /api/v2/presentation/remote-commands/<VIN>/light-flash~",
~"POST /api/v2/presentation/remote-commands/<VIN>/charging-profile~",
~"POST /api/v2/presentation/remote-commands/eventPosition~",
~"GET /api/v1/presentation/remote-history/<VIN>~",
~"POST /api/v2/presentation/remote-commands/eventStatus~"
)"))))):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,34 @@
module TP_Mobile_Send2VehicleLegacy {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Send2VehicleLegacy"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((:filter(and(or(in("dt.entity.service",entitySelector("type(service),entityName.in(
~"LegacyPoiApi - msgsvc - prod~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.in(
~"LegacyPoiApi - msgsvc - 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,45 @@
module TP_Mobile_Send2VehicleMGU {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Send2VehicleMGU"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"
)
),entityName.in(
~"/v2/motorist/[UUID]/trips~",
~"/v3/motorist/[UUID]/trips~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"
)
),entityName.in(
~"/v2/motorist/[UUID]/trips~",
~"/v3/motorist/[UUID]/trips~"
)"))))):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,47 @@
module TP_Mobile_VehicleData {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleData"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~",
~"VehicleService - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles/<VIN>/state~",
~"GET /v1/vehicle/<VIN>~"
)"))))):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~",
~"VehicleService - PROD~"
)
),entityName.in(
~"GET /api/v1/vehicles/<VIN>/state~",
~"GET /v1/vehicle/<VIN>~"
)"))))):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,45 @@
module TP_Mobile_VehicleList {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleList"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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,36 @@
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(
~"SimplePOIs~",
~"POIs~"
)
),entityName.in(
~"getSimplePOIs (FTS Calls)~",
~"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

@ -0,0 +1,51 @@
module TP_Mobile_DigitalKey {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_DigitalKey"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(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(
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"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(
~"TrackApi - smc - PROD~",
~"digital-key-composite-service - PROD~"
)
),entityName.in(
~"trackKey~",
~"manageKey~",
~"GET /api/v1/digitalkey/<VIN>/password~",
~"GET /api/v1/digitalkey/<VIN>/pairing~"
)"))))):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,49 @@
module TP_Mobile_Login {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Login"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-user-composite-service - PROD~",
~"btc-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/oauth/config~",
~"GET /api/v1/presentation/profile-tab~",
~"POST /api/v1/oauth/token/identifier~"
)"))))):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-user-composite-service - PROD~",
~"btc-connected-oauth-service - PROD~"
)
),entityName.in(
~"GET /api/v1/presentation/oauth/config~",
~"GET /api/v1/presentation/profile-tab~",
~"POST /api/v1/oauth/token/identifier~"
)"))))):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,69 @@
module TP_Mobile_Mapping {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Mapping"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
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~",
~"POST /api/v1/vehicles/<VIN>/resend-security-code~",
~"DELETE /api/v1/vehicles/<VIN>~",
~"POST /api/v3/mappings/create~",
~"POST /api/v3/mappings/continue~",
~"POST /api/v3/mappings/validate-security-code~",
~"POST /api/v3/mappings/resend-security-code~",
~"GET /api/v3/images/<image>~",
~"DELETE /api/v3/mappings~",
~"POST /api/v2/vehicles/<VIN>/secondary~"
)"))))):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-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~",
~"POST /api/v1/vehicles/<VIN>/resend-security-code~",
~"DELETE /api/v1/vehicles/<VIN>~",
~"POST /api/v3/mappings/create~",
~"POST /api/v3/mappings/continue~",
~"POST /api/v3/mappings/validate-security-code~",
~"POST /api/v3/mappings/resend-security-code~",
~"GET /api/v3/images/<image>~",
~"DELETE /api/v3/mappings~",
~"POST /api/v2/vehicles/<VIN>/secondary~"
)"))))):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,55 @@
module TP_Mobile_PersonalFavorites {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_PersonalFavorites"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-destination-composite-service - PROD~"
)
),entityName.in(
~"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>~"
)"))))):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-destination-composite-service - PROD~"
)
),entityName.in(
~"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>~"
)"))))):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,57 @@
module TP_Mobile_Remote360 {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Remote360"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/events/[UUID]~",
~"POST /api/v1/events/[UUID]/cancel~",
~"POST /api/v1/event/execute~",
~"GET /api/v1/download/[UUID]/<fileName>~",
~"POST /api/v1/download/[UUID]/<fileName>/confirm~",
~"GET /api/v1/vehicle/<VIN>/egomodelurl~",
~"GET /api/v1/vehicle/<VIN>/key~",
~"GET /api/v1/recordings/vehicle/<VIN>~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"remote-360-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v1/events/[UUID]~",
~"POST /api/v1/events/[UUID]/cancel~",
~"POST /api/v1/event/execute~",
~"GET /api/v1/download/[UUID]/<fileName>~",
~"POST /api/v1/download/[UUID]/<fileName>/confirm~",
~"GET /api/v1/vehicle/<VIN>/egomodelurl~",
~"GET /api/v1/vehicle/<VIN>/key~",
~"GET /api/v1/recordings/vehicle/<VIN>~"
)"))))):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,67 @@
module TP_Mobile_RemoteServices {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_RemoteServices"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-remote-commands-composite-service - PROD~"
)
),entityName.in(
~"POST /api/v2/presentation/remote-commands/<VIN>/door-lock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-unlock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-now~",
~"POST /api/v2/presentation/remote-commands/<VIN>/vehicle-finder~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-timer~",
~"POST /api/v2/presentation/remote-commands/<VIN>/light-flash~",
~"POST /api/v3/presentation/remote-commands/<VIN>/horn-blow~",
~"POST /api/v2/presentation/remote-commands/<VIN>/horn-blow~",
~"POST /api/v2/presentation/remote-commands/<VIN>/charging-profile~",
~"POST /api/v2/presentation/remote-commands/eventPosition~",
~"GET /api/v1/presentation/remote-history/<VIN>~",
~"GET /api/v2/presentation/remote-history/<VIN>~",
~"POST /api/v2/presentation/remote-commands/eventStatus~"
)"))))):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-remote-commands-composite-service - PROD~"
)
),entityName.in(
~"POST /api/v2/presentation/remote-commands/<VIN>/door-lock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/door-unlock~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-now~",
~"POST /api/v2/presentation/remote-commands/<VIN>/vehicle-finder~",
~"POST /api/v2/presentation/remote-commands/<VIN>/climate-timer~",
~"POST /api/v2/presentation/remote-commands/<VIN>/light-flash~",
~"POST /api/v3/presentation/remote-commands/<VIN>/horn-blow~",
~"POST /api/v2/presentation/remote-commands/<VIN>/horn-blow~",
~"POST /api/v2/presentation/remote-commands/<VIN>/charging-profile~",
~"POST /api/v2/presentation/remote-commands/eventPosition~",
~"GET /api/v1/presentation/remote-history/<VIN>~",
~"GET /api/v2/presentation/remote-history/<VIN>~",
~"POST /api/v2/presentation/remote-commands/eventStatus~"
)"))))):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,34 @@
module TP_Mobile_Send2VehicleLegacy {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Send2VehicleLegacy"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# metric expression of the calculation as done in data explorer ui
metric_expression = <<EOT
(100)*((:filter(and(or(in("dt.entity.service",entitySelector("type(service),entityName.in(
~"LegacyPoiApi - msgsvc - prod~"
)"))))):splitBy())
/
(builtin:service.requestCount.total:filter(and(or(in("dt.entity.service",entitySelector("type(service),
entityName.in(
~"LegacyPoiApi - msgsvc - 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,45 @@
module TP_Mobile_Send2VehicleMGU {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_Send2VehicleMGU"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"
)
),entityName.in(
~"/v2/motorist/[UUID]/trips~",
~"/v3/motorist/[UUID]/trips~"
)"))))):splitBy())
/
(builtin:service.keyRequest.count.server:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"TripService - PROD~"
)
),entityName.in(
~"/v2/motorist/[UUID]/trips~",
~"/v3/motorist/[UUID]/trips~"
)"))))):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,45 @@
module TP_Mobile_VehicleData {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleData"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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,45 @@
module TP_Mobile_VehicleList {
source = "../../_dynatrace-base-modules/dynatrace-service-level-objective"
name = "TP_Mobile_VehicleList"
description = "2.0 SLO Mobile"
# entity selector object
filter = ""
# 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),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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,36 @@
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(
~"SimplePOIs~",
~"POIs~"
)
),entityName.in(
~"getSimplePOIs (FTS Calls)~",
~"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,45 @@
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.keyRequest.errors.server.successCount:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method),
fromRelationship.isServiceMethodOfService(
type(~"SERVICE~"),entityName.in(
~"btc-vehicle-composite-service - PROD~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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~"
)
),entityName.in(
~"GET /api/v2/vehicles~",
~"GET /api/v4/vehicles~"
)"))))):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,6 +1,6 @@
---
slo_id: ""
slo_name: ''
slo_name: ""
displayname: ""
department: ""
description: ""
@ -38,4 +38,4 @@ slo_definition:
- ""
- service: ""
keyRequests:
- ""
- ""