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