Fix issues
This commit is contained in:
		
							parent
							
								
									f98eee5407
								
							
						
					
					
						commit
						0bd7f74c47
					
				@ -21,10 +21,10 @@ import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.info.RateLimitsNotificationInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.info.RuleOriginatedNotificationInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.NotificationRuleTriggerType;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.RateLimitsNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.util.CollectionsUtil;
 | 
			
		||||
import org.thingsboard.server.common.msg.notification.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.dao.entity.EntityService;
 | 
			
		||||
import org.thingsboard.server.dao.tenant.TenantService;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1277,7 +1277,7 @@ notification_system:
 | 
			
		||||
  thread_pool_size: "${TB_NOTIFICATION_SYSTEM_THREAD_POOL_SIZE:10}"
 | 
			
		||||
  rules:
 | 
			
		||||
    # Semicolon-separated deduplication durations (in millis) for trigger types. Format: 'NotificationRuleTriggerType1:123;NotificationRuleTriggerType2:456'
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:NEW_PLATFORM_VERSION:0;}"
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:NEW_PLATFORM_VERSION:0;RATE_LIMITS:14400000;}"
 | 
			
		||||
 | 
			
		||||
management:
 | 
			
		||||
  endpoints:
 | 
			
		||||
 | 
			
		||||
@ -64,6 +64,8 @@ import org.thingsboard.server.common.data.notification.rule.DefaultNotificationR
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.EscalatedNotificationRuleRecipientsConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.NotificationRule;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.NotificationRuleInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.NewPlatformVersionTrigger;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.AlarmAssignmentNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.AlarmCommentNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.AlarmNotificationRuleTriggerConfig;
 | 
			
		||||
@ -73,7 +75,7 @@ import org.thingsboard.server.common.data.notification.rule.trigger.config.Entit
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.EntityActionNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.NewPlatformVersionNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.RateLimitsNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.targets.NotificationTarget;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.targets.platform.AffectedTenantAdministratorsFilter;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.targets.platform.SystemAdministratorsFilter;
 | 
			
		||||
@ -87,14 +89,12 @@ import org.thingsboard.server.common.data.rule.RuleChain;
 | 
			
		||||
import org.thingsboard.server.common.data.rule.RuleChainMetaData;
 | 
			
		||||
import org.thingsboard.server.common.data.security.Authority;
 | 
			
		||||
import org.thingsboard.server.common.msg.notification.NotificationRuleProcessor;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.NewPlatformVersionTrigger;
 | 
			
		||||
import org.thingsboard.server.common.msg.notification.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.dao.notification.DefaultNotifications;
 | 
			
		||||
import org.thingsboard.server.dao.notification.NotificationRequestService;
 | 
			
		||||
import org.thingsboard.server.dao.rule.RuleChainService;
 | 
			
		||||
import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
			
		||||
import org.thingsboard.server.dao.util.limits.RateLimitService;
 | 
			
		||||
import org.thingsboard.server.service.notification.rule.DefaultNotificationRuleProcessor;
 | 
			
		||||
import org.thingsboard.server.queue.notification.DefaultNotificationDeduplicationService;
 | 
			
		||||
import org.thingsboard.server.service.notification.rule.cache.DefaultNotificationRulesCache;
 | 
			
		||||
import org.thingsboard.server.service.state.DeviceStateService;
 | 
			
		||||
import org.thingsboard.server.service.telemetry.AlarmSubscriptionService;
 | 
			
		||||
@ -125,7 +125,7 @@ import static org.thingsboard.server.common.data.notification.rule.trigger.confi
 | 
			
		||||
@DaoSqlTest
 | 
			
		||||
@TestPropertySource(properties = {
 | 
			
		||||
        "transport.http.enabled=true",
 | 
			
		||||
        "notification_system.rules.trigger_types_configs.RATE_LIMITS.deduplication_duration=10000"
 | 
			
		||||
        "notification_system.rules.deduplication_durations=RATE_LIMITS:10000"
 | 
			
		||||
})
 | 
			
		||||
public class NotificationRuleApiTest extends AbstractNotificationApiTest {
 | 
			
		||||
 | 
			
