feat: alerts open bugs, and repeats of the same problem go to that bug
Owners and admins turn on a secret URL per project (Settings →
Integrations), POST /api/webhooks/alerts/{project}/{token}, that Sentry,
Uptime Kuma, Prometheus Alertmanager, Grafana or any tool sending JSON
with a title can call. A new problem opens a bug as TaskStream (label
«alerta», chosen type and priority); while that bug is open, the same
fingerprint goes to it (a comment at most every 30 minutes) and
«resolved» is said on it; once it is closed, a new bug names the old
one. Alerts of a project are handled one at a time, so two at once open
one bug, and a bug not yet projected still counts as open. Unknown
project, alerts off or a bad token all answer 403.
TaskStream may now comment as the system actor, like it already opened
tickets for public proposals. Stored in Mongo (alert_integrations,
alert_traces), not in the event store.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { IssuePriority } from '../models/enums';
|
||||
import { Home } from '../models/home';
|
||||
import { PortfolioProject, ProjectInsights } from '../models/insights';
|
||||
import {
|
||||
@@ -15,6 +16,7 @@ import {
|
||||
CalendarFeed,
|
||||
PushDeviceSubscription,
|
||||
CommandResult,
|
||||
AlertIntegration,
|
||||
Comment,
|
||||
Decision,
|
||||
Epic,
|
||||
@@ -247,6 +249,19 @@ export abstract class WebhooksGateway {
|
||||
}
|
||||
|
||||
/** The project's Git webhook (owners and admins configure it). */
|
||||
/** Alerts → bugs (owners and admins). */
|
||||
export abstract class AlertsGateway {
|
||||
abstract integration(projectId: string): Observable<AlertIntegration>;
|
||||
/** Turns it on, or changes what it opens; the URL stays. */
|
||||
abstract save(
|
||||
projectId: string,
|
||||
settings: { typeId: string | null; priority: IssuePriority },
|
||||
): Observable<AlertIntegration>;
|
||||
/** A new URL; the old one stops working. */
|
||||
abstract rotateToken(projectId: string): Observable<AlertIntegration>;
|
||||
abstract disable(projectId: string): Observable<void>;
|
||||
}
|
||||
|
||||
export abstract class GitGateway {
|
||||
abstract integration(projectId: string): Observable<GitIntegration>;
|
||||
/** A repository with its own secret (the first turns the integration on). */
|
||||
|
||||
Reference in New Issue
Block a user