← Hacker News + PagerDuty integrations

Acknowledge Incident with PagerDuty API on New Stories by Keyword from Hacker News API

Pipedream makes it easy to connect APIs for PagerDuty, Hacker News and 1000+ other apps remarkably fast.

Trigger workflow on
New Stories by Keyword from the Hacker News API
Next, do this
Acknowledge Incident with the PagerDuty API
No credit card required
Into to Pipedream
Watch us build a workflow
Watch us build a workflow
7 min
Watch now ➜
Trusted by 250,000+ developers from startups to Fortune 500 companies:
Trusted by 250,000+ developers from startups to Fortune 500 companies

Developers Pipedream

Getting Started

This integration creates a workflow with a Hacker News trigger and PagerDuty action. When you configure and deploy the workflow, it will run on Pipedream's servers 24x7 for free.

  1. Select this integration
  2. Configure the New Stories by Keyword trigger
    1. Connect your Hacker News account
    2. Configure timer
    3. Optional- Configure Keyword
  3. Configure the Acknowledge Incident action
    1. Connect your PagerDuty account
    2. Select a Incident ID
  4. Deploy the workflow
  5. Send a test event to validate your setup
  6. Turn on the trigger

Details

This integration uses pre-built, open source components from Pipedream's GitHub repo. These components are developed by Pipedream and the community, and verified and maintained by Pipedream.

To contribute an update to an existing component or create a new component, create a PR on GitHub. If you're new to Pipedream component development, you can start with quickstarts for trigger span and action development, and then review the component API reference.

Trigger

Description:Emit new stories that mention a specific keyword
Version:0.0.4
Key:hacker_news-new-stories-by-keyword

Trigger Code

const Parser = require("rss-parser");
const hacker_news = require("../../hacker_news.app.js");
const { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } = require("@pipedream/platform");

const parser = new Parser();

module.exports = {
  key: "hacker_news-new-stories-by-keyword",
  name: "New Stories by Keyword",
  description: "Emit new stories that mention a specific keyword",
  version: "0.0.4",
  type: "source",
  props: {
    hacker_news,
    timer: {
      type: "$.interface.timer",
      default: {
        intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
      },
    },
    db: "$.service.db",
    // If you want a single search feed but multiple keywords, separate the keywords with " OR ":
    keyword: {
      type: "string",
      label: "Keyword",
      description: "Keyword to watch. Matches story titles. Leave blank to get all stories.",
      optional: true,
      default: "",
    },
  },
  methods: {
    // in theory if alternate setting title and description or aren't unique this won't work
    itemKey(item) {
      return item.guid || item.id || item.title || item.description;
    },
  },
  async run() {
    const seenKeys = this.db.get("seenKeys") || [];
    const seenKeysMap = seenKeys.reduce((acc, v) => {
      acc[v] = true;
      return acc;
    }, {});
    // All elements of an item are optional,
    // however at least one of title or description must be present.
    // should be listed from most recent to least recent
    const feed = await parser.parseURL(`https://hnrss.org/newest?q=${encodeURIComponent(this.keyword)}`);
    for (let idx = feed.items.length - 1; idx >= 0; idx--) {
      const item = feed.items[idx];
      const key = this.itemKey(item);
      // XXX throw if !key?
      if (seenKeysMap[key]) continue;
      seenKeys.unshift(key);
      seenKeysMap[key] = true; // just in case of dupes
      this.$emit(item, {
        id: this.itemKey(item),
        summary: item.title,
        ts: item.pubdate && +new Date(item.pubdate),
      });
    }
    if (seenKeys.length) {
      // XXX restrict by byte size instead of el size
      this.db.set("seenKeys", seenKeys.slice(0, 1000));
    }
  },
};

Trigger Configuration

