Выбрать главу

····neto1 = net_io_counters()[0]

····sleep(1)

····neti2 = net_io_counters()[1]

····neto2 = net_io_counters()[0]

····# Рассчитываем байты в секунду

····net = ((neti2+neto2) — (neti1+neto1))/2

····if net > MAX_NET_USAGE:

········attack = attack + 1

····if counter > 25:

········attack = 0

········counter = 0

# Пишем очень важное электронное письмо, если значение параметра attack больше 4

TO = "you@your_email.com"

FROM = "webmaster@your_domain.com"

SUBJECT = "Your domain is out of system resources!"

text = "Go and fix your server!"

BODY = string.join(

·····("From: %s" %FROM,"To: %s" %TO,"Subject: %s" %SUBJECT, "",text), "\r\n")

server = smtplib.SMTP('127.0.0.1')

server.sendmail(FROM, [TO], BODY)

server.quit()

Хорошим примером использования Psutil является glances (https://github.com/nicolargo/glances/) — полностью консольное приложение, которое ведет себя как расширенная версия top (перечисляет запущенные процессы, упорядочивая их по использованию ЦП или другим способом, указанным пользователем) и имеет возможность наблюдать за клиентом и сервером.

Fabric

Fabric (http://docs.fabfile.org/) — это библиотека, предназначенная для упрощения задач системного администратора. Позволяет соединяться с помощью SSH с несколькими хостами и выполнять задачи для каждого из них. Это удобно для системных администраторов, а также для тех, кто развертывает приложения. Чтобы установить Fabric, используйте pip:

$ pip install fabric

Рассмотрим полный модуль Python, определяющий две задачи Fabric: memory_usage и deploy:

# fabfile.py

from fabric.api import cd, env, prefix, run, task

env.hosts = ['my_server1', 'my_server2'] # С чем соединяться по SSH

@task

def memory_usage():

····run('free — m')

@task

def deploy():

····with cd('/var/www/project-env/project'):

········with prefix('../bin/activate'):

············run('git pull')

············run('touch app.wsgi')

Оператор with вкладывает команды друг в друга, поэтому в конечном счете метод deploy() для каждого хоста начинает выглядеть так:

$ ssh имя_хоста cd /var/ww/project-env/project &&../bin/activate && git pull

$ ssh имя_хоста cd /var/ww/project-env/project &&../bin/activate && \

> touch app.wsgi

Учитывая предыдущий код, сохраненный в файле fabfile.py (имя модуля по умолчанию, которое ищет fab), мы можем проверить использование памяти с помощью нашей новой задачи memory_usage:

$ fab memory_usage

[my_server1] Executing task 'memory'

[my_server1] run: free — m [my_server1] out:················ total···· used···· free·· shared· buffers·· cached

[my_server1] out: Mem:··········· 6964···· 1897···· 5067······· 0····· 166····· 222

[my_server1] out: — /+ buffers/cache:······ 1509···· 5455

[my_server1] out: Swap:············· 0······· 0······· 0

[my_server2] Executing task 'memory'

[my_server2] run: free — m [my_server2] out:················ total···· used···· free·· shared· buffers·· cached

[my_server2] out: Mem:··········· 1666····· 902····· 764······· 0····· 180····· 572

[my_server2] out: — /+ buffers/cache:······· 148···· 1517

[my_server2] out: Swap:··········· 895······· 1····· 894

И мы можем выполнить развертывание:

$ fab deploy

Дополнительная функциональность включает параллельное исполнение, взаимодействие с удаленными программами и группирование хостов. В документации к Fabric (http://docs.fabfile.org/) приведены понятные примеры.

Luigi

Luigi (https://pypi.python.org/pypi/luigi) — это инструмент для управления конвейером, разработанный и выпущенный компанией Spotify. Помогает разработчикам управлять целым конвейером крупных долгоиграющих пакетных задач, объединяя запросы Hive, запросы к базе данных, задачи Hadoop Java, задачи pySpark и многие другие задачи, которые вы можете написать самостоятельно. Они не должны быть приложениями, работающими с большими данными, API позволяет запланировать что угодно. Spotify позволил запускать задачи с помощью Hadoop, поэтому разработчики предоставляют все необходимые вспомогательные программы в пакете luigi.contrib (http://luigi.readthedocs.io/en/stable/api/luigi.contrib.html). Установите его с помощью pip:

$ pip install luigi

Включает в себя веб-интерфейс, поэтому пользователи могут фильтровать свои задачи и просматривать графики зависимостей для рабочего потока конвейера и их продвижение. В репозитории GitHub вы можете найти примеры задач Luigi, также можете просмотреть документацию к Luigi.