PythonでエラーをSlackに通知2
前回の記事に書いたコードで暫く様子を見たところ、Slackにエラー通知が届いたのですが、IPアドレスが 127.0.1.1 (ローカル・ループバック・アドレス)になって居ました。
Windows PC で確かめただけで、Raspberry Pi に適用したら予定と違うアドレスを通知して来たと言う状況です。
このままでは、エラー発生した装置が特定できないので、以下のように変更しました。
ソースコード
import requests # class SlackDriver で使用
# ********** Trace Report Start *********************************
class SlackDriver:
def __init__(self, _token):
self._token = _token # api_token
self._headers = {"Authorization" : "Bearer "+ _token}
def send_message(self, message, channel):
params = {"channel": channel, "text": message}
r = requests.post('https://slack.com/api/chat.postMessage',
headers=self._headers,
params=params)
#print("return ", r.json())
def tracereport(): # Trace Reort (Slack & OS console)
#import requests # ソースの先頭で宣言しないと機能しない
import traceback # 他の関数も使う場合はソースの先頭で宣言
import socket # 他の関数も使う場合はソースの先頭で宣言
token = '<貴方のトークン>' # token.
slack = SlackDriver(token)
st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # ホストのIPを取得準備
try:
st.connect(('10.255.255.255', 1))
ip = st.getsockname()[0] # ホストのIPを取得
except:
ip = '127.0.0.1'
st.close()
print(ip)
lst = traceback.format_exc() # エラー情報を取得
print(lst)
slack.send_message(ip + '\r\n' + lst, "<#で始まるチャンネル名>")
# ********** Trace Report End ************************************
def main():
try:
a = 1/0
except:
tracereport() # Trace Reort (Slack & OS console)
print('End')
if __name__ == '__main__':
main()
幾つか試しのですが、上のコードでWindows PC, Raspberry Pi 共に正しいIPアドレスを通知するようでした。
実行結果
192.168.xxx.yyy
Traceback (most recent call last):
File "/home/pi/Desktop/raspi_bot_test.py", line 55, in main
a = 1 / 0
ZeroDivisionError: division by zero
引き続き様子を見て行こうと思います。
今後とも宜しくお願いします。
出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。