Pull to refresh
19
0
Андрей Малышев @k41n

User

Send message
Крон-задач в дампе не будет и при переезде их можно забыть. И при развертывании тоже все проще становится. Только решение становится не «кросс-субдшное»
Если окажется полезным при написании статьи про триксы — вот пример нашего скрипта. По всей видимости, сплошной антипаттерн. Специально ничего не приукрашивал — как есть.

Буду благодарен, если ляпы укажете. Все вызываемые скрипты — коротулечки на Ruby+savon которые дергают большой сервер по SOAP.

[test_meters]
exten => 333330,1,Background(14)
exten => 333330,2,WaitExten(1)
exten => *,1,GotoIf($["${phase2}" = "1"]?test_meters,333330,say_next_number:test_meters,333330,4)
exten => 333330,3,Set(numTries=0)
exten => 333330,4,Playback(15)
exten => 333330,5(auth),Read(account,,10,,1,60)
exten => 333330,n,System(/var/lib/asterisk/saracen/needed_digits.rb ${account} >> /tmp/needed.log 2>&1)
exten => 333330,n,Set(needed_digits=${SHELL(/var/lib/asterisk/saracen/needed_digits.rb ${account})})
exten => 333330,n,GotoIf($["${needed_digits}" = ""]?bad_try)

exten => 333330,n(next_meter),Set(next_meter_number=${SHELL(/var/lib/asterisk/saracen/next_line.rb ${account})})
exten => 333330,n,Set(next_number=${SHELL(/var/lib/asterisk/saracen/next_counter.rb ${account})})
exten => 333330,n,GotoIf($["${next_number}" = "all"]?all)
exten => 333330,n,GotoIf($["${next_number}" = "night"]?night)
exten => 333330,n,GotoIf($["${next_number}" = "day"]?day)
exten => 333330,n(normal),Playback(18)
exten => 333330,n(say_next_number),SayDigits(${next_number})
exten => 333330,n,Goto(input_data)

exten => 333330,n(night),Playback(25)
exten => 333330,n,Set(next_number=${SHELL(/var/lib/asterisk/saracen/next_counter.rb ${account})})
exten => 333330,n,Goto(say_next_number)

exten => 333330,n(day),Playback(24)
exten => 333330,n,Set(next_number=${SHELL(/var/lib/asterisk/saracen/next_counter.rb ${account})})
exten => 333330,n,Goto(say_next_number)

exten => 333330,n(input_data),Read(device_data,,5,,1,60)
exten => 333330,n,Playback(20)
exten => 333330,n,SayDigits(${device_data})
exten => 333330,n,Set(phase2=1)
exten => 333330,n,Background(19)
exten => 333330,n,WaitExten(4)
exten => #,1,Goto(test_meters,333330,submit_data)

;exten => 333330,30(submit_data),System(/var/lib/asterisk/saracen/submit_data.rb ${account} "${next_meter_number}" ${device_data})
exten => 333330,30(submit_data),Set(submit_result=${SHELL(/var/lib/asterisk/saracen/submit_data.rb ${account} "${next_meter_number}" ${device_data})})
exten => 333330,n,GotoIf($["${submit_result}" = "ok"]?submit_success:submit_failure)

exten => 333330,n(submit_success),Playback(22)
exten => 333330,n,Goto(next_meter)

exten => 333330,n(submit_failure), Playback(23)
exten => 333330,n,Goto(hangup)
И это правильно. Просто скрипт разрастался постепенно в соответствии с ростом аппетитов заказчика. А с госзаказчиком в плане ТЗ спорить тяжело. Когда мы осознали что в диалплане больше кода чем в скриптах, которые он дергает, было уже поздно.
Ну с GMT+4 я погорячился. Просто Антон из Москвы, поэтому +4. Стандартное (домедведевское) Europe/Moscow отличается от UTC на 3 часа зимой и на 4 часа летом. Многие библиотеки учитывают DST, не зная что оно отменено, и переведут часы осенью назад (осень — обратно). После нового декрета о времени правильное «московское» время всегда будет на 4 часа позже UTC, т.е. когда на Гринвиче полночь, в Москве 04:00. А на необновленных устройствах и системах, которые не знают об отмене DST, будет 03:00.

Если поставить другую зону GMT+4, к примеру ОАЭ, у которых нет DST («летнего времени»), то получится что даже необновленные устройства не будут переводить часы весной и осенью и время всегда будет правильным. Соответственно, если у вас раньше было +5/+6 то надо выбирать зону из списка GMT+6 и тоже без DST.

На любую зону GMT+4 без DST. Вот список.
Почти всегда имеет смысл обернуть системные вызовы в свою функцию. В дальнейшем в эту функцию можно добавить управляемый сдвиг — как минимум, это будет полезно при прогоне тестов, когда нужно будет сымитировать «прошел год».
Мы делали IVR для сдачи показаний счетчиков, где нужно было в цикле делать SOAP запрос для каждого счетчика в квартире и в зависимости от результатов по-разному действовать и воспроизводить различные звуки…

\me рвет волосы на разных частях тела

Почему мы не знали тогда про ael! 50 строчек, а, кажется, проще было бы * переписать.
Я легко себе представляю, к примеру, людей, тестирующих новые фичи на хабре за карму. Или, допустим, за лишнюю плашку на торрент-трекере. Еще вариант — «золотые буковки» в какой-нибудь социалке. Так что, по моему скромному, идея не только для геймдева.
Кстати, очень хорошо подойдет для очистки базы от временных объектов вроде протухших сессий. Видимо, про events мало кто знает из разработчиков CMS — в каждой второй надо обязательно в крон повесить специальный скрипт.
Интересно, Ромеро и Гульмэн уже пишут движки под WebGL?
Саркисян, залогиньтесь!
Я на такой случай держу на балансе (том, который не «облачный») запас денег на пару дней — нечто вроде НЗ, если бухгалтерия проспит или деньги не дойдут. В случае ЧП можно перебросить их на облако и выиграть время.

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity