Blog

DIY Arduino YUN-Integration für PagerDuty Benachrichtigungen

von Tony Albanese 26. August 2014 | 4 Minuten Lesezeit

Mit ein wenig Code-Inspiration von Gmail-Lampe , Daniel Gentleman von Thoughtfix ( @Thoughtfix ) hat eine geniale PagerDuty -Arduino-Integration entwickelt, indem er einen Arduino YUN, eine 3D-gedruckte Kugel und den Neopixel Ring von Adafruit kombiniert hat, um eine visuelle Statusanzeige seines PagerDuty Dashboards zu erstellen. Schau dir das Video seines Geräts (und seiner Katze) in Aktion unten an:

Mithilfe der PagerDuty-API meldet sich das Gerät alle 15 Sekunden bei PagerDuty , um seinen Status zu aktualisieren. Es ist so konfiguriert, dass es sowohl bestätigte als auch ausgelöste Alarme erkennt. Sobald ein bestätigter oder ausgelöster Alarm erkannt wird, leuchtet die Anzeige kurz orange und dann rot auf. Daniel erklärt, dass dies beabsichtigt ist, um Alarme in beiden Zuständen anzuzeigen. Die Lampe bleibt jedoch für die Dauer eines 15-Sekunden-Zyklus rot, um den kritischeren Status zu signalisieren. Sobald alle Alarme behoben sind, leuchtet die Lampe grün.

Die Zuverlässigkeit der Integration gewährleisten

Wie viele DIY-Projekte begann auch die PagerDuty -Statuslampe als reines Spaßprojekt. Daniel erkannte jedoch, dass die Lampe einen echten Bedarf deckte: eine schnelle visuelle Anzeige für seine offenen Einsätze. In Zukunft könnte sie sogar als Signal dienen, ihn in Ruhe zu lassen, wenn die Lampe rot leuchtet. Um eine zuverlässige Integration zu gewährleisten, fügte Daniel dem Arduino eine einfache Funktion hinzu, die die WLAN-Verbindung prüft und so sicherstellt, dass immer eine Verbindung besteht.

Er erstellte ein Shell-Skript namens `ping -c 1` im Home-Verzeichnis und kapselte die PagerDuty -API-Aufrufe in einen Ping-Test. Daniel erklärte uns, dass in seiner finalen Version das Gerät Bing.com jede Sekunde anpingt (deutlich häufiger als die PagerDuty Aufrufe, die alle 15 Sekunden erfolgen). Bei Verbindungsverlust wechselt die Lampe zu blauem Licht.

WP_20140814_13_13_41_Pro

Zukunftsmöglichkeiten

Da das Gerät sehr einfache Shell-Skripte und einen I/O-Pin am Arduino Yun verwendet, erklärte Daniel, dass es möglich sei, dies zu erweitern, um anzuzeigen, wer im Bereitschaftsdienst ist, die Lichter je nach Team mit Alarmen zu ändern und sogar einen Roboter physisch basierend auf PagerDuty -API-Aufrufen zu bewegen.

Bereit, Ihr eigenes Projekt zu realisieren?

WP_20140814_13_14_07_Pro

Folgendes benötigen Sie:

Quellcode:

// Dieser Code steuert eine PagerDuty Statusleuchte mit einem Arduino Yun.
// mit einem Adafruit NeoPixel Ring (12 LEDs) an Pin 6.
// Es werden drei Dateien im Home-Verzeichnis des Root-Benutzers benötigt:
// ack.sh (curl-Anfrage an die PagerDuty-API, um nach bestätigten Benachrichtigungen zu suchen)
// trig.sh (curl-Anfrage an die PagerDuty-API, um nach ausgelösten Warnmeldungen zu suchen)
// cacert.pem (von https://curl.haxx.se/ca/cacert.pem (für SSL-curl-Anfragen)
//
// Beispiel ack.sh (ändern Sie status=acknowledged in status=triggered für trig.sh)
// curl -H “Content-type: application/json” -H “Authorization: Token
token=[Ihr Token]” -X GET -G –data-urlencode “status=acknowledged”
https://[YourPagerDutyURL]. pagerduty.com/api/v1/incidents/count
–cacert /root/cacert.pem
//

// Ein PagerDuty API-Token abrufen von
https://[YourPagerDutyURL]. pagerduty.com/api_keys
#enthalten<Adafruit_NeoPixel.h>
#define PIN 6
#enthalten<Process.h>
Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// Brücke initialisieren
Bridge.begin();
// Serielle Schnittstelle initialisieren
Serial.begin(9600);

// verschiedene Beispielprozesse ausführen
strip.begin();
strip.show(); // Alle Pixel auf 'aus' setzen
colorWipe(strip.Color(0, 0, 255), 50); // Blau
delay(100);
}
void loop() {
int ackd = runAckd();
int trig = runTrigger();
if ((ackd == 0) && (trig == 0)){
colorWipe(strip.Color(0, 255, 0), 50); // Grün
}
if (ackd >= 1){
colorWipe(strip.Color(255, 153, 0), 50); // Orange
}
if (trig >= 1){
colorWipe(strip.Color(255, 0, 0), 50); // Rot
}
Verzögerung(15000);
}
int runTrigger() {
Prozess p;// Erstelle einen Prozess und nenne ihn „p“
p.runShellCommand(“/root/trig.sh”);

// Auf ausgelöste Ereignisse prüfen
// Die Ausgabe eines Prozesses kann mit den Stream-Methoden gelesen werden.
while (p.running()); // Tue nichts, bis der Prozess beendet ist, also
Sie erhalten die gesamte Ausgabe.
int result = p.parseInt(); /* Suche nach einer Ganzzahl */
Serial.print(“Ausgelöst:”); /* Einige serielle Debugging-Anweisungen */
Serial.println(result);

// Sicherstellen, dass das letzte Datenbit gesendet wird.
Serial.flush();
Ergebnis zurückgeben;
}
int runAckd() {
Prozess p;// Erstelle einen Prozess und nenne ihn „p“
p.runShellCommand(“/root/ack.sh”);

// Auf ausgelöste Ereignisse prüfen
// Die Ausgabe eines Prozesses kann mit den Stream-Methoden gelesen werden.
while (p.running()); // Tue nichts, bis der Prozess beendet ist, also
Sie erhalten die gesamte Ausgabe.
int result = p.parseInt(); /* Suche nach einer Ganzzahl */
Serial.print(“Ackd:”); /* Einige serielle Debugging-Anweisungen */
Serial.println(result);

// Sicherstellen, dass das letzte Datenbit gesendet wird.
Serial.flush();
Ergebnis zurückgeben;
}
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i
strip.setPixelColor(i, c);
strip.show();
Verzögerung(warten);
}
}

Haben Sie ein eigenes PagerDuty Projekt in Eigenregie? Teilen Sie es uns per E-Mail mit. support@pagerduty.com Die