		||||
@ -700,7 +700,7 @@ public class NotificationRuleApiTest extends AbstractNotificationApiTest {
 | 
			
		||||
                .api(LimitedApi.ENTITY_EXPORT)
 | 
			
		||||
                .limitLevel(tenantId)
 | 
			
		||||
                .build();
 | 
			
		||||
        assertThat(DefaultNotificationRuleProcessor.getDeduplicationKey(expectedTrigger, rule))
 | 
			
		||||
        assertThat(DefaultNotificationDeduplicationService.getDeduplicationKey(expectedTrigger, rule))
 | 
			
		||||
                .isEqualTo("RATE_LIMITS:TENANT:" + tenantId + ":ENTITY_EXPORT_" +
 | 
			
		||||
                        target.getId() + ":ENTITY_EXPORT,TRANSPORT_MESSAGES_PER_DEVICE");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -13,14 +13,14 @@
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.common.msg.notification.trigger;
 | 
			
		||||
package org.thingsboard.server.common.data.notification.rule.trigger;
 | 
			
		||||
 | 
			
		||||
import lombok.Builder;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.limit.LimitedApi;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.NotificationRuleTriggerType;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType;
 | 
			
		||||
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.common.data.notification.rule.trigger;
 | 
			
		||||
package org.thingsboard.server.common.data.notification.rule.trigger.config;
 | 
			
		||||
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Builder;
 | 
			
		||||
@ -31,6 +31,7 @@ import org.thingsboard.server.queue.util.PropertyUtils;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.concurrent.ConcurrentMap;
 | 
			
		||||
 | 
			
		||||
import static org.springframework.util.ConcurrentReferenceHashMap.ReferenceType.SOFT;
 | 
			
		||||
@ -42,7 +43,8 @@ public class DefaultNotificationDeduplicationService implements NotificationDedu
 | 
			
		||||
 | 
			
		||||
    private Map<NotificationRuleTriggerType, Long> deduplicationDurations;
 | 
			
		||||
 | 
			
		||||
    private final CacheManager cacheManager;
 | 
			
		||||
    @Autowired(required = false)
 | 
			
		||||
    private CacheManager cacheManager;
 | 
			
		||||
    private final ConcurrentMap<String, Long> localCache = new ConcurrentReferenceHashMap<>(16, SOFT);
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@ -60,7 +62,7 @@ public class DefaultNotificationDeduplicationService implements NotificationDedu
 | 
			
		||||
    private boolean alreadyProcessed(NotificationRuleTrigger trigger, String deduplicationKey, boolean onlyLocalCache) {
 | 
			
		||||
        Long lastProcessedTs = localCache.get(deduplicationKey);
 | 
			
		||||
        if (lastProcessedTs == null && !onlyLocalCache) {
 | 
			
		||||
            Cache externalCache = cacheManager.getCache(CacheConstants.SENT_NOTIFICATIONS_CACHE);
 | 
			
		||||
            Cache externalCache = getExternalCache();
 | 
			
		||||
            if (externalCache != null) {
 | 
			
		||||
                lastProcessedTs = externalCache.get(deduplicationKey, Long.class);
 | 
			
		||||
            } else {
 | 
			
		||||
@ -86,7 +88,7 @@ public class DefaultNotificationDeduplicationService implements NotificationDedu
 | 
			
		||||
        if (!onlyLocalCache) {
 | 
			
		||||
            if (!alreadyProcessed || deduplicationDuration == 0) {
 | 
			
		||||
                // if lastProcessedTs is changed or if deduplicating infinitely (so that cache value not removed by ttl)
 | 
			
		||||
                Cache externalCache = cacheManager.getCache(CacheConstants.SENT_NOTIFICATIONS_CACHE);
 | 
			
		||||
                Cache externalCache = getExternalCache();
 | 
			
		||||
                if (externalCache != null) {
 | 
			
		||||
                    externalCache.put(deduplicationKey, lastProcessedTs);
 | 
			
		||||
                }
 | 
			
		||||
@ -105,6 +107,12 @@ public class DefaultNotificationDeduplicationService implements NotificationDedu
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Cache getExternalCache() {
 | 
			
		||||
        return Optional.ofNullable(cacheManager)
 | 
			
		||||
                .map(cacheManager -> cacheManager.getCache(CacheConstants.SENT_NOTIFICATIONS_CACHE))
 | 
			
		||||
                .orElse(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public void setDeduplicationDurations(@Value("${notification_system.rules.deduplication_durations:}")
 | 
			
		||||
                                          String deduplicationDurationsStr) {
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ import org.thingsboard.server.common.data.rpc.RpcStatus;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsg;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
 | 
			
		||||
import org.thingsboard.server.common.msg.notification.NotificationRuleProcessor;
 | 
			
		||||
import org.thingsboard.server.common.msg.notification.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.common.msg.queue.ServiceType;
 | 
			
		||||
import org.thingsboard.server.common.msg.queue.TopicPartitionInfo;
 | 
			
		||||
import org.thingsboard.server.common.msg.session.SessionMsgType;
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,7 @@ import org.thingsboard.server.common.data.notification.rule.trigger.config.Entit
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.NewPlatformVersionNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.RateLimitsNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.config.RuleEngineComponentLifecycleEventNotificationRuleTriggerConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.template.NotificationTemplate;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.template.NotificationTemplateConfig;
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.limit.LimitedApi;
 | 
			
		||||
import org.thingsboard.server.common.msg.notification.NotificationRuleProcessor;
 | 
			
		||||
import org.thingsboard.server.common.msg.notification.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.common.data.notification.rule.trigger.RateLimitsTrigger;
 | 
			
		||||
import org.thingsboard.server.common.msg.tools.TbRateLimits;
 | 
			
		||||
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -206,7 +206,5 @@ service:
 | 
			
		||||
 | 
			
		||||
notification_system:
 | 
			
		||||
  rules:
 | 
			
		||||
    trigger_types_configs:
 | 
			
		||||
      RATE_LIMITS:
 | 
			
		||||
        # In milliseconds, 4 hours by default
 | 
			
		||||
        deduplication_duration: "${RATE_LIMITS_NOTIFICATION_RULE_DEDUPLICATION_DURATION:14400000}"
 | 
			
		||||
    # Semicolon-separated deduplication durations (in millis) for trigger types. Format: 'NotificationRuleTriggerType1:123;NotificationRuleTriggerType2:456'
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:RATE_LIMITS:14400000;}"
 | 
			
		||||
 | 
			
		||||
@ -315,7 +315,5 @@ management:
 | 
			
		||||
 | 
			
		||||
notification_system:
 | 
			
		||||
  rules:
 | 
			
		||||
    trigger_types_configs:
 | 
			
		||||
      RATE_LIMITS:
 | 
			
		||||
        # In milliseconds, 4 hours by default
 | 
			
		||||
        deduplication_duration: "${RATE_LIMITS_NOTIFICATION_RULE_DEDUPLICATION_DURATION:14400000}"
 | 
			
		||||
    # Semicolon-separated deduplication durations (in millis) for trigger types. Format: 'NotificationRuleTriggerType1:123;NotificationRuleTriggerType2:456'
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:RATE_LIMITS:14400000;}"
 | 
			
		||||
 | 
			
		||||
@ -300,7 +300,5 @@ management:
 | 
			
		||||
 | 
			
		||||
notification_system:
 | 
			
		||||
  rules:
 | 
			
		||||
    trigger_types_configs:
 | 
			
		||||
      RATE_LIMITS:
 | 
			
		||||
        # In milliseconds, 4 hours by default
 | 
			
		||||
        deduplication_duration: "${RATE_LIMITS_NOTIFICATION_RULE_DEDUPLICATION_DURATION:14400000}"
 | 
			
		||||
    # Semicolon-separated deduplication durations (in millis) for trigger types. Format: 'NotificationRuleTriggerType1:123;NotificationRuleTriggerType2:456'
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:RATE_LIMITS:14400000;}"
 | 
			
		||||
 | 
			
		||||
@ -382,7 +382,5 @@ management:
 | 
			
		||||
 | 
			
		||||
notification_system:
 | 
			
		||||
  rules:
 | 
			
		||||
    trigger_types_configs:
 | 
			
		||||
      RATE_LIMITS:
 | 
			
		||||
        # In milliseconds, 4 hours by default
 | 
			
		||||
        deduplication_duration: "${RATE_LIMITS_NOTIFICATION_RULE_DEDUPLICATION_DURATION:14400000}"
 | 
			
		||||
    # Semicolon-separated deduplication durations (in millis) for trigger types. Format: 'NotificationRuleTriggerType1:123;NotificationRuleTriggerType2:456'
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:RATE_LIMITS:14400000;}"
 | 
			
		||||
 | 
			
		||||
@ -330,7 +330,5 @@ management:
 | 
			
		||||
 | 
			
		||||
notification_system:
 | 
			
		||||
  rules:
 | 
			
		||||
    trigger_types_configs:
 | 
			
		||||
      RATE_LIMITS:
 | 
			
		||||
        # In milliseconds, 4 hours by default
 | 
			
		||||
        deduplication_duration: "${RATE_LIMITS_NOTIFICATION_RULE_DEDUPLICATION_DURATION:14400000}"
 | 
			
		||||
    # Semicolon-separated deduplication durations (in millis) for trigger types. Format: 'NotificationRuleTriggerType1:123;NotificationRuleTriggerType2:456'
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:RATE_LIMITS:14400000;}"
 | 
			
		||||
 | 
			
		||||
@ -280,7 +280,5 @@ management:
 | 
			
		||||
 | 
			
		||||
notification_system:
 | 
			
		||||
  rules:
 | 
			
		||||
    trigger_types_configs:
 | 
			
		||||
      RATE_LIMITS:
 | 
			
		||||
        # In milliseconds, 4 hours by default
 | 
			
		||||
        deduplication_duration: "${RATE_LIMITS_NOTIFICATION_RULE_DEDUPLICATION_DURATION:14400000}"
 | 
			
		||||
    # Semicolon-separated deduplication durations (in millis) for trigger types. Format: 'NotificationRuleTriggerType1:123;NotificationRuleTriggerType2:456'
 | 
			
		||||
    deduplication_durations: "${TB_NOTIFICATION_RULES_DEDUPLICATION_DURATIONS:RATE_LIMITS:14400000;}"
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user