updated
parent
071c415a93
commit
f1ab6ce267
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
225
README.md
|
|
@ -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
|
||||
```
|
||||
|
|
|
|||
49
generate.py
49
generate.py
|
|
@ -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.")
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
slo_id: ""
|
||||
slo_name: ''
|
||||
slo_name: ""
|
||||
displayname: ""
|
||||
department: ""
|
||||
description: ""
|
||||
|
|
@ -38,4 +38,4 @@ slo_definition:
|
|||
- ""
|
||||
- service: ""
|
||||
keyRequests:
|
||||
- ""
|
||||
- ""
|
||||
Loading…
Reference in New Issue