madf 279 Опубліковано: 2012-06-19 07:13:33 Share Опубліковано: 2012-06-19 07:13:33 Мое мнение: надо взять текущие скрипты, выбросить их и написать заново - чистенько и опрятненько. Шаманства с файлами, IMHO, только запутывают и мешают. Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-19 08:42:28 Share Опубліковано: 2012-06-19 08:42:28 Мое мнение: надо взять текущие скрипты, выбросить их и написать заново - чистенько и опрятненько. Шаманства с файлами, IMHO, только запутывают и мешают. А мое мнение : Я себе это представляю как скрипт, запускающийся, например, за 5-7 дней до снятия абонплаты, и отправляющий юзеру мыло о том, что после снятия абонки у него будет отрицательный баланс и он не сможет работать. Что нужно просто написать скрипт, который будет отсылать мессагу в личный кабинет (Убиллинга) или, совсем накрайняк, на почту(а у Вас много абонов с забитой почтой ?). От этого и отталкиваться. Временные файлы - фтопку. Авторизатор - фтопку (я с ним уже наигрался) - будет много должников - может и СТГ подвесить. Не зря писал Nightfly : Новый потенциально опасный модуль «Массовая рассылка» для тех кто желает использовать встроеную механику сообщений stargazer для рассылки сообщений на авторизатор Есть смысл написать очень простой скрипт, запускающийся числа 25, и проверяющий баланс. У кого меньше или равно абонплате - отправить сообщение в личный кабинет. Должен работать быстро и безболезненно. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-19 09:44:56 Share Опубліковано: 2012-06-19 09:44:56 ... написать скрипт, который будет отсылать мессагу в личный кабинет (Убиллинга) Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты. или, совсем накрайняк, на почту(а у Вас много абонов с забитой почтой ?).... Есть смысл написать очень простой скрипт, запускающийся числа 25, и проверяющий баланс. У кого меньше или равно абонплате - отправить сообщение в личный кабинет. Должен работать быстро и безболезненно. В почту. С этим и проблема. Тут с OnChange уже месяц возимся, а ты предлагаешь по базе бегать да еще и почту отправлять. Ссылка на сообщение Поделиться на других сайтах
nightfly 1 239 Опубліковано: 2012-06-19 10:09:34 Share Опубліковано: 2012-06-19 10:09:34 Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты. Что-то типа такого, да? Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-19 10:33:53 Share Опубліковано: 2012-06-19 10:33:53 В почту. С этим и проблема. Тут с OnChange уже месяц возимся, а ты предлагаешь по базе бегать да еще и почту отправлять. Поставим вопрос так : а) при каком действии должно отсылаться сообщение ? -OnChange выполняется при очень многих - начиная от ресета пользователя и до малейших чихов (читаем изменение каждого из параметров) б) Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты. Не находите, что отсылать сообщение нужно перед, а OnChange выполнится уже после ? в) Насколько ресурсоемко сделать 1 запрос, а потом по выборке сделать массовую рассылку 1 письмом с тучей копий по результатам выборки ? (при условии, что не нужно писать каждому его персональный баланс, хотя я думаю это тоже не так затратно по ресурсам) г) Ну и все же я думаю нужно в OnChange делать разбор изменившегося параметра и уже по результату что-то выполнять. На файловой базе у меня было примерно так: #Если изменился тариф if [ -n $param -a $param == "tariff" ] ; then { /bin/echo -e "чего-то тут выполняем" } #Если изменилась userdata0 if [ -n $param -a $param == "userdata0" ] ; then { /bin/echo -e "чего-то тут выполняем" } Ну и далее по тексту. Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-19 10:36:25 Share Опубліковано: 2012-06-19 10:36:25 Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты. Что-то типа такого, да? Да, только баланс должен быть не минус - а то как бэ "поздно пить боржоми", ну или делать 2 мессаги : У Вас отрицательный баланс, пожалуйста пополните Ваш счет для продолжения пользоваться услугой. У Вас скоро закончатся средства на Вашем чсету, пожалуйста пополните Ваш счет для продолжения пользоваться услугой. Ссылка на сообщение Поделиться на других сайтах
nightfly 1 239 Опубліковано: 2012-06-19 10:42:11 Share Опубліковано: 2012-06-19 10:42:11 Я предусмотрительный Отображает всплывающие уведомления об окончании средств Отображает вспрывающие напоминания об оплате в конце месяца http://wiki.ubilling.net.ua/doku.php?id=ubagent Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-19 10:43:54 Share Опубліковано: 2012-06-19 10:43:54 В почту. С этим и проблема. Тут с OnChange уже месяц возимся, а ты предлагаешь по базе бегать да еще и почту отправлять. В этой фразе я имел в виду что топикстартеру будет сложно реализовать предложенный алгоритм. Поставим вопрос так : а) при каком действии должно отсылаться сообщение ? -OnChange выполняется при очень многих - начиная от ресета пользователя и до малейших чихов (читаем изменение каждого из параметров) б) Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты. Не находите, что отсылать сообщение нужно перед, а OnChange выполнится уже после ? в) Насколько ресурсоемко сделать 1 запрос, а потом по выборке сделать массовую рассылку 1 письмом с тучей копий по результатам выборки ? (при условии, что не нужно писать каждому его персональный баланс, хотя я думаю это тоже не так затратно по ресурсам) г) Ну и все же я думаю нужно в OnChange делать разбор изменившегося параметра и уже по результату что-то выполнять. На файловой базе у меня было примерно так: #Если изменился тариф if [ -n $param -a $param == "tariff" ] ; then { /bin/echo -e "чего-то тут выполняем" } #Если изменилась userdata0 if [ -n $param -a $param == "userdata0" ] ; then { /bin/echo -e "чего-то тут выполняем" } Ну и далее по тексту. При чем тут OnChange? Тут вообще либо задача крона (рассылка в почту) либо задача ЛК (отображение сообщения в ЛК). Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-19 11:06:08 Share Опубліковано: 2012-06-19 11:06:08 При чем тут OnChange? Ну как то из : Тут с OnChange уже месяц возимся Я так вообще - да, в крон поставить и забыть. Хотя, вон Nightfly, сделал все уже ) Ссылка на сообщение Поделиться на других сайтах
nightfly 1 239 Опубліковано: 2012-06-19 11:24:55 Share Опубліковано: 2012-06-19 11:24:55 Теперь только осталось научить nlo планировать, писать, тестить, дебажить, сопровождать и деплоить код Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-19 11:26:37 Share Опубліковано: 2012-06-19 11:26:37 Теперь только осталось научить nlo Ссылка на сообщение Поделиться на других сайтах
nlo 0 Опубліковано: 2012-06-19 19:14:16 Share Опубліковано: 2012-06-19 19:14:16 ООО! Сколько всего написале! Зачем так всо усложнять? :-) Нужно просто и информативно Не нужно за ранее ничего только по факту! если за ранее всех предупреждать то никаких ресурсов не хватит у нас например многие ложат на инет по 5 10 30 рублей с учётом того что стг настроен на ежедневное снятие абонки вы представьте сколько нужно будет отправить месаг ведь тема затронута мной в целях автоматизации абонентов что бы как можно меньше задействовать админа что бы все всё делали самостоятельно в начале был задан вопрос 1) при изменении тарифа юзверь должен получать уведомление с какого тарифа на какой он переключился в программу авторизатор 2) при зачислении средств на счёт в программу авторизатор получал сообщение что средства в таком то размере зачислены (а то звонят и спрашивают когда придут средства хотя средства уже зачислены на счёт) 3) при блокировании и разблокировании доступа в инет тоже в тот же авторизатор юзверь получал сообщение что его лишили или разрешили инета'a ну вот основные критерии что бы свести к минимуму работу админа занимающегося этой фигнёй вручную СПАСИБО А насчёт научить я научусь я же не тупой обучаться умею :-) Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-20 05:20:50 Share Опубліковано: 2012-06-20 05:20:50 ... в начале был задан вопрос 1) при изменении тарифа юзверь должен получать уведомление с какого тарифа на какой он переключился в программу авторизатор 2) при зачислении средств на счёт в программу авторизатор получал сообщение что средства в таком то размере зачислены (а то звонят и спрашивают когда придут средства хотя средства уже зачислены на счёт) 3) при блокировании и разблокировании доступа в инет тоже в тот же авторизатор юзверь получал сообщение что его лишили или разрешили инета'a ... От этого и будем "танцевать". 1 и 2 решаются через OnChange по параметрам tariff и cash. 3 решается через OnDisconnect, но тут есть моменты. Элементарно решается на POSIX sh. Если не забуду - вечером накатаю скриптец для OnChange. А может кто-то и опередит меня. Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-20 05:56:58 Share Опубліковано: 2012-06-20 05:56:58 Кусок кода OnChange (переменные оригинальные $1 - Логин, $3 - Старое значение, $4 - Новое значение LANG=ru_RU.utf8 - Ваша локаль (Может быть en_US.utf8 или ru_UA.utf8 в общем смотрите сами echo $LANG) ########## Если изменился тариф (скорость абона) ############ ############################################################# if [ -n $param -a $param == "tariff" ] ; then { LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Ваша тариф изменен с $3 на $4" } ########## Если добавили денег абоненту ############ ############################################################# if [ -n $param -a $param == "cash" ] ; then { LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Занесены средства на Ваш счет. На Вашем счету $4 грн" } ########## Если разморозили абонента ############ ############################################################# if [ -n $param -a $param == "passive" -a $4 == "1" ] ; then { LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Учетная запись разморожена. Приятной работы." } При разблокировании посылать сообщения нет смысла. Так как disabled вызывается очень часто. При каждом ресете пользователя. При блокировке же и при отключении посылать сообщения нет смысла - пользователь их не получит. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-21 05:31:32 Share Опубліковано: 2012-06-21 05:31:32 Кусок кода OnChange (переменные оригинальные $1 - Логин, $3 - Старое значение, $4 - Новое значение LANG=ru_RU.utf8 - Ваша локаль (Может быть en_US.utf8 или ru_UA.utf8 в общем смотрите сами echo $LANG) ########## Если изменился тариф (скорость абона) ############ ############################################################# if [ -n $param -a $param == "tariff" ] ; then { LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Ваша тариф изменен с $3 на $4" } ########## Если добавили денег абоненту ############ ############################################################# if [ -n $param -a $param == "cash" ] ; then { LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Занесены средства на Ваш счет. На Вашем счету $4 грн" } ########## Если разморозили абонента ############ ############################################################# if [ -n $param -a $param == "passive" -a $4 == "1" ] ; then { LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Учетная запись разморожена. Приятной работы." } При разблокировании посылать сообщения нет смысла. Так как disabled вызывается очень часто. При каждом ресете пользователя. При блокировке же и при отключении посылать сообщения нет смысла - пользователь их не получит. Пропущено описание param. Надо либо param=$2 либо использовать $2 вместо $param. И еще $param, $1 и $2 надо закавычивать. И LANG не обязательно прописывать перед каждым вызовом. Можно в начале сделать export. Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-21 10:40:37 Share Опубліковано: 2012-06-21 10:40:37 Я ж написал "Кусок кода" - подразумевалось, что в начале скрипта идет инициалицация параметров. login=$1 param=$2 oldValue=$3 newValue=$4 С остальным согласен, но ведь - это не готовый вариант , а подсказка к действию. ((: Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-21 10:53:35 Share Опубліковано: 2012-06-21 10:53:35 Я ж написал "Кусок кода" - подразумевалось, что в начале скрипта идет инициалицация параметров. login=$1 param=$2 oldValue=$3 newValue=$4 С остальным согласен, но ведь - это не готовый вариант , а подсказка к действию. ((: Наверное, ты невнимательно читал топик. Подсказки не помогают Ссылка на сообщение Поделиться на других сайтах
nlo 0 Опубліковано: 2012-06-22 04:09:03 Share Опубліковано: 2012-06-22 04:09:03 Что то вы меня совсем запутале! Выкладываю свои текущие скрипты: OnChange #! /bin/sh login=$1 param=$2 oldValue=$3 newValue=$4 #Записываем переменные по файлам для проверки потом можноо будет удалить этот код echo $login >/etc/stargazer/tmp/login.ini echo $param >/etc/stargazer/tmp/param.ini echo $oldValue >/etc/stargazer/tmp/oldValue.ini echo $newValue >/etc/stargazer/tmp/newValue.ini #Вызываем процедуру отправки ./messages $login $param $oldValue $newValue #Записываем в лог echo "User: '$login'. Parameter $param changed from '$oldValue' to '$newValue'" >> /var/log/stg/users.chg.log messages #!/usr/bin/php <?php $login = $argv[1]; $param = $argv[2]; $oldValue = $argv[3]; $newValue = $argv[4]; $msg = ''; mysql_connect('localhost','stg','passwd'); mysql_select_db('stg'); putenv('LANG=ru_RU.UTF-8'); $query = mysql_query('select t.`Fee` as `Fee`, t.`name` as `TariffName`,u.`Email` as `Email`, u.`Credit` as `Credit` from `users` as u LEFT JOIN `tariffs` as t ON t.`name` = u.`Tariff` where u.`Login`="' . $login . '"'); $result = mysql_fetch_assoc($query); if ($param == 'tariff') $msg = "Ваш тариф изменен с '$oldValue' на '$newValue'.n"; else if ($param == 'cash') { if ($oldValue < $newValue) { $msg = "Ваш баланс увеличен на: ".($newValue - $oldValue)." руб., и теперь составляет $newValue руб.n"; } else if ($newValue < 50) { $msg = "Обратите внимание на вашем балансе осталось $newValue руб.!n"; } } else if ($param == 'credit') { $msg = "Ваш кредитный лимит изменен с $oldValue руб. до $newValue руб.n"; } else if ($param == 'disabled') { if ($newValue < $oldValue) { $msg = "Доступ в интернет заблокирован.n"; } if ($newValue > $oldValue) { $msg = "Доступ в интернет открыт.n"; } } if ($msg != '') { $msg = "$login, здравствуйте!nn$msgn C уважением, Администратор сети."; // echo("sgconf set -s localhost -p 5555 -a admin -w passwd -u $login -m '$msg'"); exec("sgconf set -s localhost -p 5555 -a admin -w passwd -u $login -m '$msg'"); // echo("$result[Email]"); //if ($result['Email'] != "") { // echo("mail($result['Email'], 'Billing system', $msg)"); //} } ?> Ну и что тут не так и почему не работает? Объясняю Запускаю вручную ./OnChange login tariff admin tarif1 Сообщение приходит подставляю другие параметры тоже приходит меняю с вебморды ничего не приходит с конфигуратора меняю аналогично не приходит смотрю вывод параметров в файлы #Записываем переменные по файлам для проверки потом можноо будет удалить этот код echo $login >/etc/stargazer/tmp/login.ini echo $param >/etc/stargazer/tmp/param.ini echo $oldValue >/etc/stargazer/tmp/oldValue.ini echo $newValue >/etc/stargazer/tmp/newValue.ini предварительно их удалив и поочередно меняя параметры с морды проверяю наличие файлов - их просто нет они не создаются и параметры в них не записываются аналогичное происходит и при использовании конфигуратора что не так то? или может я неправильно объяснил суть проблемы? Огромное спасибо всем за помощь! Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-22 06:13:27 Share Опубліковано: 2012-06-22 06:13:27 #!/bin/sh login=$1 param=$2 oldValue=$3 newValue=$4 SGCONF="../sgconf/sgconf" HOST="localhost" PORT="5558" ADMIN_LOGIN="admin" ADMIN_PASSWORD="123456" msg="" if [ "${param}" == "tariff" ] then msg="Ваш тариф изменен с '${oldValue}' на '${newValue}'." else if [ "${param}" == "cash" ] then if [ $(echo "$oldValue < $newValue" | bc) -eq 1 ] then d=$( echo "$newValue - $oldValue" | bc ) msg="Ваш баланс увеличен на ${d} денег. Текущее состояние баланса: ${newValue} денег." fi fi fi if [ "${msg}" != "" ] then $SGCONF set -s $HOST -p $PORT -a $ADMIN_LOGIN -w $ADMIN_PASSWORD -u $login -m "${msg}" fi Я долго и нудно перед этим писал пост о том как все это работает, почему может не работать и что в этом случае делать. Я приводил какие-то доказательства работоспособности и всякие другие подобные мелочи. Но форум взял и покорявил мой пост. По этому я его удалил и забил писать заново. Вот скрипт. Разбирайтесь. Ссылка на сообщение Поделиться на других сайтах
DarkSpider 36 Опубліковано: 2012-06-22 06:14:24 Share Опубліковано: 2012-06-22 06:14:24 1. Покажи вывод ls -al /etc/stargazer 2. Есть ли в /etc/sudoers ? User_Alias BILLING = www-data BILLING ALL = NOPASSWD: ALL 3. В скрипте я бы указывал полный путь до sgconf 4. Стукните чтоле в аську. Дадите доступ - помогу разобраться. Ссылка на сообщение Поделиться на других сайтах
nlo 0 Опубліковано: 2012-06-22 08:54:46 Share Опубліковано: 2012-06-22 08:54:46 1. Покажи вывод ls -al /etc/stargazer 2. Есть ли в /etc/sudoers ? User_Alias BILLING = www-data BILLING ALL = NOPASSWD: ALL 3. В скрипте я бы указывал полный путь до sgconf 4. Стукните чтоле в аську. Дадите доступ - помогу разобраться. это всё есть и указано Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-22 09:07:58 Share Опубліковано: 2012-06-22 09:07:58 1. Покажи вывод ls -al /etc/stargazer 2. Есть ли в /etc/sudoers ? User_Alias BILLING = www-data BILLING ALL = NOPASSWD: ALL 3. В скрипте я бы указывал полный путь до sgconf 4. Стукните чтоле в аську. Дадите доступ - помогу разобраться. это всё есть и указано Мой скрипт пробовал? Ссылка на сообщение Поделиться на других сайтах
nlo 0 Опубліковано: 2012-06-24 06:03:48 Share Опубліковано: 2012-06-24 06:03:48 1. Покажи вывод ls -al /etc/stargazer 2. Есть ли в /etc/sudoers ? User_Alias BILLING = www-data BILLING ALL = NOPASSWD: ALL 3. В скрипте я бы указывал полный путь до sgconf 4. Стукните чтоле в аську. Дадите доступ - помогу разобраться. это всё есть и указано Мой скрипт пробовал? Нет пока не пробовал Времени щас ни на что катастрофически не хватает Щас немного разгребу завалы и начну пробовать Спасибо огромное за помощь всем! Ссылка на сообщение Поделиться на других сайтах
nlo 0 Опубліковано: 2012-06-24 16:53:58 Share Опубліковано: 2012-06-24 16:53:58 #!/bin/sh login=$1 param=$2 oldValue=$3 newValue=$4 SGCONF="../sgconf/sgconf" HOST="localhost" PORT="5558" ADMIN_LOGIN="admin" ADMIN_PASSWORD="123456" msg="" if [ "${param}" == "tariff" ] then msg="Ваш тариф изменен с '${oldValue}' на '${newValue}'." else if [ "${param}" == "cash" ] then if [ $(echo "$oldValue < $newValue" | bc) -eq 1 ] then d=$( echo "$newValue - $oldValue" | bc ) msg="Ваш баланс увеличен на ${d} денег. Текущее состояние баланса: ${newValue} денег." fi fi fi if [ "${msg}" != "" ] then $SGCONF set -s $HOST -p $PORT -a $ADMIN_LOGIN -w $ADMIN_PASSWORD -u $login -m "${msg}" fi Я долго и нудно перед этим писал пост о том как все это работает, почему может не работать и что в этом случае делать. Я приводил какие-то доказательства работоспособности и всякие другие подобные мелочи. Но форум взял и покорявил мой пост. По этому я его удалил и забил писать заново. Вот скрипт. Разбирайтесь. Вот что выдаёт на ваш скрипт: # ./OnChange test tariff a b [: 33: tariff: unexpected operator [: 33: tariff: unexpected operator естественно не работает и из под морды тоже самое на параметр cash Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-06-24 17:26:06 Share Опубліковано: 2012-06-24 17:26:06 #!/bin/sh login=$1 param=$2 oldValue=$3 newValue=$4 SGCONF="../sgconf/sgconf" HOST="localhost" PORT="5558" ADMIN_LOGIN="admin" ADMIN_PASSWORD="123456" msg="" if [ "${param}" == "tariff" ] then msg="Ваш тариф изменен с '${oldValue}' на '${newValue}'." else if [ "${param}" == "cash" ] then if [ $(echo "$oldValue < $newValue" | bc) -eq 1 ] then d=$( echo "$newValue - $oldValue" | bc ) msg="Ваш баланс увеличен на ${d} денег. Текущее состояние баланса: ${newValue} денег." fi fi fi if [ "${msg}" != "" ] then $SGCONF set -s $HOST -p $PORT -a $ADMIN_LOGIN -w $ADMIN_PASSWORD -u $login -m "${msg}" fi Я долго и нудно перед этим писал пост о том как все это работает, почему может не работать и что в этом случае делать. Я приводил какие-то доказательства работоспособности и всякие другие подобные мелочи. Но форум взял и покорявил мой пост. По этому я его удалил и забил писать заново. Вот скрипт. Разбирайтесь. Вот что выдаёт на ваш скрипт: # ./OnChange test tariff a b [: 33: tariff: unexpected operator [: 33: tariff: unexpected operator естественно не работает и из под морды тоже самое на параметр cash эээ У меня 33-я строка последняя. А судя по ошибке у вас в 33-й строке оператор [. Может вы чего-то лишнего наменяли? Например кавычки удалили в первом if Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас