sources/new-alert/new-alert.mjs
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)); } }, };