····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.