diff --git a/DE-3/TP_Mobile_Send2VehicleMGU.yaml b/DE-3/TP_Mobile_Send2VehicleMGU.yaml new file mode 100644 index 0000000..8dee496 --- /dev/null +++ b/DE-3/TP_Mobile_Send2VehicleMGU.yaml @@ -0,0 +1,50 @@ +--- +slo_id: "7" +slo_name: 'TP_Mobile_Send2VehicleMGU' +displayname: "Send to Vehicle (MGU)" +department: "DE-320" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/qFSqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "TripService - PROD" + keyRequests: + - "/v2/motorist/[UUID]/trips" + - "/v3/motorist/[UUID]/trips" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "TripService - PROD" + keyRequests: + - "/v2/motorist/[UUID]/trips" + - "/v3/motorist/[UUID]/trips" + NA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "TripService - PROD" + keyRequests: + - "/v2/motorist/[UUID]/trips" + - "/v3/motorist/[UUID]/trips" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "TripService - PROD" + keyRequests: + - "/v2/motorist/[UUID]/trips" + - "/v3/motorist/[UUID]/trips" + CN-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "TripService - PROD" + keyRequests: + - "/v3/motorist/[UUID]/trips" + - "/v2/motorist/[UUID]/trips" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "TripService - PROD" + keyRequests: + - "/v3/motorist/[UUID]/trips" + - "/v2/motorist/[UUID]/trips" diff --git a/slos/TP_FTS.yaml b/DE-3/TP_Vehicle_FTS.yaml similarity index 91% rename from slos/TP_FTS.yaml rename to DE-3/TP_Vehicle_FTS.yaml index 7719c2f..9597a60 100644 --- a/slos/TP_FTS.yaml +++ b/DE-3/TP_Vehicle_FTS.yaml @@ -1,6 +1,6 @@ --- -slo_id: "" -slo_name: 'Wirkkette "FTS Service" - Reliability of key requests' +slo_id: "14" +slo_name: "TP_Vehicle_FTS" displayname: "Free Text Seach" department: "DE-322" description: "CoCo-QM-Report_Draft" diff --git a/slos/TP_RTTI.yaml b/DE-3/TP_Vehicle_RTTI.yaml similarity index 92% rename from slos/TP_RTTI.yaml rename to DE-3/TP_Vehicle_RTTI.yaml index 05841b2..c8024f7 100644 --- a/slos/TP_RTTI.yaml +++ b/DE-3/TP_Vehicle_RTTI.yaml @@ -1,6 +1,6 @@ --- -slo_id: "WK23" -slo_name: 'Wirkkette "RTTI-Service" - Reliability of key requests' +slo_id: "4" +slo_name: "TP_Vehicle_RTTI" displayname: "Real Time Traffic Info" department: "DE-322" description: "CoCo-QM-Report_Vehicle" diff --git a/slos/TP_Vehicle_eRoute.yaml b/DE-3/TP_Vehicle_eRoute.yaml similarity index 89% rename from slos/TP_Vehicle_eRoute.yaml rename to DE-3/TP_Vehicle_eRoute.yaml index bc4f965..96f9759 100644 --- a/slos/TP_Vehicle_eRoute.yaml +++ b/DE-3/TP_Vehicle_eRoute.yaml @@ -1,6 +1,6 @@ --- -slo_id: "" -slo_name: 'Wirkkette "eRoute Service" - Reliability of key requests' +slo_id: "13" +slo_name: "TP_Vehicle_eRoute" displayname: "eRoute" department: "DE-322" description: "CoCo QM-Report_Vehicle" @@ -28,4 +28,4 @@ slo_definition: - "/api/eu/2.5/eroute-costs/protobuf3" - service: "Netty on 0.0.0.0:8080 - eroute-adapter - prod" keyRequests: - - "/route/eroute" + - "/route/eroute" diff --git a/DE-4/TP_Mobile_Login.yaml b/DE-4/TP_Mobile_Login.yaml new file mode 100644 index 0000000..1dff98b --- /dev/null +++ b/DE-4/TP_Mobile_Login.yaml @@ -0,0 +1,69 @@ +--- +slo_id: "1" +slo_name: "TP_Mobile_Login" +displayname: "Login" +department: "DE-442" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/R1OqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.keyRequest.errors.fivexx.rate" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v1/presentation/oauth/config" + - "GET /api/v1/presentation/profile-tab" + - service: "btc-connected-oauth-service - PROD" + keyRequests: + - "POST /api/v1/oauth/token/identifier" + NA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v1/presentation/oauth/config" + - "GET /api/v1/presentation/profile-tab" + - service: "btc-connected-oauth-service - PROD" + keyRequests: + - "POST /api/v1/oauth/token/identifier" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v1/presentation/oauth/config" + - "GET /api/v1/presentation/profile-tab" + - service: "btc-connected-oauth-service - PROD" + keyRequests: + - "POST /api/v1/oauth/token/identifier" + CN-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "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" + - service: "btc-cn-connected-oauth-service - PROD" + keyRequests: + - "POST /api/v2/cop/login/pwd" + - "POST /api/v2/cop/login/sms" + - "POST /api/v2/cop/sso" + - "GET /api/v1/cop/logout" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "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" + - service: "btc-cn-connected-oauth-service - PROD" + keyRequests: + - "POST /api/v2/cop/login/pwd" + - "POST /api/v2/cop/login/sms" + - "POST /api/v2/cop/sso" + - "GET /api/v1/cop/logout" diff --git a/DE-4/TP_Mobile_Mapping.yaml b/DE-4/TP_Mobile_Mapping.yaml new file mode 100644 index 0000000..96a03c1 --- /dev/null +++ b/DE-4/TP_Mobile_Mapping.yaml @@ -0,0 +1,112 @@ +--- +slo_id: "2" +slo_name: "TP_Mobile_Mapping" +displayname: "Mapping" +department: "DE-443" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/WFOqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v2/presentation/users/validate" + - service: "vehicle-mapping-composite-service - PROD" + keyRequests: + - "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/" + - "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/" + - "DELETE /api/v3/mappings" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v2/presentation/users/validate" + - service: "vehicle-mapping-composite-service - PROD" + keyRequests: + - "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/" + - "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/" + - "DELETE /api/v3/mappings" + NA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v2/presentation/users/validate" + - service: "vehicle-mapping-composite-service - PROD" + keyRequests: + - "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/" + - "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/" + - "DELETE /api/v3/mappings" + - "POST /api/v2/vehicles//secondary" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v2/presentation/users/validate" + - service: "vehicle-mapping-composite-service - PROD" + keyRequests: + - "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/" + - "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/" + - "DELETE /api/v3/mappings" + - "POST /api/v2/vehicles//secondary" + CN-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v2/presentation/users/validate" + - service: "vehicle-mapping-composite-service - PROD" + keyRequests: + - "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/" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-user-composite-service - PROD" + keyRequests: + - "GET /api/v2/presentation/users/validate" + - service: "vehicle-mapping-composite-service - PROD" + keyRequests: + - "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/" diff --git a/DE-4/TP_Mobile_VehicleList.yaml b/DE-4/TP_Mobile_VehicleList.yaml new file mode 100644 index 0000000..c0d18d8 --- /dev/null +++ b/DE-4/TP_Mobile_VehicleList.yaml @@ -0,0 +1,48 @@ +--- +slo_id: "3" +slo_name: "TP_Mobile_VehicleList" +displayname: "Vehicle List" +department: "DE-43" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/c1OqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v2/vehicles" + - "GET /api/v4/vehicles" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v2/vehicles" + - "GET /api/v4/vehicles" + NA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v2/vehicles" + - "GET /api/v4/vehicles" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v2/vehicles" + - "GET /api/v4/vehicles" + CN-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v1/vehicles" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v1/vehicles" diff --git a/DE-7/TP_Mobile_Remote360.yaml b/DE-7/TP_Mobile_Remote360.yaml new file mode 100644 index 0000000..5a3b8bc --- /dev/null +++ b/DE-7/TP_Mobile_Remote360.yaml @@ -0,0 +1,86 @@ +--- +slo_id: "6" +slo_name: "TP_Mobile_Remote360" +displayname: "Remote Camera" +department: "DE-723" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/aVSqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "remote-360-composite-service - PROD" + keyRequests: + - "GET /api/v1/events/[UUID]" + - "POST /api/v1/events/[UUID]/cancel" + - "POST /api/v1/event/execute" + - "GET /api/v1/download/[UUID]/" + - "POST /api/v1/download/[UUID]//confirm" + - "GET /api/v1/vehicle//egomodelurl" + - "GET /api/v1/vehicle//key" + - "GET /api/v1/recordings/vehicle/" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "remote-360-composite-service - PROD" + keyRequests: + - "GET /api/v1/events/[UUID]" + - "POST /api/v1/events/[UUID]/cancel" + - "POST /api/v1/event/execute" + - "GET /api/v1/download/[UUID]/" + - "POST /api/v1/download/[UUID]//confirm" + - "GET /api/v1/vehicle//egomodelurl" + - "GET /api/v1/vehicle//key" + - "GET /api/v1/recordings/vehicle/" + NA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "remote-360-composite-service - PROD" + keyRequests: + - "GET /api/v1/events/[UUID]" + - "POST /api/v1/events/[UUID]/cancel" + - "POST /api/v1/event/execute" + - "GET /api/v1/download/[UUID]/" + - "POST /api/v1/download/[UUID]//confirm" + - "GET /api/v1/vehicle//egomodelurl" + - "GET /api/v1/vehicle//key" + - "GET /api/v1/recordings/vehicle/" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "remote-360-composite-service - PROD" + keyRequests: + - "GET /api/v1/events/[UUID]" + - "POST /api/v1/events/[UUID]/cancel" + - "POST /api/v1/event/execute" + - "GET /api/v1/download/[UUID]/" + - "POST /api/v1/download/[UUID]//confirm" + - "GET /api/v1/vehicle//egomodelurl" + - "GET /api/v1/vehicle//key" + - "GET /api/v1/recordings/vehicle/" + CN-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "remote-360-composite-service - PROD" + keyRequests: + - "GET /api/v1/events/[UUID]" + - "POST /api/v1/events/[UUID]/cancel" + - "POST /api/v1/event/execute" + - "GET /api/v1/download/[UUID]/" + - "POST /api/v1/download/[UUID]//confirm" + - "GET /api/v1/vehicle//egomodelurl" + - "GET /api/v1/vehicle//key" + - "GET /api/v1/recordings/vehicle/" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "remote-360-composite-service - PROD" + keyRequests: + - "GET /api/v1/events/[UUID]" + - "POST /api/v1/events/[UUID]/cancel" + - "POST /api/v1/event/execute" + - "GET /api/v1/download/[UUID]/" + - "POST /api/v1/download/[UUID]//confirm" + - "GET /api/v1/vehicle//egomodelurl" + - "GET /api/v1/vehicle//key" + - "GET /api/v1/recordings/vehicle/" diff --git a/DE-7/TP_Mobile_RemoteServices.yaml b/DE-7/TP_Mobile_RemoteServices.yaml new file mode 100644 index 0000000..a1fb98b --- /dev/null +++ b/DE-7/TP_Mobile_RemoteServices.yaml @@ -0,0 +1,104 @@ +--- +slo_id: "5" +slo_name: "TP_Mobile_RemoteServices" +displayname: "Remote Services" +department: "DE-723" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/dFSqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-remote-commands-composite-service - PROD" + keyRequests: + - "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" + - "POST /api/v2/presentation/remote-commands/eventPosition" + - "GET /api/v1/presentation/remote-history/" + - "POST /api/v2/presentation/remote-commands/eventStatus" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-remote-commands-composite-service - PROD" + keyRequests: + - "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" + - "POST /api/v2/presentation/remote-commands/eventPosition" + - "GET /api/v1/presentation/remote-history/" + - "POST /api/v2/presentation/remote-commands/eventStatus" + NA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-remote-commands-composite-service - PROD" + keyRequests: + - "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" + - "POST /api/v2/presentation/remote-commands/eventPosition" + - "GET /api/v1/presentation/remote-history/" + - "GET /api/v2/presentation/remote-history/" + - "POST /api/v2/presentation/remote-commands/eventStatus" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-remote-commands-composite-service - PROD" + keyRequests: + - "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" + - "POST /api/v2/presentation/remote-commands/eventPosition" + - "GET /api/v1/presentation/remote-history/" + - "GET /api/v2/presentation/remote-history/" + - "POST /api/v2/presentation/remote-commands/eventStatus" + CN-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-remote-commands-composite-service - PROD" + keyRequests: + - "POST /api/v2/presentation/remote-commands/eventStatus" + - "POST /api/v2/presentation/remote-commands//door-lock" + - "POST /api/v2/presentation/remote-commands//door-unlock" + - "POST /api/v2/presentation/remote-commands//climate-now" + - "GET /api/v2/presentation/remote-history/" + - "POST /api/v2/presentation/remote-commands//horn-blow", + - "POST /api/v2/presentation/remote-commands//climate-timer", + - "POST /api/v2/presentation/remote-commands//light-flash", + - "POST /api/v2/presentation/remote-commands//vehicle-finder", + - "GET /api/v1/presentation/remote-history/" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-remote-commands-composite-service - PROD" + keyRequests: + - "POST /api/v2/presentation/remote-commands/eventStatus" + - "POST /api/v2/presentation/remote-commands//door-lock" + - "POST /api/v2/presentation/remote-commands//door-unlock" + - "POST /api/v2/presentation/remote-commands//climate-now" + - "GET /api/v2/presentation/remote-history/" + - "POST /api/v2/presentation/remote-commands//horn-blow", + - "POST /api/v2/presentation/remote-commands//climate-timer", + - "POST /api/v2/presentation/remote-commands//light-flash", + - "POST /api/v2/presentation/remote-commands//vehicle-finder", + - "GET /api/v1/presentation/remote-history/" diff --git a/DE-7/TP_Mobile_Send2VehicleLegacy.yaml b/DE-7/TP_Mobile_Send2VehicleLegacy.yaml new file mode 100644 index 0000000..73da4cc --- /dev/null +++ b/DE-7/TP_Mobile_Send2VehicleLegacy.yaml @@ -0,0 +1,44 @@ +--- +slo_id: "8" +slo_name: "TP_Mobile_Send2VehicleLegacy" +displayname: "Send to Vehicle (Legacy)" +department: "DE-723" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/z1SqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.errors.server.successCount" + filter: + - service: "LegacyPoiApi - msgsvc - prod" + keyRequests: + - "" + - metric: "builtin:service.requestCount.total" + filter: + - service: "LegacyPoiApi - msgsvc - prod" + keyRequests: + - "" + NA-Prod: + - metric: "builtin:service.errors.server.successCount" + filter: + - service: "LegacyPoiApi - msgsvc - prod" + keyRequests: + - "" + - metric: "builtin:service.requestCount.total" + filter: + - service: "LegacyPoiApi - msgsvc - prod" + keyRequests: + - "" + CN-Prod: + - metric: "builtin:service.errors.server.successCount" + filter: + - service: "LegacyPoiApi - msgsvc - prod" + keyRequests: + - "" + - metric: "builtin:service.requestCount.total" + filter: + - service: "LegacyPoiApi - msgsvc - prod" + keyRequests: + - "" diff --git a/DE-7/TP_Mobile_VehicleData.yaml b/DE-7/TP_Mobile_VehicleData.yaml new file mode 100644 index 0000000..9c20e35 --- /dev/null +++ b/DE-7/TP_Mobile_VehicleData.yaml @@ -0,0 +1,52 @@ +--- +slo_id: "4" +slo_name: "TP_Mobile_VehicleData" +displayname: "Vehicle Data" +department: "DE-733" +description: "2.0 SLO Mobile" +doc_url: "https://atc.bmwgroup.net/confluence/x/LFOqdQ" +slo_definition: + tresholds: + warning: 99 #traffic light orange + failure: 98 #traffic light red + EMEA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v1/vehicles//state" + - service: "VehicleService - PROD" + keyRequests: + - "GET /v1/vehicle/" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v1/vehicles//state" + - service: "VehicleService - PROD" + keyRequests: + - "GET /v1/vehicle/" + NA-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v2/vehicles" + - "GET /api/v4/vehicles" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v2/vehicles" + - "GET /api/v4/vehicles" + CN-Prod: + - metric: "builtin:service.keyRequest.errors.server.successCount" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v1/vehicles" + - metric: "builtin:service.keyRequest.count.server" + filter: + - service: "btc-vehicle-composite-service - PROD" + keyRequests: + - "GET /api/v1/vehicles" diff --git a/slos/TP_FTS-example.yaml b/DE-7/TP_Vehicle_FTS.yaml similarity index 66% rename from slos/TP_FTS-example.yaml rename to DE-7/TP_Vehicle_FTS.yaml index a8ec051..fc038d1 100644 --- a/slos/TP_FTS-example.yaml +++ b/DE-7/TP_Vehicle_FTS.yaml @@ -1,7 +1,7 @@ --- -slo_id: "" -slo_name: 'Wirkkette "FTS Service" - Reliability of key requests' -displayname: "Free Text Seach" +slo_id: "14" +slo_name: "TP_Vehicle_FTS" +displayname: "Free Text Search" department: "DE-322" description: "CoCo-QM-Report_Draft" doc_url: "https://atc.bmwgroup.net/confluence/x/YCOqdQ" @@ -10,15 +10,7 @@ slo_definition: warning: 99 #traffic light orange failure: 98 #traffic light red EMEA-Prod: - - metric: "builtin:service.keyRequest.errors.fivexx.count" - filter: - - service: "SimplePOIs" - keyRequests: - - "getSimplePOIs (FTS Calls)" - - service: "POIs" - keyRequests: - - "getPOIs (FTS Calls)" - - metric: "builtin:service.keyRequest.count.server" + - metric: "builtin:service.keyRequest.errors.fivexx.rate" filter: - service: "SimplePOIs" keyRequests: diff --git a/convert.py b/convert.py index bef86f7..3da34ff 100644 --- a/convert.py +++ b/convert.py @@ -1,3 +1,4 @@ +import glob import sys import itertools import jinja2 @@ -5,11 +6,7 @@ import re import yaml import os from nested_lookup import nested_lookup - - -# pre-initialization get current working directory -cwd = os.getcwd() - +from pathlib import Path # defines METRIC_KEYS = 4 @@ -28,27 +25,25 @@ TEMPLATE_FILES = { "calc:service.vehicleservice_oes_fivexx_count", "calc:service.vehicleservice_oes_request_count_total"] } -SLO_FILE_BASENAME = os.path.basename("TP_FTS-example.yaml") - - -# define entries -slo_id = None -slo_name = None -module_name = None -displayname = None -department = None -description = None -doc_url = None -slo_definition_tresholds_warning = None -slo_definition_tresholds_failure = None -environments = [] -metrics = {} -services = {} -keyRequests = {} - +FOLDERS = {"My Journey":"DE-3", + "Connected Vehicle Platforms":"DE-7", + "My Life":"DE-4", + "China Services":"EC-DE"} # methods -def homogenize_metric_list(metrics): +def homogenize_keyRequests(keyRequests): + for metric in metrics: + if len(metrics) < METRIC_KEYS: + metrics.append('') + return metrics + +def homogenize_services(services): + for metric in metrics: + if len(metrics) < METRIC_KEYS: + metrics.append('') + return metrics + +def homogenize_metrics(metrics): for metric in metrics: if len(metrics) < METRIC_KEYS: metrics.append('') @@ -59,22 +54,37 @@ def template_logic(metrics,TEMPLATE_FILES): for template,metric in TEMPLATE_FILES.items(): if set(metrics) == set(metric): return template - print("Problem occured: Exiting program...") + print("Problem occured while matching metric: Exiting program...") sys.exit(0) - # main -def main(): +def main(configFile): + slo_id = None + slo_name = None + module_name = None + displayname = None + department = None + description = None + doc_url = None + slo_definition_tresholds_warning = None + slo_definition_tresholds_failure = None + metrics = {} + services = {} + keyRequests = {} + environments = {} - # read yaml file - with open(os.path.join(SLOS_FOLDER_BASENAME,SLO_FILE_BASENAME)) as f: - slos = list(yaml.safe_load_all(f)) + try: + # read yaml file + with open(configFile) as cF: + slos = list(yaml.safe_load_all(cF)) + except EnvironmentError: + print('Corrupt yaml file:' + str(configFile)) # fill values - for i,slo in enumerate(slos): + for slo in slos: slo_id = slo["slo_id"] slo_name = slo["slo_name"] - module_name = re.sub(r'[^a-zA-Z ]+', '', slo_name).replace(' ', '_').replace('__', '_') + module_name = slo_name displayname = slo["displayname"] description = slo["description"] department = slo["department"] @@ -82,40 +92,77 @@ def main(): slo_definition_tresholds_warning = slo["slo_definition"]["tresholds"]["warning"] slo_definition_tresholds_failure = slo["slo_definition"]["tresholds"]["failure"] slo["slo_definition"].pop("tresholds") - for j,environment in enumerate(slo["slo_definition"]): - environments.append(environment) - metrics[environment] = nested_lookup('metric',slo["slo_definition"][environment]) - services[environment] = '~",\n\t\t\t\t~"'.join(nested_lookup('service',slo["slo_definition"][environment])) - keyRequests[environment] = nested_lookup('keyRequests',slo["slo_definition"][environment]) - keyRequests[environment] = '~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(keyRequests[environment])) - environment = None + + 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] + + # for environment in environments: + # metrics[environment] = nested_lookup('metric',slo["slo_definition"][environment]) + + # for m,metric in enumerate(metrics): + # services[metric] = '~",\n\t\t\t\t~"'.join(nested_lookup('service',slo["slo_definition"][environment][m]["filter"])) + + # keyRequests[environment] = nested_lookup('keyRequests',slo["slo_definition"][environment]) + # keyRequests[environment] = '~",\n\t\t\t\t~"'.join(itertools.chain.from_iterable(keyRequests[environment])) + # read template file jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATE_FOLDER_BASENAME), - trim_blocks=True, - lstrip_blocks=True) + trim_blocks=True, + lstrip_blocks=True) - # create template file - for e,environment in enumerate(environments): + # generate terraform file + for environment in environments: folder_path = os.path.join(cwd,OUTPUT_FOLDER_BASENAME,environment.replace('-','_'),"slo") if not os.path.exists(folder_path): os.makedirs(folder_path) - with open(os.path.join(folder_path,module_name+".yaml"),"w+") as file: - t = template_logic(metrics[environment],TEMPLATE_FILES) - m = homogenize_metric_list(metrics[environment]) + with open(os.path.join(folder_path,module_name+".tf"),"w+") as file: + t = template_logic(nested_lookup('metric',environments[environment]),TEMPLATE_FILES) + m = homogenize_metrics(nested_lookup('metric',environments[environment])) + s = homogenize_services(nested_lookup('service',environments[environment])) + k = homogenize_keyRequests(nested_lookup('keyRequests',environments[environment])) jinja_template = jinja_environment.get_template(t) file.write(jinja_template.render(module=module_name, - slo_name=slo_name, - metric=m[0], - metricA=m[0], - metricB=m[1], - metricC=m[2], - metricD=m[3], - description=description, - service=services[environment], - keyRequest=keyRequests[environment], - target=slo_definition_tresholds_failure, - warning=slo_definition_tresholds_warning)) + slo_name=slo_name, + metric=m[0],metricA=m[0],metricB=m[1],metricC=m[2],metricD=m[3], + description=description, + services=s[0],servicesA=s[0],servicesB=s[1], + keyRequests=k[0],keyRequestsA=k[0],keyRequestsB=k[1], + + target=slo_definition_tresholds_failure, + warning=slo_definition_tresholds_warning)) + if __name__ == "__main__": - main() \ No newline at end of file + + # pre-initialization get current working directory + cwd = os.getcwd() + + print(sys.argv) + if len(sys.argv) != 2: + print(".\convert.py ") + print("Example: .\convert.py DE-3") + print("Example: .\convert.py DE-3,DE-4,...") + sys.exit() + + # init folder + for folderName,businessLine in FOLDERS.items(): + businessLinePath = os.path.join(cwd,os.path.basename(businessLine)) + if not os.path.exists(businessLinePath): + os.makedirs(businessLinePath) + + # for each folder + for arg in [sys.argv[1]]: + # return path of slo config files + configFiles = glob.glob(pathname=os.path.join(cwd,os.path.basename(arg))+'\\*.yaml', + # root_dir=os.path.join(cwd,os.path.basename(arg)), + recursive=True) + + # for each slo config file in folder + for configFile in configFiles: + main(configFile) diff --git a/output/CN_Prod/slo/TP_Mobile_Send2VehicleMGU.tf b/output/CN_Prod/slo/TP_Mobile_Send2VehicleMGU.tf new file mode 100644 index 0000000..0ef7b34 --- /dev/null +++ b/output/CN_Prod/slo/TP_Mobile_Send2VehicleMGU.tf @@ -0,0 +1,51 @@ +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 = </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( - ~"trackKey~", - ~"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 - -} \ No newline at end of file diff --git a/slos/Wirkkette__Online_Entertainment__-_Reliability_of_key_requests.tf b/slos/Wirkkette__Online_Entertainment__-_Reliability_of_key_requests.tf deleted file mode 100644 index c7fef1b..0000000 --- a/slos/Wirkkette__Online_Entertainment__-_Reliability_of_key_requests.tf +++ /dev/null @@ -1,39 +0,0 @@ -module Wirkkette__Online_Entertainment__-_Reliability_of_key_requests { - - source = "../../_dynatrace-base-modules/dynatrace-service-level-objective" - - - name = "Wirkkette \"Online Entertainment\" - Reliability of key requests" - - description = "CoCo-QM-Report_Draft" - - - - #entity selector object - filter = "type(\"SERVICE\")" - - - #metric expression of the calculation as done in data explorer ui - metric_expression = <<-EOT - (100)* - ((1)-(((calc:service.vehicleservice_oes_responsecode_998_requestcount:splitBy():sum) + - (calc:service.vehicleservice_oes_responsecode_999_requestcount:splitBy():sum) + - (calc:service.vehicleservice_oes_fivexx_count:splitBy():sum)) / - (calc:service.vehicleservice_oes_request_count_total:splitBy():sum))) - 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 - -} \ No newline at end of file diff --git a/slos/Wirkkette__Vehicle_List__-_Reliability_of_key_requests.tf b/slos/Wirkkette__Vehicle_List__-_Reliability_of_key_requests.tf deleted file mode 100644 index 87f5ea6..0000000 --- a/slos/Wirkkette__Vehicle_List__-_Reliability_of_key_requests.tf +++ /dev/null @@ -1,51 +0,0 @@ -module Wirkkette__Vehicle_List__-_Reliability_of_key_requests { - - source = "../../_dynatrace-base-modules/dynatrace-service-level-objective" - - - name = "Wirkkette \"Vehicle List\" - Reliability of key requests" - - description = "CoCo-QM-Report_Mobile" - - - - #entity selector object - filter = "" - - - 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~" - )"))))):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~" - )"))))):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 - -} \ No newline at end of file diff --git a/slos/Wirkkette__Vehicle_List__VURS___-_Reliability_of_key_requests.tf b/slos/Wirkkette__Vehicle_List__VURS___-_Reliability_of_key_requests.tf deleted file mode 100644 index 2c9f5f2..0000000 --- a/slos/Wirkkette__Vehicle_List__VURS___-_Reliability_of_key_requests.tf +++ /dev/null @@ -1,33 +0,0 @@ -module Wirkkette__Vehicle_List__VURS___-_Reliability_of_key_requests { - - source = "../../_dynatrace-base-modules/dynatrace-service-level-objective" - - - name = "Wirkkette \"Vehicle List (VURS)\" - Reliability of key requests" - - description = "" - - - - #entity selector object - filter = "entityId(\"SERVICE-BACAE8C1A346B7C9\")" - - - #metric expression of the calculation as done in data explorer ui - metric_expression = "builtin:service.successes.server.rate:splitBy()" - - - #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 - -} \ No newline at end of file diff --git a/templates/terraform-template-2.j2 b/templates/terraform-template-2.j2 index 0c50d33..1bc70f6 100644 --- a/templates/terraform-template-2.j2 +++ b/templates/terraform-template-2.j2 @@ -2,9 +2,9 @@ module {{ module }} { source = "../../_dynatrace-base-modules/dynatrace-service-level-objective" - name = {{ slo_name }} + name = "{{ slo_name }}" - description = {{ description }} + description = "{{ description }}" # entity selector object filter = "" @@ -14,19 +14,19 @@ module {{ module }} { (100)*(({{ metricA }}:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method), fromRelationship.isServiceMethodOfService( type(~"SERVICE~"),entityName.in( - ~"{{ service }}~" + ~"{{ servicesA }}~" ) ),entityName.in( - ~"{{ keyRequest }}~" + ~"{{ keyRequestsA }}~" )"))))):splitBy()) / ({{ metricB }}:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method), fromRelationship.isServiceMethodOfService( type(~"SERVICE~"),entityName.in( - ~"{{ service }}~" + ~"{{ servicesB }}~" ) ),entityName.in( - ~"{{ keyRequest }}~" + ~"{{ keyRequestsB }}~" )"))))):splitBy())) EOT diff --git a/templates/terraform-template-3.j2 b/templates/terraform-template-3.j2 index 819c035..126b8b1 100644 --- a/templates/terraform-template-3.j2 +++ b/templates/terraform-template-3.j2 @@ -2,9 +2,9 @@ module {{ module }} { source = "../../_dynatrace-base-modules/dynatrace-service-level-objective" - name = {{ slo_name }} + name = "{{ slo_name }}" - description = {{ description }} + description = "{{ description }}" # entity selector object filter = "" @@ -14,19 +14,19 @@ module {{ module }} { (100)*((1)-({{ metricA }}:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method), fromRelationship.isServiceMethodOfService( type(~"SERVICE~"),entityName.in( - ~"{{ service }}~" + ~"{{ servicesA }}~" ) ),entityName.in( - ~"{{ keyRequest }}~" + ~"{{ keyRequestsA }}~" )"))))):splitBy()) / ({{ metricB }}:filter(and(or(in("dt.entity.service_method",entitySelector("type(service_method), fromRelationship.isServiceMethodOfService( type(~"SERVICE~"),entityName.in( - ~"{{ service }}~" + ~"{{ servicesA }}~" ) ),entityName.in( - ~"{{ keyRequest }}~" + ~"{{ keyRequestsA }}~" )"))))):splitBy())) EOT diff --git a/templates/terraform-template-4.j2 b/templates/terraform-template-4.j2 index 9f663e9..4eea089 100644 --- a/templates/terraform-template-4.j2 +++ b/templates/terraform-template-4.j2 @@ -2,9 +2,9 @@ module {{ module }} { source = "../../_dynatrace-base-modules/dynatrace-service-level-objective" - name = {{ slo_name }} + name = "{{ slo_name }}" - description = {{ description }} + description = "{{ description }}" # entity selector object filter = "" @@ -13,7 +13,7 @@ module {{ module }} { metric_expression = <<