diff --git a/.rhcicd/clowdapp-recipients-resolver.yaml b/.rhcicd/clowdapp-recipients-resolver.yaml
index f718d0711d..5e644d5bb3 100644
--- a/.rhcicd/clowdapp-recipients-resolver.yaml
+++ b/.rhcicd/clowdapp-recipients-resolver.yaml
@@ -63,37 +63,12 @@ objects:
successThreshold: 1
failureThreshold: 5
env:
- - name: NOTIFICATIONS_USE_RBAC_FOR_FETCHING_USERS
- value: ${NOTIFICATIONS_USE_RBAC_FOR_FETCHING_USERS}
- - name: QUARKUS_REST_CLIENT_IT_S2S_KEY_STORE
- value: ${IT_SERVICE_TO_SERVICE_KEY_STORE}
- - name: QUARKUS_REST_CLIENT_IT_S2S_KEY_STORE_PASSWORD
- valueFrom:
- secretKeyRef:
- name: it-services
- key: it-services-keystorepassword
- optional: true
- - name: QUARKUS_REST_CLIENT_IT_S2S_URL
- valueFrom:
- secretKeyRef:
- name: it-services
- key: url
- optional: true
- - name: QUARKUS_REST_CLIENT_RBAC_S2S_READ_TIMEOUT
- value: ${RBAC_S2S_READ_TIMEOUT}
- - name: RBAC_SERVICE_TO_SERVICE_APPLICATION
- value: ${RBAC_SERVICE_TO_SERVICE_APP}
- - name: RBAC_SERVICE_TO_SERVICE_SECRET_MAP
- valueFrom:
- secretKeyRef:
- name: rbac-psks
- key: psks.json
- - name: RECIPIENT_PROVIDER_IT_MAX_RESULTS_PER_PAGE
- value: ${RECIPIENT_PROVIDER_IT_MAX_RESULTS_PER_PAGE}
- - name: RECIPIENT_PROVIDER_RBAC_ELEMENTS_PER_PAGE
- value: ${RECIPIENT_PROVIDER_RBAC_ELEMENTS_PER_PAGE}
- - name: RECIPIENT_PROVIDER_USE_IT_IMPL
- value: ${RECIPIENT_PROVIDER_USE_IT_IMPL}
+ - name: NOTIFICATIONS_RECIPIENTS_RESOLVER_MAX_RESULTS_PER_PAGE
+ value: ${NOTIFICATIONS_RECIPIENTS_RESOLVER_MAX_RESULTS_PER_PAGE}
+ - name: NOTIFICATIONS_RECIPIENTS_RESOLVER_FETCH_USERS_MBOP_ENABLED
+ value: ${NOTIFICATIONS_RECIPIENTS_RESOLVER_FETCH_USERS_MBOP_ENABLED}
+ - name: NOTIFICATIONS_RECIPIENTS_RESOLVER_FETCH_USERS_RBAC_ENABLED
+ value: ${NOTIFICATIONS_RECIPIENTS_RESOLVER_FETCH_USERS_RBAC_ENABLED}
- name: QUARKUS_CACHE_CAFFEINE_RBAC_RECIPIENT_USERS_PROVIDER_GET_USERS_EXPIRE_AFTER_WRITE
value: ${RBAC_USERS_RETENTION_DELAY}
- name: QUARKUS_CACHE_CAFFEINE_RBAC_RECIPIENT_USERS_PROVIDER_GET_GROUP_USERS_EXPIRE_AFTER_WRITE
@@ -102,6 +77,8 @@ objects:
value: "9000"
- name: QUARKUS_LOG_CATEGORY__COM_REDHAT_CLOUD_NOTIFICATIONS__LEVEL
value: ${NOTIFICATIONS_LOG_LEVEL}
+ - name: QUARKUS_LOG_CATEGORY__ORG_JBOSS_RESTEASY_REACTIVE_CLIENT_LOGGING__LEVEL
+ value: ${QUARKUS_LOG_CATEGORY__ORG_JBOSS_RESTEASY_REACTIVE_CLIENT_LOGGING__LEVEL}
- name: QUARKUS_LOG_CLOUDWATCH_API_CALL_TIMEOUT
value: ${QUARKUS_LOG_CLOUDWATCH_API_CALL_TIMEOUT}
- name: QUARKUS_LOG_CLOUDWATCH_BATCH_PERIOD
@@ -122,12 +99,31 @@ objects:
value: ${SENTRY_DSN}${ENV_NAME}
- name: QUARKUS_LOG_SENTRY_ENVIRONMENT
value: ${ENV_NAME}
+ - name: QUARKUS_REST_CLIENT_IT_S2S_KEY_STORE
+ value: ${IT_SERVICE_TO_SERVICE_KEY_STORE}
+ - name: QUARKUS_REST_CLIENT_IT_S2S_KEY_STORE_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: it-services
+ key: it-services-keystorepassword
+ optional: true
+ - name: QUARKUS_REST_CLIENT_IT_S2S_URL
+ valueFrom:
+ secretKeyRef:
+ name: it-services
+ key: url
+ optional: true
- name: QUARKUS_REST_CLIENT_LOGGING_SCOPE
value: ${QUARKUS_REST_CLIENT_LOGGING_SCOPE}
- - name: QUARKUS_LOG_CATEGORY__ORG_JBOSS_RESTEASY_REACTIVE_CLIENT_LOGGING__LEVEL
- value: ${QUARKUS_LOG_CATEGORY__ORG_JBOSS_RESTEASY_REACTIVE_CLIENT_LOGGING__LEVEL}
- - name: NOTIFICATIONS_USE_MBOP_FOR_FETCHING_USERS
- value: ${NOTIFICATIONS_USE_MBOP_FOR_FETCHING_USERS}
+ - name: QUARKUS_REST_CLIENT_RBAC_S2S_READ_TIMEOUT
+ value: ${RBAC_S2S_READ_TIMEOUT}
+ - name: RBAC_SERVICE_TO_SERVICE_APPLICATION
+ value: ${RBAC_SERVICE_TO_SERVICE_APP}
+ - name: RBAC_SERVICE_TO_SERVICE_SECRET_MAP
+ valueFrom:
+ secretKeyRef:
+ name: rbac-psks
+ key: psks.json
parameters:
- name: CLOUDWATCH_ENABLED
description: Enable Cloudwatch (or not)
@@ -146,6 +142,11 @@ parameters:
value: quay.io/cloudservices/notifications-recipient-resolver
- name: IMAGE_TAG
value: latest
+- name: IO_SMALLRYE_REACTIVE_MESSAGING_LOG_LEVEL
+ value: INFO
+- name: IT_SERVICE_TO_SERVICE_KEY_STORE
+ description: "Key store for secured connection if communicating with IT. It should be set to file:/mnt/secrets/clientkeystore.jks"
+ value: ""
- name: MEMORY_LIMIT
description: Memory limit
value: 500Mi
@@ -157,6 +158,18 @@ parameters:
- name: NOTIFICATIONS_LOG_LEVEL
description: Log level for com.redhat.cloud.notifications
value: INFO
+- name: NOTIFICATIONS_RECIPIENTS_RESOLVER_MAX_RESULTS_PER_PAGE
+ description: Limit value sent to the external users service while querying users.
+ value: "1000"
+- name: NOTIFICATIONS_RECIPIENTS_RESOLVER_FETCH_USERS_MBOP_ENABLED
+ description: Users from an organization will be retrieved from MBOP if true
+ value: "false"
+- name: NOTIFICATIONS_RECIPIENTS_RESOLVER_FETCH_USERS_RBAC_ENABLED
+ description: Users from an organization will be retrieved from RBAC if true
+ value: "true"
+- name: QUARKUS_LOG_CATEGORY__ORG_JBOSS_RESTEASY_REACTIVE_CLIENT_LOGGING__LEVEL
+ description: When QUARKUS_REST_CLIENT_LOGGING_SCOPE is set to 'request-response', this logger level needs to be set to DEBUG
+ value: INFO
- name: QUARKUS_LOG_CLOUDWATCH_API_CALL_TIMEOUT
description: Amount of time to allow the CloudWatch client to complete the execution of an API call expressed with the ISO-8601 duration format PnDTnHnMn.nS.
value: PT30S
@@ -169,45 +182,23 @@ parameters:
- name: QUARKUS_LOG_CLOUDWATCH_MAX_QUEUE_SIZE
description: Optional maximum size of the log events queue. If this is not set, the queue will have a capacity of Integer#MAX_VALUE.
value: "100000"
-- name: RBAC_S2S_READ_TIMEOUT
- description: Delay in milliseconds before an RBAC S2S query is interrupted
- value: "120000"
+- name: QUARKUS_REST_CLIENT_LOGGING_SCOPE
+ description: When set to 'request-response', rest-client will log the request and response contents
+ value: ""
- name: RBAC_GROUP_USERS_RETENTION_DELAY
description: RBAC group users data cache retention delay. It must be expressed with the ISO-8601 duration format PnDTnHnMn.nS.
value: PT10M
+- name: RBAC_S2S_READ_TIMEOUT
+ description: Delay in milliseconds before an RBAC S2S query is interrupted
+ value: "120000"
- name: RBAC_SERVICE_TO_SERVICE_APP
description: RBAC application name to use for service-to-service communication
value: notifications
- name: RBAC_USERS_RETENTION_DELAY
description: RBAC users data cache retention delay. It must be expressed with the ISO-8601 duration format PnDTnHnMn.nS.
value: PT10M
-- name: RECIPIENT_PROVIDER_IT_MAX_RESULTS_PER_PAGE
- description: Limit value sent to the IT API while querying users.
- value: "1000"
-- name: RECIPIENT_PROVIDER_RBAC_ELEMENTS_PER_PAGE
- description: Limit value sent as a query param to the RBAC REST API while querying RBAC users.
- value: "1000"
-- name: RECIPIENT_PROVIDER_USE_IT_IMPL
- description: Temporary recipients retrieval switch between RBAC and IT
- value: "false"
- name: SENTRY_DSN
description: The DSN to push data to Sentry — i.e. https://public_key@host/project_id?environment=
- name: SENTRY_ENABLED
description: Enable Sentry (or not)
value: "false"
-- name: NOTIFICATIONS_USE_RBAC_FOR_FETCHING_USERS
- description: Users from an organization will be retrieved from RBAC if true or from the IT users service otherwise.
- value: "true"
-- name: IT_SERVICE_TO_SERVICE_KEY_STORE
- description: "Key store for secured connection if communicating with IT. It should be set to file:/mnt/secrets/clientkeystore.jks"
- value: ""
-- name: IO_SMALLRYE_REACTIVE_MESSAGING_LOG_LEVEL
- value: INFO
-- name: QUARKUS_REST_CLIENT_LOGGING_SCOPE
- description: When set to 'request-response', rest-client will log the request and response contents
- value: ""
-- name: QUARKUS_LOG_CATEGORY__ORG_JBOSS_RESTEASY_REACTIVE_CLIENT_LOGGING__LEVEL
- description: When QUARKUS_REST_CLIENT_LOGGING_SCOPE is set to 'request-response', this logger level needs to be set to DEBUG
- value: INFO
-- name: NOTIFICATIONS_USE_MBOP_FOR_FETCHING_USERS
- value: "false"
diff --git a/recipients-resolver/pom.xml b/recipients-resolver/pom.xml
index a71888dea4..661160655d 100644
--- a/recipients-resolver/pom.xml
+++ b/recipients-resolver/pom.xml
@@ -12,36 +12,6 @@
1.0.0-SNAPSHOT
-
-
-
-
- resolve-test-jars-if-tests-are-not-skipped
-
-
- maven.test.skip
- !true
-
-
-
-
- com.redhat.cloud.notifications
- notifications-common
- ${project.version}
- test-jar
- test
-
-
-
-
-
-
@@ -49,24 +19,25 @@
io.quarkus
- quarkus-micrometer-registry-prometheus
+ quarkus-cache
io.quarkus
- quarkus-rest-client-reactive-jackson
+ quarkus-hibernate-validator
io.quarkus
- quarkus-resteasy-reactive-jackson
+ quarkus-micrometer-registry-prometheus
io.quarkus
- quarkus-cache
+ quarkus-rest-client-reactive-jackson
io.quarkus
- quarkus-hibernate-validator
+ quarkus-resteasy-reactive-jackson
+
io.quarkiverse.logging.cloudwatch
diff --git a/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/config/RecipientsResolverConfig.java b/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/config/RecipientsResolverConfig.java
index 2ea46307f6..d7d8db0c53 100644
--- a/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/config/RecipientsResolverConfig.java
+++ b/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/config/RecipientsResolverConfig.java
@@ -10,47 +10,23 @@
@ApplicationScoped
public class RecipientsResolverConfig {
- @ConfigProperty(name = "notifications.connector.fetch.users.rbac.enabled", defaultValue = "false")
+ @ConfigProperty(name = "notifications.recipients-resolver.fetch.users.rbac.enabled", defaultValue = "false")
boolean fetchUsersWithRBAC;
- @ConfigProperty(name = "notifications.connector.fetch.users.mbop.enabled", defaultValue = "false")
+ @ConfigProperty(name = "notifications.recipients-resolver.fetch.users.mbop.enabled", defaultValue = "false")
boolean fetchUsersWithMbop;
- @ConfigProperty(name = "recipients-provider.rbac.elements-per-page", defaultValue = "1000")
- int rbacMaxResultsPerPage;
+ @ConfigProperty(name = "notifications.recipients-resolver.max-results-per-page", defaultValue = "1000")
+ int maxResultsPerPage;
- @ConfigProperty(name = "recipients-provider.it.max-results-per-page", defaultValue = "1000")
- int itMaxResultsPerPage;
+ @ConfigProperty(name = "notifications.recipients-resolver.retry.max-attempts", defaultValue = "3")
+ int maxRetryAttempts;
- @ConfigProperty(name = "recipients-provider.mbop.max-results-per-page", defaultValue = "1000")
- int MBOPMaxResultsPerPage;
+ @ConfigProperty(name = "notifications.recipients-resolver.retry.initial-backoff", defaultValue = "0.1S")
+ Duration initialRetryBackoff;
- @ConfigProperty(name = "rbac.retry.max-attempts", defaultValue = "3")
- int rbacMaxRetryAttempts;
-
- @ConfigProperty(name = "it.retry.max-attempts", defaultValue = "3")
- int itMaxRetryAttempts;
-
- @ConfigProperty(name = "mbop.retry.max-attempts", defaultValue = "3")
- int MBOPMaxRetryAttempts;
-
- @ConfigProperty(name = "it.retry.back-off.initial-value", defaultValue = "0.1S")
- Duration itInitialBackOff;
-
- @ConfigProperty(name = "it.retry.back-off.max-value", defaultValue = "1S")
- Duration itMaxBackOff;
-
- @ConfigProperty(name = "rbac.retry.back-off.initial-value", defaultValue = "0.1S")
- Duration rbacInitialBackOff;
-
- @ConfigProperty(name = "rbac.retry.back-off.max-value", defaultValue = "1S")
- Duration rbacMaxBackOff;
-
- @ConfigProperty(name = "mbop.retry.back-off.initial-value", defaultValue = "0.1S")
- Duration MBOPInitialBackOff;
-
- @ConfigProperty(name = "mbop.retry.back-off.max-value", defaultValue = "1S")
- Duration MBOPMaxBackOff;
+ @ConfigProperty(name = "notifications.recipients-resolver.retry.max-backoff", defaultValue = "1S")
+ Duration maxRetryBackoff;
@ConfigProperty(name = "mbop.apitoken", defaultValue = "na")
String mbopApiToken;
@@ -66,18 +42,10 @@ void logFeaturesStatusAtStartup(@Observes StartupEvent event) {
Log.infof("The fetching users with Rbac is %s", fetchUsersWithRBAC ? "enabled" : "disabled");
Log.infof("The fetching users with Mbop is %s", fetchUsersWithMbop ? "enabled" : "disabled");
Log.infof("The fetching users with IT Service is %s", !(fetchUsersWithRBAC || fetchUsersWithMbop) ? "enabled" : "disabled");
- Log.infof("The max result per page for IT Service is %s", itMaxResultsPerPage);
- Log.infof("The max result per page for Mbop is %s", MBOPMaxResultsPerPage);
- Log.infof("The max result per page for Rbac is %s", rbacMaxResultsPerPage);
- Log.infof("The max retry attempts for IT Service is %s", itMaxRetryAttempts);
- Log.infof("The max retry attempts for Mbop is %s", MBOPMaxRetryAttempts);
- Log.infof("The max retry attempts for Rbac is %s", rbacMaxRetryAttempts);
- Log.infof("The retry back-off initial value for IT Service is %s", itInitialBackOff);
- Log.infof("The retry back-off initial value for Mbop is %s", MBOPInitialBackOff);
- Log.infof("The retry back-off initial value for Rbac is %s", rbacInitialBackOff);
- Log.infof("The max retry back-off value for IT Service is %s", itMaxBackOff);
- Log.infof("The max retry back-off value for MBOP is %s", MBOPMaxBackOff);
- Log.infof("The max retry back-off value for rbac is %s", rbacMaxBackOff);
+ Log.infof("The max result per page is %s", maxResultsPerPage);
+ Log.infof("The max retry attempts is %s", maxRetryAttempts);
+ Log.infof("The retry back-off initial value is %s", initialRetryBackoff);
+ Log.infof("The max retry back-off value is %s", maxRetryBackoff);
Log.infof("The MBOP env is %s", mbopEnv);
}
@@ -97,52 +65,20 @@ public void setFetchUsersWithMbop(boolean fetchUsersWithMbop) {
this.fetchUsersWithMbop = fetchUsersWithMbop;
}
- public Integer getRbacMaxResultsPerPage() {
- return rbacMaxResultsPerPage;
- }
-
- public int getItMaxResultsPerPage() {
- return itMaxResultsPerPage;
- }
-
- public int getMBOPMaxResultsPerPage() {
- return MBOPMaxResultsPerPage;
- }
-
- public int getRbacMaxRetryAttempts() {
- return rbacMaxRetryAttempts;
- }
-
- public int getItMaxRetryAttempts() {
- return itMaxRetryAttempts;
- }
-
- public int getMBOPMaxRetryAttempts() {
- return MBOPMaxRetryAttempts;
- }
-
- public Duration getItInitialBackOff() {
- return itInitialBackOff;
- }
-
- public Duration getItMaxBackOff() {
- return itMaxBackOff;
- }
-
- public Duration getRbacInitialBackOff() {
- return rbacInitialBackOff;
+ public int getMaxResultsPerPage() {
+ return maxResultsPerPage;
}
- public Duration getRbacMaxBackOff() {
- return rbacMaxBackOff;
+ public int getMaxRetryAttempts() {
+ return maxRetryAttempts;
}
- public Duration getMBOPInitialBackOff() {
- return MBOPInitialBackOff;
+ public Duration getInitialRetryBackoff() {
+ return initialRetryBackoff;
}
- public Duration getMBOPMaxBackOff() {
- return MBOPMaxBackOff;
+ public Duration getMaxRetryBackoff() {
+ return maxRetryBackoff;
}
public String getMbopApiToken() {
diff --git a/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/model/User.java b/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/model/User.java
index 5642f07453..a765bce957 100644
--- a/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/model/User.java
+++ b/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/model/User.java
@@ -6,8 +6,7 @@ public class User {
private String id;
private String username;
- private Boolean isActive;
- private Boolean isAdmin;
+ private boolean admin;
public String getId() {
return id;
@@ -25,20 +24,12 @@ public void setUsername(String username) {
this.username = username;
}
- public Boolean isActive() {
- return isActive;
+ public boolean isAdmin() {
+ return admin;
}
- public void setActive(Boolean active) {
- isActive = active;
- }
-
- public Boolean isAdmin() {
- return isAdmin;
- }
-
- public void setAdmin(Boolean admin) {
- isAdmin = admin;
+ public void setAdmin(boolean admin) {
+ this.admin = admin;
}
@Override
diff --git a/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/resolver/FetchUsersFromExternalServices.java b/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/resolver/FetchUsersFromExternalServices.java
index be8c3b3e0e..4fab774e62 100644
--- a/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/resolver/FetchUsersFromExternalServices.java
+++ b/recipients-resolver/src/main/java/com/redhat/cloud/notifications/recipients/resolver/FetchUsersFromExternalServices.java
@@ -20,7 +20,6 @@
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.Timer;
-import io.netty.channel.ConnectTimeoutException;
import io.quarkus.cache.CacheResult;
import io.quarkus.logging.Log;
import jakarta.annotation.PostConstruct;
@@ -41,6 +40,8 @@
import java.util.function.Function;
import java.util.stream.Collectors;
+import static java.lang.Boolean.TRUE;
+
@ApplicationScoped
public class FetchUsersFromExternalServices {
@@ -65,60 +66,31 @@ public class FetchUsersFromExternalServices {
@RestClient
ITUserService itUserService;
- private Counter rbacFailuresCounter;
-
- private RetryPolicy