BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 27 апр 2024, 23:37

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 17 июл 2015, 09:33 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Код:
  Клиент: вер. 5.2 сборка 1229 от 30.03.2015 16:30:37
    os: Windows 7; java: Java HotSpot(TM) Client VM, v.1.8.0_45
    ВНИМАНИЕ: Спецификация версии 1.8 не рекомендуется
  Сервер: вер. 5.2 сборка 1625 от 30.04.2015 17:59:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26

  inet вер. 5.2 сборка 1370 от 30.04.2015 18:00:03

Окружение:

  Клиент:
    os: Windows 7 x86, 6.1
    java: Java HotSpot(TM) Client VM, v.1.8.0_45
    jre home: C:\Program Files (x86)\Java\jre1.8.0_45
  Сервер:
    os: Linux amd64, 3.2.0-4-amd64
    java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26
    jre home: /usr/lib/jvm/java-6-sun-1.6.0.26/jre


user story:
Схема с авторизацией по интерфейсу (используется title интерфейса в Calling-Station-Id).
Инженер-подключенец хочет подключить клиента, открывает список интерфейсов устройства (Модули - Inet - Устройства и ресурсы - правкой клавишей на устройстве - "интерфейсы").
В списке интерфейсов не видит нужного и добавляет его руками.
Жмёт "перечитать конфигурацию на серверах".
Заводит сервис Inet на договоре, проверяет авторизацию - "логин не найден".

Начинаем разбираться:

Код:
radius 07-17/10:52:13  INFO [rdsLstnr-p-9-t-7] InetNas - Search serv on deviceId=33; interfaceId=45
radius 07-17/10:51:19  INFO [rdsLstnr-p-9-t-6] InetRadiusProcessor - [username=user1234] InetServ not found.
radius 07-17/10:51:19  INFO [rdsLstnr-p-9-t-6] InetRadiusProcessor - Return code=1
radius 07-17/10:51:19  INFO [rdsLstnr-p-9-t-6] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS:
Packet type: Access-Reject
...

Но! Инженер только что завёл интерфейс с другим id!=45 и тем же title.
При этом в списке интерфейсов я не вижу интерфейса с id=45.
Удаляю сервис, удаляю вновь заведённый дублриованный интерфейс - всё равно в списке не вижу интерфейса с id=45.
Делаю
Код:
select * from inv_device_port_28 where deviceId=33;

- вижу id=45 c нужным title:

Код:
...
|       33 |   44 | 798****  |      1 |            0 |          |
|       33 |   45 | 791****  |      1 |            0 |          |
|       33 |   47 | 791****  |      1 |            0 |          |
|       33 |   48 | 791****  |      1 |            0 |          |
...

(звёздочки специально поставил)

Захожу на договор, пытаюсь снова создать сервис - в выборе интерфейса вижу id=45
Т.о. какой-то косяк в построении списка для устройства.
Лезу в код - вижу баг:
ru.bitel.oss.systems.inventory.resource.server.bean.DevicePortDao.list(int deviceId, int status, boolean title, boolean indexList, boolean subscription)

Код:
PreparedStatement ps = listImplPS(
        this.tableName + ".deviceId, " + this.tableName + ".port, " + this.tableName + ".status, " + this.tableName + ".ipCategoryId, s.subscriberId, s.subscriberTitle",
        "LEFT JOIN inv_device_port_subscription_" + this.mid + " as s ON s.deviceId=" + this.tableName + ".deviceId AND s.port=" + this.tableName + ".port",
        this.tableName + ".deviceId=? AND (? OR " + this.tableName + ".status=?)" +
        " AND (s.dateFrom IS NULL OR s.dateFrom<=?) AND (s.dateTo IS NULL OR s.dateTo>=?)", "port", 0, 0);
      ps.setInt(1, deviceId);
      ps.setBoolean(2, status < 0);
      ps.setInt(3, status);


В этом селекте join-ится таблица подписок на порт, но условия на даты подписки прописаны не в условии join-а, а во where, поэтому:
1. Если подписок не было - всё ок.
2. Если есть подписка с открытой датой - всё ок.
3. Если были подписки, но все они с date1!=null и date2!=null - интерфейс не будет показан в списке.

Проверил простым кодом в BGBS - так и есть:

Код:
DevicePortDao dao = new DevicePortDao(con, 28);
for(DeviceInterface iface : dao.list(33, 1, true, true, true)){
   print(iface.getPort());
}


out:

Код:
GENERATE_TIME: 17.07.15 11:28:28
EXECUTION_STOP_TIME: 17.07.15 11:28:28
PROCESS_TIME: 71

OUT:
0
1
2
3
4
6
7
8
9
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
36
37
38
39
40
41
42
43
44
47
48


- id=45 нет в списке.

Но! Это только один очевидный баг.
Второй - баг или фича: почему модуль Inet даёт завести второй интерфейс с одинаковым Title?
Может быть сделать проверку на это? Хотя бы опциональную (вдруг кому нужно одинаковые title, хотя не представляю, зачем).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 июл 2015, 13:31 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Баг с интерфейсами исправлен, обновление выкладывается. На самом деле его исправили еще год назад в более старших версиях ( >=6.0 ), на 5.2 не накатили.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 ноя 2015, 13:47 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Обновился, теперь всё ок, спасибо


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.762s | 26 Queries | GZIP : On ]