LoginSignup
5
5

More than 5 years have passed since last update.

Azure StatusのRSSをクロールしてHipchatに投稿するPythonスクリプト

Last updated at Posted at 2015-03-13

概要

Azureでサービス監視するのに、Azure statusからAzureそのもののヘルスステータスを確認したい。
ただ、プッシュ通知では教えてくれないので、RSSをクロールしてHipchatに通知して欲しいなと作ってみた。

作ってみた

pythonでRSS読むならfeedparserがいいと聞いたので使ってみる。
hipchatはroomのtoken使ってrest api叩いてるだけ。
諸事情でproxy越しのアクセスなのでちょっと設定したり。

azure_status_notificator.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import json
import urllib2
import feedparser

proxies = {
        "http": "hoge:8080",
        "https": "hoge:8080",
}

def hipchat_post_to_room(room_id, auth_token, msg):
        global proxies
        data = {
                "color": "red",
                "message_format": "text",
                "message": msg,
        }
        headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
        request_url = "https://api.hipchat.com/v2/room/" + room_id + "/notification?auth_token=" + auth_token
        return requests.post(request_url, proxies=proxies, data=json.dumps(data), headers=headers)

def get_azure_status():
        global proxies
        proxy = urllib2.ProxyHandler(proxies)
        data = feedparser.parse("http://azure.microsoft.com/ja-jp/status/feed/", handlers = [proxy])
        res = ""
        for e in data["entries"]:
                if e:
                        res += e.summary_detail.value
        return res

if __name__ == "__main__":
        status = get_azure_status()

        room_id = "XXXXXX"
        auth_token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

        if status:
                msg = "@all %s" % status
                hipchat_post_to_room(room_id, auth_token, msg)

何もなければ通知しないようif文かませておく。

ちなみにhipchatはhtml形式でも投稿できるけど、それだと@allとかメンションが効かないので注意。

Hipchatに通知したらその中からAzure statusにリンクあるとすぐ開けて便利かな?と思ったけど、それやるなら形式が異なるので2度投稿する必要があるな、と。

あとは作ったスクリプトを毎時くらいでcron仕込んでおく。


00 * * * * python /home/hoge/azure_status_notificator.py

できた。

azure.png

まとめ

RSSって普段feedlyとかリーダーからしか見ないので、実体としてフィードがどういう風なデータn構造で流れてくるのか知るいい機会ではあった。
RSSのスキーマ?みたいなのって実際にフィードが流れてないといまいち検証しづらいなと。

また、クラウド使ってると、自分のとこのインスタンスだけうっかり落ちたのか、
あるいはAzureそのものの障害なのか、を切り分けて考慮する必要があるなとしみじみ。

ちなみにAzureのサポートプランというのはしかるべくあるので「金を払え」という話もあるが、
充実のサポートを期待するとそこそこのお値段がする。

自分が使ってるサービスとかAZとかに限定した方がいいかな?と思ったりはした。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5