forum.bitel.ru
http://forum.bitel.ru/

Как синхронизировать состояние сервиса
http://forum.bitel.ru/viewtopic.php?f=44&t=8810
Страница 1 из 1

Автор:  lan31 [ 02 янв 2014, 11:01 ]
Заголовок сообщения:  Как синхронизировать состояние сервиса

6.0
Как синхронизировать состояние сервиса в соответствии со статусом договора?
То есть если у договора статус закрыт, то и состояние сервиса перевести в состояние отключен.
Так как есть договоры со статусом закрыт а состояние сервиса у них включен.
Возможно появляются такие договоры когда договор закрывается по недостатку средств баланса, а в это время BGInetAccess в зависшем состоянии, и после перезапуска BGInetAccess`а сервисы не выключаются, остаются в состоянии включен.
Или когда абонент имея статус договора закрыт, сменил тарифный план через web статистику, сервис на закрытом договоре включается.
Видимо скрипт поведения "изменения тарифа договора" включает сервис, он не проверят статус договора.
Код:
//package ru.maglan.bgbilling.script.contract;

import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import java.util.ArrayList;
import java.util.List;
 
import ru.bitel.bgbilling.kernel.container.managed.ServerContext;
import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.module.common.bean.User;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServOption;
import ru.bitel.bgbilling.modules.inet.api.common.service.InetServService;
//import ru.bitel.bgbilling.modules.inet.api.server.event.InetServModifiedEvent;
import ru.bitel.bgbilling.modules.inet.access.sa.event.InetSaServModifyEvent;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

public class MyTariffChange
   extends EventScriptBase
{
   private static int DLINK_SERV_TYPE = 1;
   private static int INET_MODULE_ID = 1;

   @Override
   public void onEvent( Event event, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {
ServerContext context = ServerContext.get();      
      InetServService wsServ = context.getService( InetServService.class, INET_MODULE_ID );
 
      List<InetServ> servList = wsServ.inetServList( event.getContractId() );
 
      for ( InetServ serv : servList )
      {
         if ( serv.getTypeId() == DLINK_SERV_TYPE )
         {
            print( "publish InetSaServModifyEvent ");
            //context.publishAfterCommit( new InetServModifiedEvent( INET_MODULE_ID, event.getContractId(), User.USER_SERVER, serv, serv, new ArrayList<InetServOption> () ) );
            context.publishAfterCommit( new InetSaServModifyEvent( INET_MODULE_ID, 0, serv, serv, InetServ.STATE_ENABLE, new ArrayList<InetServOption> ()  ) );
         }
      }
   }

}

Автор:  skyb [ 03 янв 2014, 08:08 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

в шедулере есть активация деактивация сервисов, настройте задание

Автор:  lan31 [ 05 янв 2014, 10:33 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

skyb писал(а):
в шедулере есть активация деактивация сервисов, настройте задание

Попробовал запустить в ручную, статус сервиса после выполнения задачи не изменился. По прежнему включен на закрытом договоре.

Автор:  skyb [ 05 янв 2014, 14:14 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

lan31 писал(а):
skyb писал(а):
в шедулере есть активация деактивация сервисов, настройте задание

Попробовал запустить в ручную, статус сервиса после выполнения задачи не изменился. По прежнему включен на закрытом договоре.

а руками ели попробовать на договоре включить, тоже фиг? паходу у меня такая же проблема, правда возникла она раньше, и решить ее не могут посихпор. на инете с самого начала? или перешли с другого модуля
?

Автор:  Amir [ 10 янв 2014, 02:32 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

А этот скрипт точно нужен?
Попробуйте
context.publishAfterCommit( new InetSaStateModifyEvent( INET_MODULE_ID, 0, serv, InetServ.STATE_ENABLE, 0, true ) );
вместо
context.publishAfterCommit( new InetSaServModifyEvent( INET_MODULE_ID, 0, serv, serv, InetServ.STATE_ENABLE, new ArrayList<InetServOption> () ) );

Означает команду на включение, но последний аргумент - recheck - означает, что Access выполнит проверку (авторизацию) сервиса.
В конфигурации модуля должно быть указано authorization.mode=1, чтобы recheck работал.

Автор:  ok-2004 [ 15 янв 2014, 13:25 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

Цитата:
паходу у меня такая же проблема, правда возникла она раньше, и решить ее не могут посихпор
...
100 раз подтверждаю!
Будь проклят тот день когда я связался с модулем inet
Типичная ситуация :
INET управляет микротиком по inteserviceactivator
Всё настроено по http://wiki.bitel.ru/index.php/%D0%9E%D ... tik_api%29
инициализация сервиса - по трафику, нетфлоу логи есть!

Клиент уходит в минус, разрешающие правила с микротика удаляются, клиент заносит денежку, разрешающие правила на микротике не появляются, статус сервиса - открыт, состояние - отключён!
начинаю манипулировать пунктами контекстного меню :
1.Синхронизировать сервис на устройсте ( отладка ) - в логах вижу что , внячале вызываюся команды sa.command.serv.create, потом -sa.command.serv.disable, команда sa.command.serv.enable не вызывается!

2 Включить сервис на устройстве (отладка) - вместо команд sa.command.serv.enable вижу в логах только :

Код:
mq 01-15/10:59:32  INFO [event-proc-p-2-t-1] InetServRuntimeMap - Caught event: Event[ru.bitel.bgbilling.modules.inet.api.server.event.InetServModifiedEvent] moduleId: 10; pluginId: no; cid: 10724; scid: -1; userId: 1; timestamp: 1389769172213
mq 01-15/10:59:32  INFO [event-proc-p-2-t-1] InetServRuntimeMap - Reload InetServRuntime: 857
mq 01-15/10:59:32  INFO [event-proc-p-2-t-1] InetServRuntimeMap - Removing InetServRuntime: 857
mq 01-15/10:59:32  INFO [event-proc-p-2-t-1] InetServRuntimeMap - Adding InetServRuntime: 857
mq 01-15/10:59:32  INFO [event-proc-p-2-t-1] InetServRuntimeMap - ContractId: 10724; status: 0; servId: 857
        1142:192.168.144.104-192.168.144.104:222.123:16
        Options [] TariffModuleTreeSet [28:02.04.2013-…; ]
        Device state: 0; optionSet:


В результате клиента включаю руками на микротике :cry:
В чём смысл этих команд ? зачем они ваще нужны если нихрена не работают ?

http://www.bgbilling.ru/v6.0/doc/ch17s10.html :
Цитата:
Состояние сервиса может быть "подключён", либо "отключен", отображает реальное состояние, которое было установлено на устройстве. Между состояниями "подключен" и "отключен" модуль осуществляет автоматическое переключение в зависимости от состояния баланса (больше, либо меньше лимита), статуса договора, статуса сервиса. Сервис подключен, когда в договоре установлен активный для него статус, сервис в статусе открыт и баланс больше лимита.

Договор у клиента - активен! сервис - открыт ! баланс больше лимита! ВСе условия выполняются! Но сотояние сервиса всёравно - ОТКЛЮЧЁН! Хоть ты тресни! Даже трафик с него в нетфлоу-логах есть !
ЧТО ещё надо БЖБ чтобы включить в стостояние "подключён" ?
Как его заставить выполнить команды включения разрешающих правил на микротике ?

Автор:  skyb [ 15 янв 2014, 14:33 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

в таких сисуациях нада оба А А сервера перепустить, помогает, ну и брокер, его кстати первым

Автор:  Amir [ 15 янв 2014, 15:14 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

Все проблемы, описанные ниже с первым сообщением никак не соотносятся.
Там именно в скрипте предобработки изменения тарифа неправильный вызов:
Цитата:
Видимо скрипт поведения "изменения тарифа договора" включает сервис, он не проверят статус договора.

ok-2004: Билд последний? После обновления делали "Скомпилировать все" в динамических классах перед тем как обновить/перезапустить Access/Accounting?
Нужен доступ по ssh и номер договора, на котором можно посмотреть.

Автор:  ok-2004 [ 15 янв 2014, 15:57 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

2amir:
билд последнйи. конечно компилил перед обновлением и перезапуском акцессов, Вам очевидно нужен будет доступ как к серверу BGB, так и к серверу inet. Я подготовлю доступ ко второму компу ( он у нас на левых ипах ) и скину данные Вам в личку.

Автор:  ok-2004 [ 15 янв 2014, 16:30 ]
Заголовок сообщения:  Re: Как синхронизировать состояние сервиса

Amir , отправил данные по доступу в ЛС

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/