Кейс: створення системи сповіщень

Вступ до AWS Boto в Python

Maksim Pecherskiy

Data Engineer

Фінальний продукт

Фінальний продукт

Фінальний продукт

Вступ до AWS Boto в Python

Фінальний продукт

Фінальний продукт

Вступ до AWS Boto в Python

Фінальний продукт

Фінальний продукт

Вступ до AWS Boto в Python

Фінальний продукт

Фінальний продукт

Вступ до AWS Boto в Python

Створення системи сповіщень

Налаштування теми

  • Створіть тему
  • Завантажте CSV зі списком контактів
  • Створіть теми для кожної служби
  • Підпишіть контакти на відповідні теми
Вступ до AWS Boto в Python

Створення системи сповіщень

Отримайте агреговані показники

  • Завантажте щомісячний звіт «get it done»
  • Отримайте кількість «Potholes»
  • Отримайте кількість сповіщень про «Illegal dumping»

Надсилайте сповіщення

  • Якщо «potholes» понад 100 — надішліть сповіщення
  • Якщо «illegal dumping» понад 30 — надішліть сповіщення
Вступ до AWS Boto в Python

Налаштування теми

Ініціалізуйте клієнт SNS

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

Створіть теми та збережіть їх ARN

trash_arn = sns.create_topic(Name="trash_notifications")['TopicArn']
streets_arn = sns.create_topic(Name="streets_notifications")['TopicArn']
Вступ до AWS Boto в Python

Налаштування теми

Налаштування теми

Вступ до AWS Boto в Python

Підписування користувачів на теми

contacts = pd.read_csv('http://gid-staging.contacts.csv')
Вступ до AWS Boto в Python

Підписування користувачів на теми

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
Вступ до AWS Boto в Python

Підписування користувачів на теми

Створіть метод 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'])

Застосуйте subscribe_user до кожного рядка

contacts.apply(subscribe_user, axis=1)
Вступ до AWS Boto в Python

Підписування користувачів на теми

Підписування користувачів на тему

Вступ до AWS Boto в Python

Отримання агрегованих показників

Завантажте січневий звіт у DataFrame

df = pd.read_csv('http://gid-reports.2019/feb/final_report.csv')
Вступ до AWS Boto в Python

Отримання агрегованих показників

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
Вступ до AWS Boto в Python

Отримання агрегованих показників

Встановіть індекс, щоб напряму звертатися до лічильників за назвою служби

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

Отримайте агреговані показники

trash_violations_count = df.at['Illegal Dumping', 'count']
streets_violations_count = df.at['Pothole', 'count']
Вступ до AWS Boto в Python

Надсилання сповіщень

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")
Вступ до AWS Boto в Python

Надсилання сповіщень

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")
Вступ до AWS Boto в Python

Фінальний результат

Фінальний результат

Вступ до AWS Boto в Python

Давайте потренуємось!

Вступ до AWS Boto в Python

Preparing Video For Download...