В ходе работы над 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 штук. После того как на удаленном сервере Астериск подняли трубку, начинает бесконечно проигрываться музыка. Тем самым имитируется реальный звонок.

Удачного тестирования и долгой работы вашим Серверам :).