import common from "../../common/common-sources.mjs";
export default {
dedupe: "unique",
type: "source",
key: "new_relic-new-alert",
name: "New Alert",
description: "Emit new event when a new alert is created.",
version: "0.0.2",
props: {
...common.props,
product: {
label: "Product",
description: "Filter by New Relic product",
type: "string",
optional: true,
},
entityType: {
label: "Entity Type",
description: "Filter by entity type",
type: "string",
optional: true,
},
entityGroupId: {
label: "Entity Group ID",
description: "Filter by entity group ID",
type: "string",
optional: true,
},
entityId: {
label: "Entity ID",
description: "Filter by entity ID",
type: "string",
optional: true,
},
eventType: {
label: "Event Type",
description: "Filter by event type",
type: "string",
optional: true,
},
incidentId: {
label: "Incident ID",
description: "Filter by incident ID",
type: "string",
optional: true,
},
},
methods: {
_setLastEmittedAlert(deployment) {
this.db.set("lastEmittedAlert", deployment);
},
_getLastEmittedAlert() {
return this.db.get("lastEmittedAlert");
},
getMeta({
id,
description,
timestamp,
}) {
return {
id,
summary: description,
ts: new Date(timestamp),
};
},
},
async run () {
const params = {
product: this.product,
entity_type: this.entityType,
entity_group_id: this.entityGroupId,
entity_id: this.entityId,
event_type: this.eventType,
incident_id: this.incidentId,
};
const alerts = await this.app.listAlerts(params);
const toEmitEvents = [];
const prevRequestFirstItem = this._getLastEmittedAlert();
for (const alert of alerts) {
if (prevRequestFirstItem == alert.id) {
break;
}
toEmitEvents.unshift(alert);
}
this._setLastEmittedAlert(alerts[0].id);
for (const alert of toEmitEvents) {
this.$emit(alert, this.getMeta(alert));
}
},
};