閱讀515 返回首頁    go 魔獸


使用 Cloud Insight SDK 監控北京空氣質量!

現在越來越多的 App 都開始有廣告了。特別是空氣質量監測,和天氣類的 App,廣告還是蠻多的,眼花繚亂,真是夠了。

最近剛好在用一款係統監控工具 Cloud Insight,它提供的 SDK 可以把任一數據上傳到他們那做展示。

靈機一動,作為一個程序員,自己動手豐衣足食,沒什麼不能解決的。

pip install -i https://pypi.oneapm.com/simple --upgrade oneapm-ci-sdk
這就安裝好了。

簡單用 ipython 看了看接口文檔, gauge 是主要的發數據的接口,好像 increment 也可以,但是不懂是搞啥的,貌似數據類型不一樣。

PM 2.5 API

首先得找一個 PM 2.5 API,參考了一下這個教程:Air Quality Widget - New Improved Feed。裏麵的資料顯示,美國駐京使館也用的是這裏的數據,應該還算準確吧。

注意看教程裏,他們請求的地址為:

https://feed.aqicn.org/feed/beijing/en/feed.v1.json

請求這個地址,就可以得到數據啦。

說到這個,其實國內很多 App 和網站都在用 PM25.in。用的人挺多的,就是發郵件速度有點慢,注冊之後獲取 Token 的郵件一直都沒發給我!

接入 Cloud Insight

先介紹下 Cloud Insight 吧,就是一款係統監控工具,支持 Ubuntu、MySQL、Docker 的監控。但是他們提供 SDK 可以自定義上傳數據,所以我們就用它來承接 PM 2.5 的數據吧。

他們也提供任一指標的報警功能,所以也可以通過設置報警,來發郵件提醒給我。

Cloud Insight SDK 和 StatsD 原理很像,SDK 的詳情可以參考文檔

源代碼如下:

import requests

from oneapm_ci_sdk import statsd

PM25_API_URL = "https://feed.aqicn.org/feed/%s/en/feed.v1.json"

def get_city_data(city):
    try:
        res = requests.get(PM25_API_URL % city)
    except:
        return 0
    else:
        return res.json()['aqi']['val']

def using_sdk():
    statsd.gauge('airquality.beijing.pm25', float(get_city_data('beijing')))
    statsd.gauge('airquality.shanghai.pm25', float(get_city_data('shanghai')))
    statsd.gauge('airquality.guangzhou.pm25', float(get_city_data('guangzhou')))
    statsd.gauge('airquality.xuchang.pm25', float(get_city_data('xuchang'))) # 家裏。。

if __name__ == '__main__':
    using_sdk()

首先通過 API 把數值取出來,然後通過 stats.gauge 對指標進行賦值,就可以了。唿~接下來是產品內部的使用了。

啦啦啦~自定義儀表盤開個 Air Quaility 儀表盤,數據選進來,就可以看各個城市的 PM 2.5 的實時數值了。

想隨時隨地知道北京空氣質量是否超標,卻又不想下載廣告一大堆的空氣質量 App。那我自己動手設一個報警策略吧。

大於或等於 100,就算超標好了。很簡單就設置完成了。

大功告成,等著郵件提醒吧。順便秀一下 Kickstarter 買來的 Pebble 手表。舒心啊:沒有廣告的北京空氣質量監測。

本文參考一篇帖子 pm25,關愛老大,征求原作者同意後改寫。

最後更新:2017-04-01 13:44:32

  上一篇:go 頁麵以及全站性能損耗計算
  下一篇:go Linux RHEL6 x64 命令行靜默安裝 Oracle 12c - 2