Технические вопросы по UTM 5.0
Magnum72
Сообщения: 1947 Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:
Сообщение
Magnum72 » Пн сен 07, 2009 14:57
Ограничения:
1) В ТП не должно быть двух и более услуг с одинаковым типом
Недоделал:
2) Написал переброс только услуг Периодической и передачи трафика, остальные у меня не используются, но по желанию можно довольно просто дописать.
строка запуска:
Код: Выделить всё
-a olympus_hot_change_tp -user_id 64077 -account_id 64115 -tariff_next 147 -tariff_link_id_find 64260
где tariff_link_id_find - Link ID текущего ТП у юзера
Код: Выделить всё
<?xml version="1.0"?>
<urfa>
<parameter name="user_id"/>
<parameter name="account_id"/>
<parameter name="tariff_id"/>
<parameter name="tariff_current"/>
<parameter name="tariff_next"/>
<parameter name="slink_id"/>
<parameter name="service_id"/>
<parameter name="service_type"/>
<parameter name="discount_period_id"/>
<parameter name="tariff_link_id"/>
<parameter name="tariff_link_id_tmp"/>
<parameter name="tariff_link_id_find"/>
<!-- Ishem diskontniy perion y starogo TP -->
<call function="rpcf_get_user_tariffs"/>
<for name="j" from="0" count="user_tariffs_size">
<set dst="tariff_link_id_tmp" src="tariff_link_id_array" src_index="j"/>
<set dst="discount_period_id_tmp" src="discount_period_id_array" src_index="j"/>
<if variable="tariff_link_id_tmp" value="tariff_link_id_find" condition="eq">
<set dst="discount_period_id" src="discount_period_id_tmp"/>
</if>
</for>
<!-- Sozdaem pustoy new TP -->
<set dst="discount_period_id" src="discount_period_id_tmp"/>
<set dst="tariff_current" src="tariff_next"/>
<call function="rpcf_link_user_tariff"/>
<!-- Zapominaem ID new TP -->
<set dst="tariff_link_id_tmp" src="tariff_link_id"/>
<!-- Ishem uslugi vhodiashie v old TP -->
<call function="rpcf_get_all_services_for_user"/>
<for name="i" from="0" count="slink_id_count">
<set src="slink_id_array" src_index="i" dst="slink_id"/>
<set src="service_type_array" src_index="i" dst="service_type"/>
<!-- Zapominaem dlia uslugi s tipom IP Traffic dannie esli ona iz nujnogo TP -->
<if variable="service_type" value="3" condition="eq">
<!-- Ishem ID analogicnoy uslugi v new TP i zapolniaem ee -->
<set dst="tariff_id" src="tariff_next"/>
<call function="rpcf_get_tariff"/>
<for name="u" from="0" count="services_count">
<set src="service_type_array" src_index="i" dst="service_type_new"/>
<set src="service_id_array" src_index="u" dst="service_id_new"/>
<if variable="service_type_new" value="service_type" condition="eq">
<call function="rpcf_get_iptraffic_service_link"/>
<if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
<call function="rpcf_delete_slink"/>
<set dst="service_id" src="service_id_new"/>
<set dst="tariff_link_id" src="tariff_link_id_tmp"/>
<set dst="slink_id" value="0"/>
<set dst="unabon" value="1"/>
<set dst="unprepay" value="1"/>
<set dst="start_date" value="now()"/>
<call function="rpcf_add_service_to_user"/>
</if>
</if>
</for>
</if>
<!-- Zapominaem dlia uslugi s tipom periodic service dannie esli ona iz nujnogo TP -->
<if variable="service_type" value="2" condition="eq">
<!-- Ishem ID analogicnoy uslugi v new TP i zapolniaem ee -->
<set dst="tariff_id" src="tariff_next"/>
<call function="rpcf_get_tariff"/>
<for name="u" from="0" count="services_count">
<set src="service_type_array" src_index="i" dst="service_type_new"/>
<set src="service_id_array" src_index="u" dst="service_id_new"/>
<if variable="service_type_new" value="service_type" condition="eq">
<call function="rpcf_get_periodic_service_link"/>
<if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
<call function="rpcf_delete_slink"/>
<set dst="service_id" src="service_id_new"/>
<set dst="tariff_link_id" src="tariff_link_id_tmp"/>
<set dst="slink_id" value="0"/>
<set dst="is_unabon_period" value="1"/>
<set dst="is_unprepay_period" value="1"/>
<set dst="start_date" value="now()"/>
<call function="rpcf_add_service_to_user"/>
</if>
</if>
</for>
</if>
</for>
<!-- Udaliaem old TP -->
<set dst="tariff_link_id" src="tariff_link_id_find"/>
<call function="rpcf_unlink_user_tariff"/>
</urfa>
Pulse
Сообщения: 945 Зарегистрирован: Вт окт 03, 2006 12:58
Сообщение
Pulse » Пн сен 07, 2009 16:10
получается что во время работы скрипта в какой-то момент времени ссылаются две тарифные связки...а зачем так? в этом какой-то смысл есть или это особенность такая?
Oleg_121
Сообщения: 81 Зарегистрирован: Пн апр 14, 2008 21:09
Сообщение
Oleg_121 » Вт сен 08, 2009 20:26
Не понятно что за значение tariff_link_id_find и как его получить с помощью URFA. Подскажите пожалуйста.
Magnum72
Сообщения: 1947 Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:
Сообщение
Magnum72 » Ср сен 09, 2009 06:20
Oleg_121 писал(а): Не понятно что за значение tariff_link_id_find и как его получить с помощью URFA. Подскажите пожалуйста.
Ну можно очередной костыль написать конечно для поиска его, но вообще я вывожу пользователю все его ТП с помошью SQL запроса и запоминаю ID на который юзер кликнет.
Oleg_121
Сообщения: 81 Зарегистрирован: Пн апр 14, 2008 21:09
Сообщение
Oleg_121 » Ср сен 09, 2009 07:41
Тоесть это значение = "ID связки" в админке?
nma
Сообщения: 8 Зарегистрирован: Пн июл 16, 2007 16:37
Сообщение
nma » Ср сен 09, 2009 08:25
А на какой версии это работает?
Pulse
Сообщения: 945 Зарегистрирован: Вт окт 03, 2006 12:58
Сообщение
Pulse » Ср сен 09, 2009 10:16
мой вариант. мусор не чистил
/netup/utm5/bin/utm5_urfaclient -a moment_change_tp -account_id 1922 -tariff_current 73
Код: Выделить всё
<?xml version="1.0"?>
<urfa>
<call function="rpcf_get_all_services_for_user" output="0">
<parameter name="account_id" comment="User account ID"/>
</call>
<for name="w" from="0" count="size(slink_id_array)">
<set dst="service_type" src="service_type_array" src_index="w"/>
<set dst="slink_id" src="slink_id_array" src_index="w" />
<if variable="service_type" value="3" condition="eq">
<parameter name="slink_id" comment="service link ID"/>
<call function="rpcf_get_iptraffic_service_link" output="0">
</call>
</if>
<if variable="service_type" value="5" condition="eq">
<parameter name="slink_id" comment="slink ID"/>
<call function="rpcf_get_dialup_service_link" output="0">
</call>
</if>
<call function="rpcf_delete_slink" output="0"/>
</for>
<call function="rpcf_get_user_by_account" output="0">
<parameter name="account_id" comment="User account ID"/>
</call>
<set dst="need_block" value="0"/>
<call function="rpcf_change_intstat_for_user">
</call>
<call function="rpcf_unlink_user_tariff" output="0">
<parameter name="user_id" comment="User ID"/>
<parameter name="account_id" comment="Account ID, default is basic account"/>
<parameter name="tariff_link_id" comment="Tariff link ID to remove"/>
</call>
<set dst="tariff_link_id" value="0"/>
<!--set src="tariff_next" dst="tariff_current"/-->
<call function="rpcf_link_user_tariff" output="0">
<parameter name="account_id" comment="Account ID, default is basic account"/>
<parameter name="tariff_current" comment="Current discount period tariff"/>
<parameter name="tariff_next" comment="Next discount period tariff, default is same as tariff_current"/>
<parameter name="discount_period_id" comment="Discount period ID"/>
</call>
<set src="tariff_current" dst="tariff_id"/>
<call function="rpcf_get_tariff" output="0"/>
<for name="j" from="0" count="size(service_id_array)">
<set src="link_by_default_array" src_index="j" dst="link_by_default"/>
<if variable="link_by_default" value="1" condition="eq">
<set dst="slink_id" value="0"/>
<set src="service_id_array" src_index="j" dst="service_id"/>
<set src="service_type_array" src_index="j" dst="service_type"/>
<set src="service_cost_array" src_index="j" dst="service_cost"/>
<set dst="return_type" value=""/>
<if variable="service_type" value="1" condition="eq">
<call function="rpcf_add_service_to_user">
<parameter name="discount_date" comment="Discount date for once service"/>
</call>
</if>
<if variable="service_type" value="2" condition="eq">
<call function="rpcf_add_service_to_user">
<parameter name="is_blocked" comment="Block type in numeric form"/>
<parameter name="discount_period_id" comment="Discount period ID"/>
<parameter name="start_date" comment="Service start date (unix timestamp)"/>
<parameter name="expire_date" comment="Service expire date (unix timestamp)"/>
<parameter name="unabon" value="1"/>
<parameter name="unprepay" comment="Decrease prepayed units in blocked state"/>
</call>
</if>
<if variable="service_type" value="3" condition="eq">
<call function="rpcf_add_service_to_user">
<parameter name="is_blocked" comment="Block type in numeric form"/>
<parameter name="discount_period_id" comment="Discount period ID"/>
<parameter name="start_date" comment="Service start date (unix timestamp)"/>
<parameter name="expire_date" comment="Service expire date (unix timestamp)"/>
<parameter name="unabon"/>
<parameter name="unprepay" comment="Decrease prepayed units in blocked state"/>
<parameter name="ip_address" comment="IP-address array for IP-traffic service"/>
<parameter name="mask" comment="IP mask array for IP-traffic service"/>
<parameter name="mac" comment="MAC address array for IP-traffic service"/>
<parameter name="iptraffic_login" comment="Service link login"/>
<parameter name="iptraffic_allowed_cid" comment="Allowed CID"/>
<parameter name="iptraffic_password" comment="Service link password"/>
<parameter name="ip_not_vpn" comment="1 if IP is not VPN, else 0"/>
<parameter name="dont_use_fw" comment="1 if don't use firewall, else 0"/>
<parameter name="router_id" comment="Router ID for each IP-address"/>
<parameter name="tclass_id" comment="TClass array for quotas"/>
<parameter name="quota" comment="Quotas array"/>
</call>
</if>
<if variable="service_type" value="5" condition="eq">
<set dst="dialup_login" src="login"/>
<set dst="dialup_password" src="password"/>
<if variable="dialup_login" value="" condition="ne">
<call function="rpcf_add_service_to_user">
<parameter name="is_blocked" comment="Block type in numeric form"/>
<parameter name="discount_period_id" comment="Discount period ID"/>
<parameter name="start_date" comment="Service start date (unix timestamp)"/>
<parameter name="expire_date" comment="Service expire date (unix timestamp)"/>
<parameter name="unabon"/>
<parameter name="unprepay" comment="Decrease prepayed units in blocked state"/>
<parameter name="callback_enabled"/>
<parameter name="dialup_login" comment="Service link login"/>
<parameter name="dialup_allowed_cid" comment="Allowed CID"/>
<parameter name="dialup_allowed_csid" comment="Allowed CSID"/>
<parameter name="dialup_password" comment="Service link password"/>
</call>
</if>
</if>
</if>
</for>
</urfa>
proto
Сообщения: 23 Зарегистрирован: Вт мар 11, 2008 12:42
Сообщение
proto » Чт сен 10, 2009 11:59
Magnum72 писал(а):
....
На последней версии UTM5
При запуске пишет:
Код: Выделить всё
./bin/utm5_urfaclient -a olympus_hot_change_tp -user_id 178 -account_id 181 -tariff_next 81 -tariff_link_id_find 7041
Notice: Sep 10 12:57:35 UTM5 Config: Processing config file: /netup/utm5/utm5_urfaclient.cfg
Processing action: olympus_hot_change_tp
ERROR: code 13 (Permission denied)
main.log:
Код: Выделить всё
Info : Sep 10 12:57:36 RPCServer@0.0.0.0: Client connecting: 127.0.0.1:64981
Info : Sep 10 12:57:36 RPCConn: Connection from: 127.0.0.1:64981
Info : Sep 10 12:57:36 RPCConn<init@127.0.0.1>: Access granted to <init@127.0.0.1> (UID: -1)
Info : Sep 10 12:57:36 RPCConn<init@127.0.0.1>: Request for illegal function: 0x00a2
Warn : Sep 10 12:57:36 RPCConn<init@127.0.0.1>: Session closed
Magnum72
Сообщения: 1947 Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:
Сообщение
Magnum72 » Чт окт 29, 2009 16:04
Посмотрел как у Pulse, натолкнулся на мысль что можно сделать лучше:
Данный скрипт имеет ограничение:
1) В тарифном плане не должно быть 2 и более услуг с одинаковым типом. (например две передачи трафика, или два диалапа)
2) Доделать под услуги дело 5 минут (по аналогии с существующими), я не стал описывать те которые не использую для ускорения работы скрипта.
Запускать так:
Код: Выделить всё
-a olympus_hot_change_tp -account_id 11131 -tariff_current 151 -tariff_link_id_find 67077
Код: Выделить всё
<?xml version="1.0"?>
<urfa>
<parameter name="user_id"/>
<parameter name="account_id"/>
<parameter name="slink_id"/>
<parameter name="discount_period_id"/>
<parameter name="is_blocked"/>
<parameter name="discount_date"/>
<parameter name="tariff_link_id"/>
<parameter name="tariff_current"/>
<parameter name="tariff_next"/>
<parameter name="start_date"/>
<parameter name="expire_date"/>
<parameter name="unabon"/>
<parameter name="unprepay"/>
<parameter name="is_blocked"/>
<parameter name="ip_address"/>
<parameter name="mask"/>
<parameter name="mac"/>
<parameter name="iptraffic_login"/>
<parameter name="iptraffic_allowed_cid"/>
<parameter name="iptraffic_password"/>
<parameter name="ip_not_vpn"/>
<parameter name="dont_use_fw"/>
<parameter name="router_id"/>
<parameter name="tclass_id"/>
<parameter name="quota"/>
<parameter name="callback_enabled"/>
<parameter name="dialup_login"/>
<parameter name="dialup_allowed_cid"/>
<parameter name="dialup_allowed_csid"/>
<parameter name="dialup_password"/>
<parameter name="tariff_link_id_find"/>
<parameter name="lock_per_srv" value="0"/>
<parameter name="lock_ip_srv" value="0"/>
<call function="rpcf_get_all_services_for_user"/>
<for name="w" from="0" count="size(slink_id_array)">
<set dst="service_type" src="service_type_array" src_index="w"/>
<set dst="slink_id" src="slink_id_array" src_index="w" />
<if variable="service_type" value="2" condition="eq">
<if variable="lock_per_srv" value="1" condition="ne">
<call function="rpcf_get_periodic_service_link"/>
<if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
<set dst="lock_per_srv" value="1"/>
<call function="rpcf_delete_slink"/>
</if>
</if>
</if>
<if variable="service_type" value="3" condition="eq">
<remove name="ip_address"/>
<remove name="mask"/>
<remove name="mac"/>
<remove name="iptraffic_login"/>
<remove name="iptraffic_password"/>
<remove name="iptraffic_allowed_cid"/>
<remove name="ip_not_vpn"/>
<remove name="dont_use_fw"/>
<remove name="router_id"/>
<remove name="tclass_id"/>
<remove name="tclass_name"/>
<remove name="quota"/>
<if variable="lock_ip_srv" value="1" condition="ne">
<call function="rpcf_get_iptraffic_service_link"/>
<if variable="tariff_link_id" value="tariff_link_id_find" condition="eq">
<set dst="lock_ip_srv" value="1"/>
<call function="rpcf_delete_slink"/>
</if>
</if>
</if>
</for>
<call function="rpcf_get_user_by_account"/>
<set dst="tariff_link_id" src="tariff_link_id_find"/>
<call function="rpcf_unlink_user_tariff"/>
<set dst="tariff_link_id" value="0"/>
<call function="rpcf_link_user_tariff"/>
<set dst="tariff_id" src="tariff_current"/>
<call function="rpcf_get_tariff"/>
<for name="j" from="0" count="size(services_count)">
<set src="link_by_default_array" src_index="j" dst="link_by_default"/>
<if variable="link_by_default" value="1" condition="eq">
<set dst="slink_id" value="0"/>
<set src="service_id_array" src_index="j" dst="service_id"/>
<set src="service_type_array" src_index="j" dst="service_type"/>
<set src="service_cost_array" src_index="j" dst="service_cost"/>
<set dst="return_type" value="integer_return"/>
<set dst="unabon" value="1"/>
<set dst="unprepay" value="1"/>
<set dst="start_date" value="now()"/>
<call function="rpcf_add_service_to_user"/>
</if>
</for>
</urfa>
Pulse
Сообщения: 945 Зарегистрирован: Вт окт 03, 2006 12:58
Сообщение
Pulse » Вт ноя 03, 2009 15:12
чот не получается, услуга ip-трафик не привязывается на новом тарифе
Magnum72
Сообщения: 1947 Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:
Сообщение
Magnum72 » Вт ноя 03, 2009 22:05
В новом ТП у аналогичной услуге стоит галочка "Подключать по умолчанию" ?
Pulse
Сообщения: 945 Зарегистрирован: Вт окт 03, 2006 12:58
Сообщение
Pulse » Чт ноя 05, 2009 14:03
да стоят галочки
bear
Сообщения: 498 Зарегистрирован: Чт ноя 15, 2007 11:53
Сообщение
bear » Чт ноя 05, 2009 17:44
тож не получилось, только у меня вообще ни одна услуга не подключилась
в тарифе их 2
Коммутированный доступ
Передача IP-трафика
Хотя тариф сам по себе поменялся
Код: Выделить всё
./utm5_urfaclient -a olympus_hot_change_tp -account_id 69 -tariff_current 16 -tariff_link_id_find 28194
Notice: Nov 05 17:44:27 UTM5 Config: Processing config file: /netup/utm5/utm5_urfaclient.cfg
Processing action: olympus_hot_change_tp
Mandatory parameter dialup_login value not specified
ERROR: Mandatory parameter value not specified
Magnum72
Сообщения: 1947 Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:
Сообщение
Magnum72 » Чт ноя 05, 2009 21:05
bear писал(а): тож не получилось, только у меня вообще ни одна услуга не подключилась
в тарифе их 2
Коммутированный доступ
Передача IP-трафика
Хотя тариф сам по себе поменялся
Код: Выделить всё
./utm5_urfaclient -a olympus_hot_change_tp -account_id 69 -tariff_current 16 -tariff_link_id_find 28194
Notice: Nov 05 17:44:27 UTM5 Config: Processing config file: /netup/utm5/utm5_urfaclient.cfg
Processing action: olympus_hot_change_tp
Mandatory parameter dialup_login value not specified
ERROR: Mandatory parameter value not specified
У меня вроде сервис диалапа не описан в скрипте, его надо доделать
Magnum72
Сообщения: 1947 Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:
Сообщение
Magnum72 » Чт ноя 05, 2009 21:08
Pulse писал(а): чот не получается, услуга ip-трафик не привязывается на новом тарифе
А скрипт запущенный с -debug что говорит