This component may be configured based on the props defined in the component code. Pipedream automatically prompts for input values in the UI and CLI.
LabelPropTypeDescription
Hacker Newshacker_newsappThis component uses the Hacker News app.
timer$.interface.timer
N/Adb$.service.dbThis component uses $.service.db to maintain state between component invocations.
Keywordkeywordstring

Keyword to watch. Matches story titles. Leave blank to get all stories.

Trigger Authentication

The Hacker News API does not require authentication.

About Hacker News

Social news website

Action

Description:Acknowledge an incident. [See the docs here](https://developer.pagerduty.com/api-reference/b3A6Mjc0ODE0Mg-update-an-incident)
Version:0.0.1
Key:pagerduty-acknowledge-incident

Action Code

import pagerduty from "../../pagerduty.app.mjs";
import constants from "../../common/constants.mjs";

export default {
  key: "pagerduty-acknowledge-incident",
  name: "Acknowledge Incident",
  description: "Acknowledge an incident. [See the docs here](https://developer.pagerduty.com/api-reference/b3A6Mjc0ODE0Mg-update-an-incident)",
  type: "action",
  version: "0.0.1",
  props: {
    pagerduty,
    incidentId: {
      propDefinition: [
        pagerduty,
        "incidentId",
        () => ({
          statuses: [
            constants.INCIDENT_STATUS.TRIGGERED,
          ],
        }),
      ],
    },
  },
  async run({ $ }) {
    const { incidentId } = this;

    const { incident } = await this.pagerduty.updateIncident({
      $,
      incidentId,
      data: {
        incident: {
          type: constants.REFERENCE.INCIDENT,
          status: constants.INCIDENT_STATUS.ACKNOWLEDGED,
        },
      },
    });

    $.export("$summary", `Incident ${incident.summary} has been ${incident.status}`);

    return incident;
  },
};

Action Configuration

This component may be configured based on the props defined in the component code. Pipedream automatically prompts for input values in the UI.

LabelPropTypeDescription
PagerDutypagerdutyappThis component uses the PagerDuty app.
Incident IDincidentIdstringSelect a value from the drop down menu.

Action Authentication

PagerDuty uses OAuth authentication. When you connect your PagerDuty account, Pipedream will open a popup window where you can sign into PagerDuty and grant Pipedream permission to connect to your account. Pipedream securely stores and automatically refreshes the OAuth tokens so you can easily authenticate any PagerDuty API.

Pipedream requests the following authorization scopes when you connect your account:

About PagerDuty

Real-Time Operations and Incident Response

More Ways to Connect PagerDuty + Hacker News

Acknowledge Incident with PagerDuty API on New Comments by Keyword from Hacker News API
Hacker News + PagerDuty
 
Try it
Find Oncall User with PagerDuty API on New Comments by Keyword from Hacker News API
Hacker News + PagerDuty
 
Try it
Find Oncall User with PagerDuty API on New Stories by Keyword from Hacker News API
Hacker News + PagerDuty
 
Try it
Resolve Incident with PagerDuty API on New Comments by Keyword from Hacker News API
Hacker News + PagerDuty
 
Try it
Resolve Incident with PagerDuty API on New Stories by Keyword from Hacker News API
Hacker News + PagerDuty
 
Try it
New Stories by Keyword from the Hacker News API

Emit new stories that mention a specific keyword

 
Try it
New Comments by Keyword from the Hacker News API

Emit new comments that mention a specific keyword

 
Try it
New On-Call Rotation from the PagerDuty API

Emit new event each time a new user rotates onto an on-call rotation

 
Try it
New or Updated Incident from the PagerDuty API

Emit new event each time an incident is created or updated

 
Try it
Acknowledge Incident with the PagerDuty API

Acknowledge an incident. See the docs here

 
Try it
Find Oncall User with the PagerDuty API

Find the user on call for a specific schedule. See the docs here

 
Try it
Resolve Incident with the PagerDuty API

Resolve an incident. See the docs here

 
Try it
Trigger Incident with the PagerDuty API

Trigger an incident. See the docs here

 
Try it