В ходе работы над Asterisk бывает полезно знать сколько одновременных звонков может обработать ваш сервер без потери качества сервиса. Я покажу как можно провести стресс-тестрирование сервера Asterisk.
Для этого нужно будет иметь два сервера Астериск. Один будет получать звонки, а другой будет их генерировать. Между двумя серверами уже должен быть проброшен SIP/IAX — транк. Генерировать звонки будем спомошью call. файлов. В упрощенном варианте можно запустить все на одном.
Скрипт-генератор звонков.
#!/usr/bin/python
#
# Script - stress_test.py
# Copyright (c) 2012 Mihail Belobrov.
#
#
#
import os
import random
import shutil
import time
def create_call_file(operator):
#Operator 1
if operator == 1:
phone_member = '2434'+str(random.randint(10,80))
phone_user = '029'+str(random.randint(303014,780020))
#Operator 2
elif operator == 2:
phone_member = '2434'+str(random.randint(10,80))
phone_user = '065'+str(random.randint(300301,880420))
call_file = open('/tmp/'+phone_user,'w')
print 'call from '+phone_user+' to member '+phone_member
call_file.write("Channel: Local/"+phone_member+"@stress_test\n")
call_file.write("Context: stress_test\n")..
call_file.write("Extension: play\n")
call_file.write("CallerID: "+phone_user+"\n")
call_file.close()
shutil.move('/tmp/'+phone_user, '/var/spool/asterisk/outgoing/'+phone_user)
#generation file
for x in range(1000):
time.sleep(1)
operator = random.randint(1,2)
create_call_file(operator)
Настройки для Астериска в extensions.conf
[stress_test]
exten => _X.,1,NoOP(--> call from ${CALLERID(number)} to ${EXTEN} <--)
exten => _X.,n,Dial(SIP/${EXTEN}@trunk_to_ast)
exten => _X.,n,Hangup()
exten => play,1,NoOP(--> call from ${CALLERID(number)} to ${EXTEN} <--)
exten => play,n,Answer()
exten => play,n,MusicOnHold()
exten => play,n,Hangup()
Стресс тестирование заключается в следующем. Скрипт «stress_test.py» генерирует каждую секунду по одному звонку, всего 1000 штук. После того как на удаленном сервере Астериск подняли трубку, начинает бесконечно проигрываться музыка. Тем самым имитируется реальный звонок.
Удачного тестирования и долгой работы вашим Серверам :).