Ich habe kürzlich ein System zur Automatisierung von Slack-Benachrichtigungen mit Diagrammen entwickelt, die die Sitzungszahlen der letzten 7 Tage visualisieren. Dies wurde durch eine Kombination aus Cloud Run-Funktionen zur Datenverarbeitung und Diagrammerstellung und Cloud Scheduler zur Planung der Ausführung erreicht.
Die Cloud Run-Funktion fragt BigQuery ab, um Sitzungsdaten abzurufen, erstellt mit Matplotlib ein Liniendiagramm und sendet das Diagramm dann über die Slack-API an Slack. Die folgenden Schritte beschreiben den Einrichtungsprozess.
Hier ist der Code für main.py. Vor der Ausführung müssen Sie SLACK_API_TOKEN und SLACK_CHANNEL_ID als Umgebungsvariablen festlegen. Sie können sie vorerst leer lassen, da wir sie später einrichten.
import os import matplotlib.pyplot as plt from google.cloud import bigquery from datetime import datetime, timedelta import io import pytz from slack_sdk import WebClient from slack_sdk.errors import SlackApiError def create_weekly_total_sessions_chart(_): SLACK_TOKEN = os.environ.get('SLACK_API_TOKEN') SLACK_CHANNEL_ID = os.environ.get('SLACK_CHANNEL_ID') client = bigquery.Client() # Calculate the date range for the last 7 days jst = pytz.timezone('Asia/Tokyo') today = datetime.now(jst) start_date = (today - timedelta(days=7)).strftime('%Y-%m-%d') end_date = (today - timedelta(days=1)).strftime('%Y-%m-%d') query = f""" SELECT DATE(created_at) AS date, COUNT(DISTINCT session_id) AS unique_sessions FROM `<project>.<dataset>.summary_all` WHERE created_at BETWEEN '{start_date} 00:00:00' AND '{end_date} 23:59:59' GROUP BY date ORDER BY date; """ query_job = client.query(query) results = query_job.result() # Prepare data for the graph dates = [] session_counts = [] for row in results: dates.append(row['date'].strftime('%Y-%m-%d')) session_counts.append(row['unique_sessions']) # Generate the graph plt.figure() plt.plot(dates, session_counts, marker='o') plt.title('Unique Session Counts (Last 7 Days)') plt.xlabel('Date') plt.ylabel('Unique Sessions') plt.xticks(rotation=45) plt.tight_layout() # Save the graph as an image image_binary = io.BytesIO() plt.savefig(image_binary, format='png') image_binary.seek(0) # Send the graph to Slack client = WebClient(token=SLACK_TOKEN) try: response = client.files_upload_v2( channel=SLACK_CHANNEL_ID, file_uploads=[{ "file": image_binary, "filename": "unique_sessions.png", "title": "Unique Session Counts (Last 7 Days)" }], initial_comment="Here are the session counts for the last 7 days!" ) except SlackApiError as e: return f"Error uploading file: {e.response['error']}" return "Success"
Erstellen Sie eine Datei „requirements.txt“ und schließen Sie die folgenden Abhängigkeiten ein:
functions-framework==3.* google-cloud-bigquery matplotlib slack_sdk pytz
Damit Cloud Scheduler oder andere Dienste Ihre Cloud Run-Funktion aufrufen können, müssen Sie der entsprechenden Entität die Rolle „roles/run.invoker“ zuweisen. Verwenden Sie dazu den folgenden Befehl:
gcloud functions add-invoker-policy-binding create-weekly-total-sessions-chart \ --region="asia-northeast1" \ --member="MEMBER_NAME"
Ersetzen Sie MEMBER_NAME durch eines der folgenden:
Verwenden Sie Cloud Scheduler, um die Ausführung der Funktion jeden Montag um 10:00 Uhr (JST) zu automatisieren. Hier ist eine Beispielkonfiguration:
Um Ihre Cloud Run-Funktion zum Senden von Slack-Benachrichtigungen zu aktivieren, befolgen Sie diese Schritte:
Sobald alles eingerichtet ist, erhält Ihr Slack-Kanal eine wöchentliche Benachrichtigung mit einem Diagramm wie diesem:
Das obige ist der detaillierte Inhalt vonAutomatisieren Sie Slack-Benachrichtigungen mit Diagrammen mithilfe von Cloud Run-Funktionen und Cloud Scheduler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!