lynx   »   [go: up one dir, main page]

ラベル slack の投稿を表示しています。 すべての投稿を表示
ラベル slack の投稿を表示しています。 すべての投稿を表示

2022年3月10日木曜日

n8n.ioでPostgreSQLのクエリ結果でslackにポストするメッセージを変更するフローを作成する

n8n.ioでPostgreSQLのクエリ結果でslackにポストするメッセージを変更するフローを作成するには、以下の作成手順を実行します。

フロー作成手順 1. Postgres Nodeを追加します
Credential for Postgresから「Create New」を選択します
Postgres accountダイアログで接続先データベースのHost, Database, User, Password, Portを入力して、Saveボタンをクリックします。

Operationで「Execute Query」を選択し、QueryにSELECT文を入力します。
(例:select count(*) as cnt from sample;)

2. IF Nodeを追加します
String条件の「Value 1」でCurrent Node -> Input Data -> JSON -> cntを選択し、以下の式を入力します。
Value1で{{$json["cnt"]}}
Operationで「Equal」を選択します
「Value 2」で「0」を入力します。
これで、Postgresで返されるcntの値が0の場合はtrue、そうでなければfalseが返されます。

3. SlackでWebHookのURLを取得
Workspaceのメニューから「設定と管理」→「アプリを管理する」、画面左から「カスタムインテグレーション」→「Incomming WebHook」、「設定」タブをクリック→設定の「鉛筆」アイコンをクリック、ここでWebhook URLの設定を取得します。
※あらかじめWebHookの設定はしておきます。

4. IFノードのtrue/falseに対応するHTTP Requestノードを追加して、以下のパラメータを設定します。
Request Method : Post
URL : 手順3で取得したURL
Response Format : String

Body ParametersグループでAdd Parameterボタンをクリックして以下の4つのName : Valueを設定
・text : 表示する文字列
・icon_emoji : 「:cat:」などの絵文字
・channel : 「#yourchannel」などのチャネル
・username : 「testuser」などのユーザ名

5. 「Execute Workflow」ボタンをクリックして、クエリの結果に応じたslackにメッセージが投稿されることを確認します。

〇フロー図

2022年3月5日土曜日

n8n.ioでHTTP Requestノードを使用してslackにメッセージを投稿する

n8n.ioでHTTP Requestノードを使用してslackにメッセージを投稿するには、以下のフロー作成手順を実行します。

フロー作成手順 1. SlackでWebHookのURLを取得
Workspaceのメニューから「設定と管理」→「アプリを管理する」、画面左から「カスタムインテグレーション」→「Incomming WebHook」、「設定」タブをクリック→設定の「鉛筆」アイコンをクリック、ここでWebhook URLの設定を取得します。
※あらかじめWebHookの設定はしておきます。

2. n8n.ioでHTTP Requestノードを追加して、以下のパラメータを設定します。
Request Method : Post
URL : 手順1で取得したURL
Response Format : String

Body ParametersグループでAdd Parameterボタンをクリックして以下の4つのName : Valueを設定
・text : 表示する文字列
・icon_emoji : 「:cat:」などの絵文字
・channel : 「#yourchannel」などのチャネル
・username : 「testuser」などのユーザ名

3. 「Execute Workflow」ボタンをクリックして、slackにメッセージが投稿されることを確認します。

〇フロー図

2019年6月29日土曜日

DockerでPython3.7、requests、slackがインストールされたコンテナ(Alpine3.9ベース)を作成する

requestsとslackでネットワークにアクセスした結果に応じてslackの通知するようなプログラムを作成する事ができます。

1.イメージの作成
以下のコマンドとDockerfileでPython3.7、requests、slackがインストールされたコンテナを作成します。
docker build --no-cache -t slack-requests:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN apk --no-cache add libstdc++ \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
    libffi-dev \
  && pip install requests \
  && pip install slackclient \
  && apk del --purge pydeps
CMD ["/bin/sh"]

2. 以下のサンプルプログラムでrequestsとslackを活用して簡単なURLの生死監視・エラーチェックを行うことができます。
下記monitor_urls.pyの他に監視したいURLを保持したurls.txt(1行に1URLを書いてください)と通知時のメッセージヘッダーを保持したheader.txtを同じフォルダに用意します。
Botsの登録などはあらかじめ行い、TOKENを控えてください。

monitor_urls.py
import os
import requests
from requests.exceptions import ConnectionError
import slack
import json

header = ""
with open(os.environ['HEADER']) as fheader:
  header = fheader.read()

with open(os.environ['URLS']) as furls:
  urls = furls.readlines()

errors=[]

for url in urls:
  url = url.rstrip('\n')
  try:
    result = requests.get(url, timeout=10)
    if result.status_code >= 400:
      errors.append({'status_code':result.status_code, 'reason':result.reason, 'url':url})
  except ConnectionError as err:
    errors.append({'status_code':-1, 'reason':'No response', 'url':url})

if len(errors) > 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 + json.dumps(errors, indent=2))

実行は以下のコマンドを実行します。slackへのトークン情報やurlを格納したファイルなどの情報は環境変数を指定して渡します。
docker run -e SLACK_TOKEN='<slack token>' \
  -e SLACK_CHANNEL='#general' \
  -e SLACK_USER='mybot' \
  -e SLACK_ICON=':cat:' \
  -e URLS='/tmp/query.txt'
  -e HEADER='/tmp/header.txt'
  -v `pwd`:/tmp  -it slack-requests:1.0 /usr/local/bin/python3 /tmp/monitor_urls.py

2019年6月28日金曜日

DockerでPostgreSQLにクエリーを実行した結果をslackに通知するコンテナ(Alpine3.9ベース)を作成する

python3.7にslackclientとpandasとpsycopg2をインストールしたコンテナを作成し、PostgreSQLにクエリーを発行した結果が1行以上あればslackに通知するコンテナは以下の手順で作成します。
データベースのデータ監視などに利用する事ができます。

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

Лучший частный хостинг