Rumah > pembangunan bahagian belakang > Tutorial Python > Automatikkan Pemberitahuan Slack dengan Graf Menggunakan Fungsi Cloud Run dan Cloud Scheduler

Automatikkan Pemberitahuan Slack dengan Graf Menggunakan Fungsi Cloud Run dan Cloud Scheduler

Mary-Kate Olsen
Lepaskan: 2024-12-11 04:47:09
asal
785 orang telah melayarinya

Baru-baru ini saya membina sistem untuk mengautomasikan pemberitahuan Slack dengan graf yang menggambarkan kiraan sesi selama 7 hari yang lalu. Ini dicapai menggunakan gabungan fungsi Cloud Run untuk pemprosesan data dan penjanaan graf serta Cloud Scheduler untuk menjadualkan pelaksanaan.

Tinjauan Perlaksanaan

Fungsi Cloud Run

Fungsi Cloud Run menanyakan BigQuery untuk mengambil data sesi, menggunakan Matplotlib untuk membuat carta garisan dan kemudian menghantar carta kepada Slack melalui API Slack. Langkah berikut menggariskan proses persediaan.

Berikut ialah kod untuk main.py. Sebelum menjalankan, anda perlu menetapkan SLACK_API_TOKEN dan SLACK_CHANNEL_ID sebagai pembolehubah persekitaran. Anda boleh membiarkannya kosong buat masa ini, kerana kami akan menyediakannya kemudian.

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"
Salin selepas log masuk

Kebergantungan

Buat fail requirements.txt dan sertakan kebergantungan berikut:

functions-framework==3.*
google-cloud-bigquery
matplotlib
slack_sdk
pytz
Salin selepas log masuk

Memberi Akses kepada Fungsi Cloud Run

Untuk membenarkan Cloud Scheduler atau perkhidmatan lain menggunakan fungsi Cloud Run anda, anda perlu menetapkan peranan roles/run.invoker kepada entiti yang sesuai. Gunakan arahan berikut untuk melakukan ini:

gcloud functions add-invoker-policy-binding create-weekly-total-sessions-chart \
      --region="asia-northeast1" \
      --member="MEMBER_NAME"
Salin selepas log masuk

Ganti MEMBER_NAME dengan salah satu daripada yang berikut:

  • Akaun perkhidmatan untuk Penjadual Awan: serviceAccount:scheduler-account@example.iam.gserviceaccount.com
  • Untuk akses awam (tidak disyorkan): semuaPengguna

Menyediakan Penjadual Awan

Gunakan Penjadual Awan untuk mengautomasikan pelaksanaan fungsi setiap hari Isnin pada 10:00 PG (JST). Berikut ialah contoh konfigurasi:

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

Konfigurasi API Slack

Untuk mendayakan fungsi Cloud Run anda menghantar pemberitahuan Slack, ikut langkah berikut:

  1. Pergi ke Slack API dan buat apl baharu.
  2. Tetapkan Skop Token Bot berikut di bawah OAuth & Kebenaran:
    • saluran:baca
    • sembang:tulis
    • fail:tulis

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

  1. Pasang apl ke ruang kerja Slack anda dan salin Token OAuth Pengguna Bot.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

  1. Tambahkan apl pada saluran Slack tempat anda ingin menyiarkan pemberitahuan.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

  1. Salin ID saluran dan tampalkannya, bersama-sama dengan Bot Token, ke dalam pembolehubah persekitaran SLACK_CHANNEL_ID dan SLACK_API_TOKEN untuk fungsi Cloud Run anda.

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

Keputusan Akhir

Setelah semuanya disediakan, saluran Slack anda akan menerima pemberitahuan mingguan dengan graf seperti ini:

Automate Slack Notifications with Graphs Using Cloud Run Functions and Cloud Scheduler

Atas ialah kandungan terperinci Automatikkan Pemberitahuan Slack dengan Graf Menggunakan Fungsi Cloud Run dan Cloud Scheduler. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan