diff --git a/CN_PROD/slo/TP_Mobile_DigitalKey.tf b/CN_PROD/slo/TP_Mobile_DigitalKey.tf new file mode 100644 index 0000000..a43c09e --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_DigitalKey.tf @@ -0,0 +1,75 @@ +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( + ~"POST /smc2-bl/track/v2/trackKey~", + ~"POST /smc2-bl/track/v2/manageKey~", + ~"GET /api/v1/digitalkey//password~", + ~"GET /api/v1/digitalkey//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( + ~"POST /smc2-bl/track/v2/trackKey~", + ~"POST /smc2-bl/track/v2/manageKey~", + ~"GET /api/v1/digitalkey//password~", + ~"GET /api/v1/digitalkey//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 + +} + +output "TP_Mobile_DigitalKey_metric" { + value = module.TP_Mobile_DigitalKey.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_Login.tf b/CN_PROD/slo/TP_Mobile_Login.tf new file mode 100644 index 0000000..7a0bb0f --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_Login.tf @@ -0,0 +1,73 @@ +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 + +} + +output "TP_Mobile_Login_metric" { + value = module.TP_Mobile_Login.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_Mapping.tf b/CN_PROD/slo/TP_Mobile_Mapping.tf new file mode 100644 index 0000000..bde999b --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_Mapping.tf @@ -0,0 +1,79 @@ +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//primary~", + ~"POST /api/v2/vehicles//primary/map~", + ~"POST /api/v1/vehicles//validate-security-code~", + ~"POST /api/v1/vehicles//resend-security-code~", + ~"DELETE /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-user-composite-service - PROD~", + ~"vehicle-mapping-composite-service - PROD~" + ) + ) + ,entityName.in( + ~"GET /api/v2/presentation/users/validate~", + ~"POST /api/v2/vehicles//primary~", + ~"POST /api/v2/vehicles//primary/map~", + ~"POST /api/v1/vehicles//validate-security-code~", + ~"POST /api/v1/vehicles//resend-security-code~", + ~"DELETE /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 + +} + +output "TP_Mobile_Mapping_metric" { + value = module.TP_Mobile_Mapping.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_PersonalFavorites.tf b/CN_PROD/slo/TP_Mobile_PersonalFavorites.tf new file mode 100644 index 0000000..fbf3cb8 --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_PersonalFavorites.tf @@ -0,0 +1,84 @@ +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/~", + ~"PUT /api/v3/favorites/~", + ~"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/~", + ~"PUT /api/v3/favorites/~", + ~"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 + +} + + +output "TP_Mobile_PersonalFavorites_metric" { + value = module.TP_Mobile_PersonalFavorites.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_Remote360.tf b/CN_PROD/slo/TP_Mobile_Remote360.tf new file mode 100644 index 0000000..3cdda12 --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_Remote360.tf @@ -0,0 +1,81 @@ +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 /eadrax-r360/v1/events/$eventId~", + ~"POST /eadrax-r360/v1/events/$eventId/cancel~", + ~"POST /eadrax-r360/v1/event/execute~", + ~"GET /eadrax-r360/v1/download/$eventId/$fileName~", + ~"POST /eadrax-r360/v1/download/$eventId/$fileName/confirm~", + ~"GET /eadrax-r360/v1/vehicle/$vin/egomodelurl~", + ~"GET /eadrax-r360/v1/vehicle/$vin/key~", + ~"GET /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 /eadrax-r360/v1/events/$eventId~", + ~"POST /eadrax-r360/v1/events/$eventId/cancel~", + ~"POST /eadrax-r360/v1/event/execute~", + ~"GET /eadrax-r360/v1/download/$eventId/$fileName~", + ~"POST /eadrax-r360/v1/download/$eventId/$fileName/confirm~", + ~"GET /eadrax-r360/v1/vehicle/$vin/egomodelurl~", + ~"GET /eadrax-r360/v1/vehicle/$vin/key~", + ~"GET /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 + +} + +output "TP_Mobile_Remote360_metric" { + value = module.TP_Mobile_Remote360.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_RemoteServices.tf b/CN_PROD/slo/TP_Mobile_RemoteServices.tf new file mode 100644 index 0000000..09f1fe6 --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_RemoteServices.tf @@ -0,0 +1,85 @@ +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//door-lock~", + ~"POST /api/v2/presentation/remote-commands//door-unlock~", + ~"POST /api/v2/presentation/remote-commands//climate-now~", + ~"POST /api/v2/presentation/remote-commands//vehicle-finder~", + ~"POST /api/v2/presentation/remote-commands//climate-timer~", + ~"POST /api/v2/presentation/remote-commands//light-flash~", + ~"POST /api/v2/presentation/remote-commands//charging-profile~", + ~"GET /api/v2/presentation/remote-commands/eventPosition~", + ~"GET /api/v1/presentation/remote-history/~", + ~"GET /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//door-lock~", + ~"POST /api/v2/presentation/remote-commands//door-unlock~", + ~"POST /api/v2/presentation/remote-commands//climate-now~", + ~"POST /api/v2/presentation/remote-commands//vehicle-finder~", + ~"POST /api/v2/presentation/remote-commands//climate-timer~", + ~"POST /api/v2/presentation/remote-commands//light-flash~", + ~"POST /api/v2/presentation/remote-commands//charging-profile~", + ~"GET /api/v2/presentation/remote-commands/eventPosition~", + ~"GET /api/v1/presentation/remote-history/~", + ~"GET /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 + +} + +output "TP_Mobile_RemoteServices_metric" { + value = module.TP_Mobile_RemoteServices.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_Send2VehicleLegacy.tf b/CN_PROD/slo/TP_Mobile_Send2VehicleLegacy.tf new file mode 100644 index 0000000..a5219f9 --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_Send2VehicleLegacy.tf @@ -0,0 +1,58 @@ +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)* +((builtin:service.errors.server.successCount:filter( + and( + or( + in( + "dt.entity.service", + entitySelector("type(service), + entityName( + ~"LegacyPoiApi - msgsvc - prod~" + ) + ") + ) + ) +)):splitBy())/ +(builtin:service.requestCount.total:filter( + and( + or( + in( + "dt.entity.service", + entitySelector("type(service), + entityName( + ~"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 + +} + +output "TP_Mobile_Send2VehicleLegacy_metric" { + value = module.TP_Mobile_Send2VehicleLegacy.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_Send2VehicleMGU.tf b/CN_PROD/slo/TP_Mobile_Send2VehicleMGU.tf new file mode 100644 index 0000000..ffa243d --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_Send2VehicleMGU.tf @@ -0,0 +1,69 @@ +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 + +} + +output "TP_Mobile_Send2VehicleMGU_metric" { + value = module.TP_Mobile_Send2VehicleMGU.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_VehicleData.tf b/CN_PROD/slo/TP_Mobile_VehicleData.tf new file mode 100644 index 0000000..17335a5 --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_VehicleData.tf @@ -0,0 +1,72 @@ +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//state~", + ~"GET /v1/vehicle/~" + )") + ) +))):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//state~", + ~"GET /v1/vehicle/~" + )") + ) +))):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 + +} + + +output "TP_Mobile_VehicleData_metric" { + value = module.TP_Mobile_VehicleData.metric_expression +} \ No newline at end of file diff --git a/CN_PROD/slo/TP_Mobile_VehicleList.tf b/CN_PROD/slo/TP_Mobile_VehicleList.tf new file mode 100644 index 0000000..a960632 --- /dev/null +++ b/CN_PROD/slo/TP_Mobile_VehicleList.tf @@ -0,0 +1,65 @@ +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 + +} + +output "TP_Mobile_VehicleList_metric" { + value = module.TP_Mobile_VehicleList.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_DigitalKey.tf b/NA_PROD/slo/TP_Mobile_DigitalKey.tf new file mode 100644 index 0000000..a43c09e --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_DigitalKey.tf @@ -0,0 +1,75 @@ +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( + ~"POST /smc2-bl/track/v2/trackKey~", + ~"POST /smc2-bl/track/v2/manageKey~", + ~"GET /api/v1/digitalkey//password~", + ~"GET /api/v1/digitalkey//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( + ~"POST /smc2-bl/track/v2/trackKey~", + ~"POST /smc2-bl/track/v2/manageKey~", + ~"GET /api/v1/digitalkey//password~", + ~"GET /api/v1/digitalkey//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 + +} + +output "TP_Mobile_DigitalKey_metric" { + value = module.TP_Mobile_DigitalKey.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_Login.tf b/NA_PROD/slo/TP_Mobile_Login.tf new file mode 100644 index 0000000..7a0bb0f --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_Login.tf @@ -0,0 +1,73 @@ +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 + +} + +output "TP_Mobile_Login_metric" { + value = module.TP_Mobile_Login.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_Mapping.tf b/NA_PROD/slo/TP_Mobile_Mapping.tf new file mode 100644 index 0000000..bde999b --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_Mapping.tf @@ -0,0 +1,79 @@ +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//primary~", + ~"POST /api/v2/vehicles//primary/map~", + ~"POST /api/v1/vehicles//validate-security-code~", + ~"POST /api/v1/vehicles//resend-security-code~", + ~"DELETE /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-user-composite-service - PROD~", + ~"vehicle-mapping-composite-service - PROD~" + ) + ) + ,entityName.in( + ~"GET /api/v2/presentation/users/validate~", + ~"POST /api/v2/vehicles//primary~", + ~"POST /api/v2/vehicles//primary/map~", + ~"POST /api/v1/vehicles//validate-security-code~", + ~"POST /api/v1/vehicles//resend-security-code~", + ~"DELETE /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 + +} + +output "TP_Mobile_Mapping_metric" { + value = module.TP_Mobile_Mapping.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_PersonalFavorites.tf b/NA_PROD/slo/TP_Mobile_PersonalFavorites.tf new file mode 100644 index 0000000..cc22853 --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_PersonalFavorites.tf @@ -0,0 +1,80 @@ +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/~", + ~"PUT /api/v3/favorites/~", + ~"DELETE /api/v2/favorites/~" + )") + ) +))):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/~", + ~"PUT /api/v3/favorites/~", + ~"DELETE /api/v2/favorites/~" + )") + ) +))):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 + +} + + +output "TP_Mobile_PersonalFavorites_metric" { + value = module.TP_Mobile_PersonalFavorites.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_Remote360.tf b/NA_PROD/slo/TP_Mobile_Remote360.tf new file mode 100644 index 0000000..3cdda12 --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_Remote360.tf @@ -0,0 +1,81 @@ +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 /eadrax-r360/v1/events/$eventId~", + ~"POST /eadrax-r360/v1/events/$eventId/cancel~", + ~"POST /eadrax-r360/v1/event/execute~", + ~"GET /eadrax-r360/v1/download/$eventId/$fileName~", + ~"POST /eadrax-r360/v1/download/$eventId/$fileName/confirm~", + ~"GET /eadrax-r360/v1/vehicle/$vin/egomodelurl~", + ~"GET /eadrax-r360/v1/vehicle/$vin/key~", + ~"GET /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 /eadrax-r360/v1/events/$eventId~", + ~"POST /eadrax-r360/v1/events/$eventId/cancel~", + ~"POST /eadrax-r360/v1/event/execute~", + ~"GET /eadrax-r360/v1/download/$eventId/$fileName~", + ~"POST /eadrax-r360/v1/download/$eventId/$fileName/confirm~", + ~"GET /eadrax-r360/v1/vehicle/$vin/egomodelurl~", + ~"GET /eadrax-r360/v1/vehicle/$vin/key~", + ~"GET /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 + +} + +output "TP_Mobile_Remote360_metric" { + value = module.TP_Mobile_Remote360.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_RemoteServices.tf b/NA_PROD/slo/TP_Mobile_RemoteServices.tf new file mode 100644 index 0000000..f9a9a44 --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_RemoteServices.tf @@ -0,0 +1,91 @@ +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//door-lock~", + ~"POST /api/v2/presentation/remote-commands//door-unlock~", + ~"POST /api/v2/presentation/remote-commands//climate-now~", + ~"POST /api/v2/presentation/remote-commands//vehicle-finder~", + ~"POST /api/v2/presentation/remote-commands//climate-timer~", + ~"POST /api/v2/presentation/remote-commands//light-flash~", + ~"POST /api/v3/presentation/remote-commands//horn-blow~", + ~"POST /api/v2/presentation/remote-commands//horn-blow~", + ~"POST /api/v2/presentation/remote-commands//charging-profile~", + ~"GET /api/v2/presentation/remote-commands/eventPosition~", + ~"GET /api/v1/presentation/remote-history/~", + ~"GET /api/v2/presentation/remote-history/~", + ~"GET /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//door-lock~", + ~"POST /api/v2/presentation/remote-commands//door-unlock~", + ~"POST /api/v2/presentation/remote-commands//climate-now~", + ~"POST /api/v2/presentation/remote-commands//vehicle-finder~", + ~"POST /api/v2/presentation/remote-commands//climate-timer~", + ~"POST /api/v2/presentation/remote-commands//light-flash~", + ~"POST /api/v3/presentation/remote-commands//horn-blow~", + ~"POST /api/v2/presentation/remote-commands//horn-blow~", + ~"POST /api/v2/presentation/remote-commands//charging-profile~", + ~"GET /api/v2/presentation/remote-commands/eventPosition~", + ~"GET /api/v1/presentation/remote-history/~", + ~"GET /api/v2/presentation/remote-history/~", + ~"GET /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 + +} + +output "TP_Mobile_RemoteServices_metric" { + value = module.TP_Mobile_RemoteServices.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_Send2VehicleLegacy.tf b/NA_PROD/slo/TP_Mobile_Send2VehicleLegacy.tf new file mode 100644 index 0000000..a5219f9 --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_Send2VehicleLegacy.tf @@ -0,0 +1,58 @@ +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)* +((builtin:service.errors.server.successCount:filter( + and( + or( + in( + "dt.entity.service", + entitySelector("type(service), + entityName( + ~"LegacyPoiApi - msgsvc - prod~" + ) + ") + ) + ) +)):splitBy())/ +(builtin:service.requestCount.total:filter( + and( + or( + in( + "dt.entity.service", + entitySelector("type(service), + entityName( + ~"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 + +} + +output "TP_Mobile_Send2VehicleLegacy_metric" { + value = module.TP_Mobile_Send2VehicleLegacy.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_Send2VehicleMGU.tf b/NA_PROD/slo/TP_Mobile_Send2VehicleMGU.tf new file mode 100644 index 0000000..ffa243d --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_Send2VehicleMGU.tf @@ -0,0 +1,69 @@ +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 + +} + +output "TP_Mobile_Send2VehicleMGU_metric" { + value = module.TP_Mobile_Send2VehicleMGU.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_VehicleData.tf b/NA_PROD/slo/TP_Mobile_VehicleData.tf new file mode 100644 index 0000000..17335a5 --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_VehicleData.tf @@ -0,0 +1,72 @@ +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//state~", + ~"GET /v1/vehicle/~" + )") + ) +))):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//state~", + ~"GET /v1/vehicle/~" + )") + ) +))):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 + +} + + +output "TP_Mobile_VehicleData_metric" { + value = module.TP_Mobile_VehicleData.metric_expression +} \ No newline at end of file diff --git a/NA_PROD/slo/TP_Mobile_VehicleList.tf b/NA_PROD/slo/TP_Mobile_VehicleList.tf new file mode 100644 index 0000000..a960632 --- /dev/null +++ b/NA_PROD/slo/TP_Mobile_VehicleList.tf @@ -0,0 +1,65 @@ +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 + +} + +output "TP_Mobile_VehicleList_metric" { + value = module.TP_Mobile_VehicleList.metric_expression +} \ No newline at end of file