Studiu de caz: Construirea unui sistem de notificări

Introducere în AWS Boto în Python

Maksim Pecherskiy

Data Engineer

Produs final

Produs final

Produs final

Introducere în AWS Boto în Python

Produs final

Produs final

Introducere în AWS Boto în Python

Produs final

Produs final

Introducere în AWS Boto în Python

Produs final

Produs final

Introducere în AWS Boto în Python

Construirea sistemului de notificări

Configurare topic

  • Creați topicul
  • Descărcați fișierul CSV cu contacte
  • Creați topicuri pentru fiecare serviciu
  • Abonați contactele la topicurile respective
Introducere în AWS Boto în Python

Construirea sistemului de notificări

Obțineți numerele agregate

  • Descărcați raportul lunar
  • Obțineți numărul de gropi în carosabil
  • Obțineți numărul de notificări de depozitare ilegală

Trimiteți alerte

  • Dacă gropile depășesc 100, trimiteți alertă
  • Dacă depozitarea ilegală depășește 30, trimiteți alertă
Introducere în AWS Boto în Python

Configurare topic

Inițializați clientul SNS

sns = boto3.client('sns', 
                   region_name='us-east-1',
                   aws_access_key_id=AWS_KEY_ID, 
                   aws_secret_access_key=AWS_SECRET)

Creați topicuri și stocați ARN-urile lor

trash_arn = sns.create_topic(Name="trash_notifications")['TopicArn']
streets_arn = sns.create_topic(Name="streets_notifications")['TopicArn']
Introducere în AWS Boto în Python

Configurare topic

Configurare topic

Introducere în AWS Boto în Python

Abonarea utilizatorilor la topicuri

contacts = pd.read_csv('http://gid-staging.contacts.csv')
Introducere în AWS Boto în Python

Abonarea utilizatorilor la topicuri

contacts.csv

Name Email Phone Department
John Smith [email protected] +11224567890 trash
Fanny Mae [email protected] +11234597890 trash
Janessa Goldsmith [email protected] +11534567890 streets
Evelyn Monroe [email protected] +11234067890 streets
Max Pe [email protected] +11234517890 streets
Introducere în AWS Boto în Python

Abonarea utilizatorilor la topicuri

Creați metoda subscribe_user

def subscribe_user(user_row):

if user_row['Department'] == 'trash': sns.subscribe(TopicArn = trash_arn, Protocol='sms', Endpoint=str(user_row['Phone'])) sns.subscribe(TopicArn = trash_arn, Protocol='email', Endpoint=user_row['Email'])
else: sns.subscribe(TopicArn = streets_arn, Protocol='sms', Endpoint=str(user_row['Phone'])) sns.subscribe(TopicArn = streets_arn, Protocol='email', Endpoint=user_row['Email'])

Aplicați metoda subscribe_user pe fiecare rând

contacts.apply(subscribe_user, axis=1)
Introducere în AWS Boto în Python

Abonarea utilizatorilor la topicuri

Abonarea utilizatorilor la topic

Introducere în AWS Boto în Python

Obțineți numerele agregate

Încărcați raportul din ianuarie într-un DataFrame

df = pd.read_csv('http://gid-reports.2019/feb/final_report.csv')
Introducere în AWS Boto în Python

Obțineți numerele agregate

service_name count
Illegal Dumping 2580
Potential Missed Collection 150
Pothole 1170
Traffic Sign - Maintain 210
Traffic Signal Head Turned 60
Traffic Signal Light Out 120
Introducere în AWS Boto în Python

Obțineți numerele agregate

Setați indexul pentru acces direct la numărători după numele serviciului

df.set_index('service_name', inplace=True)

Obțineți numerele agregate

trash_violations_count = df.at['Illegal Dumping', 'count']
streets_violations_count = df.at['Pothole', 'count']
Introducere în AWS Boto în Python

Trimiteți alerte

if trash_violations_count > 100:

# Construct the message to send message = "Trash violations count is now {}".format(trash_violations_count)
# Send message sns.publish(TopicArn = trash_arn, Message = message, Subject = "Trash Alert")
Introducere în AWS Boto în Python

Trimiteți alerte

if streets_violations_count > 30:

    # Construct the message to send
    message = "Streets violations count is now {}".format(streets_violations_count)

# Send message sns.publish(TopicArn = streets_arn, Message = message, Subject = "Streets Alert")
Introducere în AWS Boto în Python

Rezultat final

Rezultat final

Introducere în AWS Boto în Python

Să exersăm!

Introducere în AWS Boto în Python

Preparing Video For Download...