Просмотр Исходного

{tip}*Время выполнения инструкции*: 2-3 часа на каждые 500 абонентов, зависит от объёма базы и производтельности серверов{tip}

{info}Окончательная миграция из *Carbon Billing 4* в *Carbon Billing 5* для запуска пятой версии в коммерческую эксплуатацию должна проходить под наблюдением специалиста *CarbonSoft*.{info}
{warning}{*}Время миграции просьба заранее согласовать в техподдержке по телефону или в соответствующей заявке.*{warning}

{toc:maxLevel=2}

h2. Общие сведения

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

Билд 4-ой версии должен быть не старее:
{code}
cat /etc/version
452300
{code}
{info}
В случае, если Вам необходимо, чтобы биллинг до запуска в коммерческую эксплуатацию не отправлял сообщения по мигрированным абонентам, необходимо отключить их отправку. Для этого необходимо перейти на вкладку *Управление абонентами и тарифами - настройки - настройки(в файле) - Настройки демона отправки сообщений* и отключить опцию *"Включить отправку сообщений:"*
{info}

*Важно\! Скрипты импорта и экспорта стараются быть максимально информативными. Читайте их вывод и обо всех проблемах сообщайте в тех. поддержку.*


h2. Порядок импортирования:

Просто для ознакомления. Ничего в этом пункте делать не нужно
{code}
migrate_card_series
migrate_cards
migrate_ippool
migrate_switch
migrate_nas
migrate_usluga
migrate_tariff
migrate_tariff_usluga
migrate_abonents
migrate_users_usluga
{code}

h2. Выполнение миграции (пошаговое)

*Шаг 1. Подготовка к миграции (сервер 4й версии)*
Открываем порт для доступа к БД в 4й версии
Допустим IP биллинга 5й версии 2.2.2.2.
Выполняем в консоли биллинга 4й версии
{panel}
iptables \-I INPUT \-s 2.2.2.2 \-p tcp \--dport 3050 \-j ACCEPT
iptables \-I OUTPUT \-d 2.2.2.2 \-p tcp \--sport 3050 \-j ACCEPT
{panel}
Из консоли получаем пароль доступа к БД биллинга 4й версии:
{panel}
grep ISC_PASSWORD /etc/ics/ics.conf
\#вывод ISC_PASSWORD='servicem'
{panel}
В нашем случае пароль это servicem

*Шаг 2. Удаляем старые карты оплаты из БД (сервер 5й версии)*
{panel}
sqlexec "delete from cards"
sqlexec "delete from card_series"
{panel}

*Шаг 2.1 Удаляем старые карты оплаты из БД (сервер 4й версии)*
{panel}
sqlexec "delete from cards where SERIES_NO in (select SERIES_NO from card_series where VALID_DATE <='now')"
sqlexec "delete from card_series where VALID_DATE <='now'"
{panel}

