UTM5+freeradius

добавляем в sql.conf
запросы в базу UTM5 для авторизации

тесты с базой UTM5

после запуска оптизатора
# /netup/utm5/bin/utm5_optimizer -s "2010-01-01 00:00" -e "2010-07-01 00:00"

количество записей в таблицах до 2010-07-01

mysql> SELECT COUNT(*) FROM discount_transactions_all WHERE from_unixtime(discount_date) < '2010-07-01 00:00:00';
+----------+
| COUNT(*) |
+----------+
|  3089466 |
+----------+
1 ROW IN SET (6 MIN 31.52 sec)
 
mysql> SELECT COUNT(*) FROM discount_transactions_iptraffic_all WHERE from_unixtime(discount_date) < '2010-07-01 00:00:00';
+----------+
| COUNT(*) |
+----------+
|   394803 |
+----------+

обновление UTM5 c 005 на 007

задача заключается также в переводе базы на utf8

на старом железе:

бекапим базу на старом железе, исключая дискаунты:

mysqldump -e -q --default-character-set=latin1 --ignore-table=UTM5.discount_transactions_iptraffic_all 
--ignore-table=UTM5.discount_transactions_all UTM5 > UTM.sql

меняем в дампе упоминания о latin1 на utf8

sed 's/latin1/utf8/g' UTM.sql > UTM5.sql

на новом железе:

создаем новую базу:

mysql -e "CREATE database UTM5 DEFAULT CHARACTER SET utf8;"

импортируем в mysql:
 

Архивирование таблиц базы UTM5

Скрипт выкусывает из базы UTM5 таблицы прошлого месяца и переносит их в архивную базу.
алгоритм работы можно проследить внутри скрипта, описывать не стану. Скрипт рабочий и работает на ура, позаимствован с форума netup.ru у одного из участников.
Запускаю его по крону 1-го числа каждого месяца. В итоге основная база UTM5 не бывает больше 1 гига и в ней хранятся отчеты только текущего месяца.

#!/usr/bin/perl
 
use DBI;
 
$db_host = 'localhost';  
$db_user = '';
$db_pass = '';
$db_name = 'UTM5';
$db_arc_name = 'UTM5arc';
 
$tbl_count = 7;

URI-запросы для netup-payment-systems

https://example.com:8080/osmp?command=check&txn_id=1234567&account=0957835959&sum=10.45
https://example.com:8080/osmp?command=pay&txn_id=223213296834564059&acco
unt=2251&sum=500.00&txn_date=20120219233207

UTM5. URFAclient на PHP. Error calling function.

Для 64-х битных систем, если при вызове пользовательских функций возникает ошибка "Error calling function"
Всему виной php-функция unpack. Костыль нашел на форуме netup.ru.
Нужно поправить функцию AttrGetInt в файле URFAClient_Packet.php

    function AttrGetInt($code)
    {
                if (isset($this->attr[$code]['data'])) {
                    $x = unpack("N", $this->attr[$code]['data']);
                    if ($x[1]>2147483647) return $x[1]-4294967296;
                    return $x[1];
                } else {
                        return FALSE;
                }

UTM5 + freeradius (2 dynamic ip pool) + urfaclient на php + pppoe-server (linux)

Имеем мы биллинг UTM5.
Решили отказаться от NATа и раздать клиентам реальные динамические ip-шники.
Порыскав на форуме netup.ru, я не нашел ничего, что удовлетворяло бы моим запросам.
NASы у нас в виде машин на Линухе, freeradius, urfaclient на php написали умельцы с форума. Единственное, что нашел по теме, и за это огромное человеческое спасибо wingman'у с форума, который осветил эту тему более ярко:
http://www.netup.ru/phpbb/viewtopic.php?t=7948&highlight=%E4%E8%ED%E0%EC...

Полезные запросы в БД UTM5

сменить дату окончания расчетного периода на час вперед у тех РП которые заканчиваются в 00 часов

UPDATE discount_periods SET end_date = 
UNIX_TIMESTAMP(DATE_SUB(FROM_UNIXTIME(end_date),INTERVAL -1 HOUR)) WHERE 
discount_periods.is_expired = 0 AND 
HOUR(FROM_UNIXTIME(discount_periods.end_date)) = 0;

сменить дату окончания расчетного периода на час назад у тех РП которые заканчиваются в 01 часов

UPDATE discount_periods SET end_date = 
UNIX_TIMESTAMP(DATE_SUB(FROM_UNIXTIME(end_date),INTERVAL 1 HOUR)) WHERE 
discount_periods.is_expired = 0 AND 

скрипт shapelog_formation для шейпера UTM5

#!/bin/bash
 
# 10 - входящий канал
# 20 - исходящий канал
# 0 - Удаление записей о ширине канала
# 1 - Установка ширины канала
# 2 - Изменение ширины канала
 
 
#ID=$[$1+3000]
ID=$1
UIP=$2
UBITS=$3
UMASK=$4
BANDWIDTH=$5
STATE=$6
SPD_IN_LOG=/netup/utm5/log/dynashape_in.log
SPD_OUT_LOG=/netup/utm5/log/dynashape_out.log
LOG_TMP=/netup/utm5/log/dynashape.tmp
 
 
echo "ID=$ID UIP=$2 UBITS=$3 UMASK=$4 BANDWIDTH=$5 STATE=$6";
 
case "$7" in
 
10)
 
  case "$6" in
  0)
    sed "/^$ID[[:space:]]/d" $SPD_IN_LOG > $LOG_TMP
    cp $LOG_TMP  $SPD_IN_LOG
  ;;
 
  1)

Обновление UTM5-2.1.007 до UTM5-2.1.009

для начала бекапим старый utm

# cp /netup/ /netup-007/ -R
# mkdir /netup-007/utm5/init.d/
# cp /etc/init.d/utm5_core /netup-007/utm5/init.d/utm5_core
# cp /etc/init.d/netup-payment-systems /netup-007/utm5/init.d/
# mkdir /backups/DB
# backup_db.sh

удаляем старый

# rm -r /netup

устанавливаем новый

# dpkg -i /home/soft/utm5_009/utm5-2.1.009.deb

корректируем utm5.cfg согласно старому

# cat utm5.cfg | sed '/^#/d;/^$/d'
database_type=mysql
database=UTM5
database_login=root
database_password=****
dbcount=40