データベースのデータ監視などに利用する事ができます。
1.イメージの作成
docker build -t slack-pandas-pg:1.0 .
Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
postgresql-dev \
&& apk --no-cache --virtual pydeps add gcc \
g++ \
python3-dev \
musl-dev \
cython \
libffi-dev \
&& pip install pandas \
&& pip install psycopg2 \
&& pip install slackclient \
&& apk del --purge pydeps
CMD ["/bin/sh"]
2. コンテナの実行
下記queryresult.pyの他にクエリーを保持したquery.txtと通知時のメッセージヘッダーを保持したheader.txtを同じフォルダに用意します。
Botsの登録などはあらかじめ行い、TOKENを控えてください。
queryresult.py
import os
import pandas as pd
import psycopg2
import slack
query = ""
with open(os.environ['QUERY']) as fquery:
query = fquery.read()
header = ""
with open(os.environ['HEADER']) as fheader:
header = fheader.read()
conn = psycopg2.connect(host=os.environ['PG_HOST'], port=os.environ["PG_PORT"], database=os.environ['PG_DB'], user=os.environ['PG_USER'], password=os.environ['PG_PASS'])
result = pd.read_sql(sql=query, con=conn)
if len(result) > 0:
client = slack.WebClient(token=os.environ['SLACK_TOKEN'])
response = client.chat_postMessage(
channel=os.environ['SLACK_CHANNEL'],
username=os.environ['SLACK_USER'], icon_emoji=os.environ['SLACK_ICON'],
text=header + result.to_string())
PostgreSQLへの接続情報やslackの情報は下図のように環境変数で渡します。
docker run -e PG_HOST='dbhost' \
-e PG_PORT='5432' \
-e PG_DB='dbname' \
-e PG_USER='postgres' \
-e PG_PASS='pass' \
-e SLACK_TOKEN='<slack token>' \
-e SLACK_CHANNEL='#general' \
-e SLACK_USER='mybot' \
-e SLACK_ICON=':cat:' \
-e QUERY='/tmp/query.txt'
-e HEADER='/tmp/header.txt'
-v `pwd`:/tmp -it slack-pandas-pg:1.0 /usr/local/bin/python3 /tmp/queryresult.py
0 件のコメント:
コメントを投稿