{color:#ff0000}Далее делаем все только на сервере&nbsp;5й версии.{color}

*Шаг 3. Подготавливаем рабочий каталог для миграции*
{panel}
chroot /app/asr_billing/
mkdir \-p /root/new_migration/csv_output
cd /root/new_migration/
{panel}

*Шаг 4. Получаем данные из биллинга 4й версии*
Для примера:
IP биллинга 4-ой версии: 1.1.1.1
Пароль БД: servicem

{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/crb4_csv_export/main.pyc 1.1.1.1 servicem
{panel}
Внимательно посмотрите вывод.
Проверьте, что данные выгрузились
{panel}
ll csv_output
{panel}
Вывод будет такой
{code}
итого 772
-rw-r--r-- 1 root root 605262 Сен 16 14:27 abonent.csv
-rw-r--r-- 1 root root 2857 Сен 16 14:27 abonent.csv.cfg
-rw-r--r-- 1 root root 0 Сен 3 15:41 abonent.csv.error
-rw-r--r-- 1 root root 1360 Сен 16 14:27 ip_pull.csv
-rw-r--r-- 1 root root 420 Сен 16 14:27 ip_pull.csv.cfg
-rw-r--r-- 1 root root 0 Авг 20 17:38 ip_pull.csv.error
-rw-r--r-- 1 root root 327 Сен 16 14:27 nas.csv
-rw-r--r-- 1 root root 965 Сен 16 14:27 nas.csv.cfg
-rw-r--r-- 1 root root 0 Июл 24 15:51 nas.csv.error
-rw-r--r-- 1 root root 5188 Сен 16 14:27 pay_card.csv
-rw-r--r-- 1 root root 666 Сен 16 14:27 pay_card.csv.cfg
-rw-r--r-- 1 root root 260 Сен 16 14:27 switch.csv
-rw-r--r-- 1 root root 678 Сен 16 14:27 switch.csv.cfg
-rw-r--r-- 1 root root 0 Июл 24 15:51 switch.csv.error
-rw-r--r-- 1 root root 1912 Сен 16 14:27 tariff.csv
-rw-r--r-- 1 root root 2034 Сен 16 14:27 tariff.csv.cfg
-rw-r--r-- 1 root root 0 Авг 20 17:35 tariff.csv.error
-rw-r--r-- 1 root root 4050 Сен 16 14:27 tariff_usluga.csv
-rw-r--r-- 1 root root 1611 Сен 16 14:27 tariff_usluga.csv.cfg
-rw-r--r-- 1 root root 0 Авг 20 17:35 tariff_usluga.csv.error
-rw-r--r-- 1 root root 112057 Сен 16 14:27 users_usluga.csv
-rw-r--r-- 1 root root 401 Сен 16 14:27 users_usluga.csv.cfg
-rw-r--r-- 1 root root 979 Сен 16 14:27 usluga.csv
-rw-r--r-- 1 root root 1657 Сен 16 14:27 usluga.csv.cfg
-rw-r--r-- 1 root root 0 Авг 20 17:35 usluga.csv.error
{code}
Файлы \*csv.error должны быть с нулевым размером, либо отсутствовать

*Шаг 5. Заносим в БД 5й версии данные сериях карт оплаты*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/card_series.csv.cfg csv_output/card_series.csv migrate_card_series
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 6. Заносим в БД 5й версии данные о картах оплаты*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/cards.csv.cfg csv_output/cards.csv migrate_cards
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 7. Заносим в БД 5й версии данные о пулах IP*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/ip_pull.csv.cfg csv_output/ip_pull.csv migrate_ippool
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 8. Заносим в БД 5й версии данные о коммутаторах*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/switch.csv.cfg csv_output/switch.csv migrate_switch
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 9. Заносим в БД 5й версии данные о NAS-ах*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/nas.csv.cfg csv_output/nas.csv migrate_nas
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 10. Заносим в БД 5й версии данные об услугах*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/usluga.csv.cfg csv_output/usluga.csv migrate_usluga
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 11. Заносим в БД 5й версии данные о тарифах*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/tariff.csv.cfg csv_output/tariff.csv migrate_tariff
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 12. Заносим в БД 5й версии данные о тарифных услугах*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/tariff_usluga.csv.cfg csv_output/tariff_usluga.csv migrate_tariff_usluga
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 13. Заносим в БД 5й версии данные об абонентах&nbsp;*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/abonent.csv.cfg csv_output/abonent.csv migrate_abonents
{panel}
Внимательно посмотрите вывод.
Подробно проверяем, что данные в биллинге соответствуют данным из 4й версии (хотя бы пару записей).

*Шаг 14. Заносим в БД 5й версии данные о не тарифных услугах, подключенных абонентам*
{panel}
python2.7 /usr/lib/python2.7/site-packages/carbon_migration_scripts/file_client/import_csv.pyc csv_output/users_usluga.csv.cfg csv_output/users_usluga.csv migrate_users_usluga
{panel}

h2. Что не поддерживается в текущей версии миграции:
{info}
* финансовые группы
* карточные абоненты
* у абонентов снимаются обещанные платежи
* Пароли, содержащие кириллицу, удаляются.
* Слишком длинные ФИО обрезаются.
* Для тарифов с неуказанной абон.платой ставится 0.
* Логины с пробелом
* При экспорте тарифов с одинаковым названием произойдет коллизия. Тоже самое с услугами.
{info}


h2. Решение проблемы со спиcаниями


h3. Как списания и блокировки работают в Carbon Billing 4 при определённых настройках

В Carbon Billing 4 при некоторых настройках ежемесячное списание выглядит следующим образом (рассмотрим на конкретном примере тарифа и одного абонента):
* Тариф стоит 600 рублей
* У абонента на текущий момент на счету 400 рублей
* К первому числу следующего месяца Carbon Billing 4 спишет с абонента 600 рублей и у абонента на счету будет -200
* Абонент при этом будет активен и для того, чтобы в следующем месяце абонент продолжил работу ему будет достаточно положить 201 рублей, чтобы на счету абонента был минимум 1 рубль.

h3. Как списания и блокировки работают в Carbon Billing 5
В Carbon Billing 5 работа биллинга при ежемесячных списаниях будет выглядеть немного по - другому (рассмотрим на конкретном примере тарифа и одного абонента):
* Тариф стоит 600 рублей
* У абонента на текущий момент на счету 400 рублей
* К первому числу следующего месяца абонент будет заблокирован, т.к. для списания требуется 600 рублей а 400 < 600
* Для разблокировки абоненту требуется положить на счет минимум 200 рублей, чтобы на счету было не меньше 600 рублей
* Если у абонента на счету хватает средств - биллинг списывает 600 рублей и активирует абонента.

h3. Как проверить, что у Вас именно это ситуация
В случае, если на Carbon Billing 4 у Вас настроен тип списания так, как описано выше, то Вам необходимо проверить на Carbon Billing 5 после миграции несколько абонентов, удовлетворяющих следующим требованиям:
1) У абонента тариф, который описан выше
2) У абонента отрицательный баланс

{info}
Т.к. на Carbon Billing 4 списания уже прошли, то у абонента будет баланс отрицательным и абоненту нужно заплатить всего 201 рубль, чтобы активироваться(по логике Carbon Billing 4), но на Carbon Billing 5 данному абоненту нужно будет заплатить не 201 рубль, а 800 (200+600), чтобы баланс был 600 рублей.
{info}

h3. Как разрешить ситуацию

Данную проблему с разницей в минимальных платежах для разблокировки можно решить запуском следующей команды:
{code}
chroot /app/asr_billing/
python2.7 /usr/lib/python2.7/site-packages/python_tools/client_fix_scripts/add_summ_abon.py
{code}

Данный скрипт добавит всем абонентам с блокировкой по отрицательному балансу и балансом меньше 0 приход на сумму, равной одной абонентской плате по тарифу. Абонентская плата = сумма стоимости всех услуг, входящих в тариф.
Таким образом после выполнения данного скрипта у абонента из примера будет баланс 400 рублей и для разблокировки ему потребуется та же сумма, что и в Carbon Billing 5,а именно 200 рублей.

В случае, если нужно убрать из выборки абонентов на конкретном тарифе, Вы можете запустить данный скрипт и передать ему в виде аргументов *tarif_id*.
Например, если необходимо добавить приход всем абонентам, кроме абонентов на тарифе с id 1137 и 1136:
{code}
chroot /app/asr_billing/
python2.7 /usr/lib/python2.7/site-packages/python_tools/client_fix_scripts/add_summ_abon.py 1137 1136
{code}