К сожалению, разрабатывать мониторилку оказалось бессмысленно ввиду жёсткой конкуренции со стороны Zabbix и Nagios, их продвинутости, и (с выходом Zabbix 2.2) модульности. Однако остались намётки работы с сетью, с помощью некоторых библиотек Python 2, которые, возможно, могут пригодиться для быстрого написания какого-нибудь скрипта без трат время на документацию. Сначала хотел на Гитхаб всё оформить, но потом постеснялся всего того что есть - так как не вижу смысла писать тулзу, которая делает только одну задачу, а если же просматривать множество возможных путей - непонятно, зачем прослойка, если используются те же библиотечные функции.
В общем, тут будет краткий экскурс))
- HTTP
- SSH
- SFTP
1. HTTP
Первое - самое популярное, поэтому начну с него. Для работы буду использовать отличную библиотеку requests. Она есть как в pip, так и в easy_install и вообще на гитхабе лежит, если что.
r = requests.get("http://example.com/stat",
auth=('user', 'pass'))
print r.status_code, r.text
Или если нужны параметры:
payload = {'key1': 'value1', 'key2': 'value2'}
cookies = {'sessionid': '45647567568'}
r = requests.get("http://httpbin.org/get",
params=payload, cookies=cookies)
То же с POST, просто нужно вызывать requests.post(…)
2. SSH
Для SSH будет использоваться библиотека paramiko (мне она просто понравилась лаконичностью запросов)
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=address, port=port, timeout=3,
username='user', password='password')
stdin, stdout, stderr = client.exec_command('ls')
for line in stdout:
print '... ' + line.strip('\n')
client.close()
3. SFTP
Тут же, пока умеем работать с SSH:
transport = paramiko.Transport((address, port))
transport.connect(username='user', password='password')
sftp = paramiko.SFTPClient.from_transport(transport)
dirlist = sftp.listdir('.')
sftp.mkdir("Input")
sftp.open('Input/status', 'w').write('OK\n')
status = sftp.file("Input/status").read()
sftp.get("Input/status", "new_status.txt")
sftp.put("new_status.txt", "STATUS")
4. SMTP
Воспользуемся библиотекой smtplib
try:
smtp = smtplib.SMTP(host="example.com", port=25,
timeout=3)
smtp.login('user', 'password')
smtp.sendmail('fromMe', 'toYou', 'Hello, World!')
smtp.close()
except socket.timeout:
pass
except smtplib.SMTPRecipientsRefused as e:
result = "Cannot send message: " + str(e)
except smtplib.SMTPException as e:
result = "Cannot login: " + str(e)
except Exception as e:
result = str(e)