feat(alerting): core repository interfaces
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package com.cameleer.server.core.alerting;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface AlertInstanceRepository {
|
||||
AlertInstance save(AlertInstance instance); // upsert by id
|
||||
Optional<AlertInstance> findById(UUID id);
|
||||
Optional<AlertInstance> findOpenForRule(UUID ruleId); // state IN ('PENDING','FIRING','ACKNOWLEDGED')
|
||||
List<AlertInstance> listForInbox(UUID environmentId,
|
||||
List<String> userGroupIdFilter,
|
||||
String userId,
|
||||
List<String> userRoleNames,
|
||||
int limit);
|
||||
long countUnreadForUser(UUID environmentId, String userId);
|
||||
void ack(UUID id, String userId, Instant when);
|
||||
void resolve(UUID id, Instant when);
|
||||
void markSilenced(UUID id, boolean silenced);
|
||||
void deleteResolvedBefore(Instant cutoff);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.cameleer.server.core.alerting;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface AlertNotificationRepository {
|
||||
AlertNotification save(AlertNotification n);
|
||||
Optional<AlertNotification> findById(UUID id);
|
||||
List<AlertNotification> listForInstance(UUID alertInstanceId);
|
||||
List<AlertNotification> claimDueNotifications(String instanceId, int batchSize, int claimTtlSeconds);
|
||||
void markDelivered(UUID id, int status, String snippet, Instant when);
|
||||
void scheduleRetry(UUID id, Instant nextAttemptAt, int status, String snippet);
|
||||
void markFailed(UUID id, int status, String snippet);
|
||||
void deleteSettledBefore(Instant cutoff);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.cameleer.server.core.alerting;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface AlertReadRepository {
|
||||
void markRead(String userId, UUID alertInstanceId);
|
||||
void bulkMarkRead(String userId, List<UUID> alertInstanceIds);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.cameleer.server.core.alerting;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface AlertRuleRepository {
|
||||
AlertRule save(AlertRule rule); // upsert by id
|
||||
Optional<AlertRule> findById(UUID id);
|
||||
List<AlertRule> listByEnvironment(UUID environmentId);
|
||||
List<AlertRule> findAllByOutboundConnectionId(UUID connectionId);
|
||||
List<UUID> findRuleIdsByOutboundConnectionId(UUID connectionId); // used by rulesReferencing()
|
||||
void delete(UUID id);
|
||||
|
||||
/** Claim up to batchSize rules whose next_evaluation_at <= now AND (claimed_until IS NULL OR claimed_until < now).
|
||||
* Atomically sets claimed_by + claimed_until = now + ttl. Returns claimed rules. */
|
||||
List<AlertRule> claimDueRules(String instanceId, int batchSize, int claimTtlSeconds);
|
||||
|
||||
/** Release claim + bump next_evaluation_at. */
|
||||
void releaseClaim(UUID ruleId, Instant nextEvaluationAt, Map<String, Object> evalState);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.cameleer.server.core.alerting;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface AlertSilenceRepository {
|
||||
AlertSilence save(AlertSilence silence);
|
||||
Optional<AlertSilence> findById(UUID id);
|
||||
List<AlertSilence> listActive(UUID environmentId, Instant when);
|
||||
List<AlertSilence> listByEnvironment(UUID environmentId);
|
||||
void delete(UUID id);
|
||||
}
|
||||
Reference in New Issue
Block a user