Maison > développement back-end > Tutoriel Python > Automatisez les notifications Slack avec des graphiques à l'aide des fonctions Cloud Run et de Cloud Scheduler

Automatisez les notifications Slack avec des graphiques à l'aide des fonctions Cloud Run et de Cloud Scheduler

Mary-Kate Olsen
Libérer: 2024-12-11 04:47:09
original
796 Les gens l'ont consulté

J'ai récemment construit un système pour automatiser les notifications Slack avec des graphiques qui visualisent le nombre de sessions des 7 derniers jours. Ceci a été réalisé en combinant les fonctions Cloud Run pour le traitement des données et la génération de graphiques, ainsi que Cloud Scheduler pour planifier l'exécution.

Aperçu de la mise en œuvre

Fonction d'exécution dans le cloud

La fonction Cloud Run interroge BigQuery pour récupérer les données de session, utilise Matplotlib pour créer un graphique linéaire, puis envoie le graphique à Slack via l'API Slack. Les étapes suivantes décrivent le processus de configuration.

Voici le code de main.py. Avant d'exécuter, vous devez définir SLACK_API_TOKEN et SLACK_CHANNEL_ID comme variables d'environnement. Vous pouvez les laisser vides pour le moment, car nous les configurerons plus tard.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

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"

Copier après la connexion

Dépendances

Créez un fichier exigences.txt et incluez les dépendances suivantes :

1

2

3

4

5

functions-framework==3.*

google-cloud-bigquery

matplotlib

slack_sdk

pytz

Copier après la connexion

Accorder l'accès à la fonction Cloud Run

Pour permettre à Cloud Scheduler ou à d'autres services d'appeler votre fonction Cloud Run, vous devez attribuer le rôle rôles/run.invoker à l'entité appropriée. Utilisez la commande suivante pour ce faire :

1

2

3

gcloud functions add-invoker-policy-binding create-weekly-total-sessions-chart \

      --region="asia-northeast1" \

      --member="MEMBER_NAME"

Copier après la connexion

Remplacez MEMBER_NAME par l'un des éléments suivants :

  • Un compte de service pour Cloud Scheduler : serviceAccount :scheduler-account@example.iam.gserviceaccount.com
  • Pour un accès public (non recommandé) : tous les utilisateurs

Configuration du planificateur cloud

Utilisez Cloud Scheduler pour automatiser l'exécution de la fonction tous les lundis à 10h00 (JST). Voici un exemple de configuration :

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

Configuration de l'API Slack

Pour activer votre fonction Cloud Run afin d'envoyer des notifications Slack, procédez comme suit :

  1. Accédez à l'API Slack et créez une nouvelle application.
  2. Attribuez les étendues de jeton de robot suivantes sous OAuth et autorisations :
    • chaînes :lire
    • chat:écrire
    • fichiers :écrire

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

  1. Installez l'application sur votre espace de travail Slack et copiez le Jeton OAuth de l'utilisateur du robot.

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

  1. Ajoutez l'application à la chaîne Slack sur laquelle vous souhaitez publier des notifications.

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

  1. Copiez l'ID du canal et collez-le, avec le jeton du bot, dans les variables d'environnement SLACK_CHANNEL_ID et SLACK_API_TOKEN pour votre fonction Cloud Run.

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

Résultat final

Une fois que tout est configuré, votre chaîne Slack recevra une notification hebdomadaire avec un graphique comme celui-ci :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal