見出し画像

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

引き続き様子を見て行こうと思います。


今後とも宜しくお願いします。



出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。