Арифметическая ошибка в 5.3-004-update2-debian_wheezy_x64

Технические вопросы по UTM 5.0
Ответить
big-town
Сообщения: 3
Зарегистрирован: Пт май 05, 2017 01:54

Арифметическая ошибка в 5.3-004-update2-debian_wheezy_x64

Сообщение big-town »

Появились абоненты с балансом на ЛС -6.9039318099687e-310. Абоненты блокируются системой. У абонентов фиксированный списания в месяц круглой суммой без копеек. В чем проблема? Как это исправить?

Пока как временное решение использую скрипт вида:

Код: Выделить всё

#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Socket;


my $db_base="UTM5";
my $db_host="ip";
my $db_port=3306;
my $db_login="login";
my $db_pass="pasword";

my $dsn="dbi:mysql:$db_base:$db_host:$db_port";
my $dbh_utm=DBI->connect($dsn,$db_login,$db_pass);

my $sth = $dbh_utm->prepare&#40;"SELECT * FROM accounts WHERE balance<0 and balance>-0.001 AND is_deleted=0 "&#41;;
$sth->execute;
open&#40;LOG, ">>/netup/utm5/mytools/change_account_balance.log"&#41;;
my @row;
while&#40; @row = $sth->fetchrow_array&#41;
&#123;
    print LOG "/netup/utm5/bin/utm5_urfaclient -a change_account_balance -account_id ".$row&#91;0&#93;."  balance ".$row&#91;1&#93;." \n";
    system&#40;"/netup/utm5/bin/utm5_urfaclient -a change_account_balance -account_id ".$row&#91;0&#93;." >/dev/null 2>/dev/null\n"&#41;;
&#125;

close&#40;LOG&#41;;
$sth->finish;
$dbh_utm->disconnect&#40;&#41;;
change_account_balance.xml

Код: Выделить всё

<?xml version="1.0"?>
<urfa>
     <call function="rpcf_change_account_balance">
        <parameter name="account_id" />
        <parameter name="balance" value="0" />
        <parameter name="comment" value=""/>
     </call>
</urfa>
Причем такой баланс у абонентов появляется в течении дня, а не только в расчетный период.

В логе вот такое вот непотребство:
  • Aug 08 11:15:54 ?Debug : e016700 DBConnection_mysql: <0x1bcaf60> SQL query: UPDATE downloaded SET qnt='240518168596', discounted='6.90393e-310', downed_as_prepaid='240518168596' WHERE downloaded_id='939' AND tclass_id='54233'
    Aug 08 11:15:54 ?Debug : e016700 DBConnection_mysql: <0x1bcaf60> SQL query: UPDATE accounts SET balance='-6.903931809968679e-310' WHERE id='939'
    Aug 08 11:15:54 ?Debug : e016700 DBConnection_mysql: <0x1bcaf60> SQL query: INSERT INTO discount_transactions_all(account_id,incoming_rest,outgoing_rest,discount,discount_with_tax,service_id,service_type,slink_id,discount_date,charge_type,discount_period_id) VALUES ('939','0','-6.903931809968679e-310','6.903931809968679e-310','6.903931809968679e-310','16','3','1143','1502180154','3','56')
    Aug 08 11:15:54 ?Debug : e016700 DBConnection_mysql: <0x1bcaf60> SQL SELECT query: SELECT id FROM dtagg_cust WHERE account_id = '939'
    Aug 08 11:15:54 ?Debug : e016700 DBConnection_mysql: <0x1bcaf60> SQL query: INSERT INTO discount_transactions_iptraffic_all(id,account_id,discount,discount_with_tax,service_id,slink_id,discount_date,discount_date_hour,discount_date_day,discount_date_month,t_class,base_cost,ipid,bytes,discount_period_id) VALUES ('110660233','939','6.903931809968679e-310','6.903931809968679e-310','16','1143','1502180154','1502179200','1502139600','1501534800','54233','6.903921598463638e-310','0','240518168596','56')
    Aug 08 11:16:24 ?Debug : db11700 DBConnection_mysql: <0x1b97e00> SQL query: UPDATE dhs_sessions_log SET account_id='939', flags='0', slink_id='1143', last_update_date='1502180184', Acct_Status_Type='3', Acct_Input_Packets ='181141', Acct_Input_Octets ='17476091', Acct_Input_Gigawords ='0', Acct_Output_Packets ='426375', Acct_Output_Octets ='536498817', Acct_Output_Gigawords ='0', Acct_Terminate_Cause='0', Acct_Session_Time ='60843' WHERE id='10699526'
    Aug 08 11:22:24 ?Debug : db11700 DBConnection_mysql: <0x1bc4480> SQL query: UPDATE dhs_sessions_log SET account_id='939', flags='0', slink_id='1143', last_update_date='1502180544', Acct_Status_Type='3', Acct_Input_Packets ='181142', Acct_Input_Octets ='17476167', Acct_Input_Gigawords ='0', Acct_Output_Packets ='426412', Acct_Output_Octets ='536501197', Acct_Output_Gigawords ='0', Acct_Terminate_Cause='0', Acct_Session_Time ='61203' WHERE id='10699526'
discount_transactions_all
  • +-----------+------------+-----------------------+-----------------------+-----------------------+-----------------------+------------+--------------+--------------------+----------+---------------+-------------+
    | id | account_id | incoming_rest | outgoing_rest | discount | discount_with_tax | service_id | service_type | discount_period_id | slink_id | discount_date | charge_type |
    +-----------+------------+-----------------------+-----------------------+-----------------------+-----------------------+------------+--------------+--------------------+----------+---------------+-------------+
    | 110378677 | 939 | 0 | 0 | 0 | 0 | 16 | 3 | 55 | 1143 | 1501533537 | 3 |
    | 110380518 | 939 | 0 | -500 | 500 | 500 | 15 | 2 | 55 | 1144 | 1501534799 | 2 |
    | 110380519 | 939 | -500 | -500 | 0 | 0 | 16 | 3 | 55 | 1143 | 1501534799 | 3 |
    | 110431839 | 939 | -500 | -500 | 6.9039318099687e-310 | 6.9039318099687e-310 | 16 | 3 | 56 | 1143 | 1501638347 | 3 |
    | 110513252 | 939 | -500 | -500 | 0 | 0 | 16 | 3 | 56 | 1143 | 1501830656 | 3 |
    | 110624259 | 939 | -500 | -500 | 0 | 0 | 16 | 3 | 56 | 1143 | 1502097018 | 3 |
    | 110634012 | 939 | -500 | 0 | -500 | -500 | 0 | 0 | 0 | 0 | 1502116681 | 16 |
    | 110660233 | 939 | 0 | -6.9039318099687e-310 | 6.9039318099687e-310 | 6.9039318099687e-310 | 16 | 3 | 56 | 1143 | 1502180154 | 3 |
    | 110661524 | 939 | -6.9039318099687e-310 | 0 | -6.9039318099687e-310 | -6.9039318099687e-310 | 0 | 0 | 0 | 0 | 1502183258 | 23 |
    +-----------+------------+-----------------------+-----------------------+-----------------------+-----------------------+------------+--------------+--------------------+----------+---------------+-------------+

big-town
Сообщения: 3
Зарегистрирован: Пт май 05, 2017 01:54

Сообщение big-town »

Похоже отвечать буду сам себе. В общем ситуация следующая, самопроизвольно начались списание по трафику. Хотя таких тарифов вообще нет.

После закрытия периода с 31-го на 1-ое, в таблицу dtagg_iptraffic попал какой то странный мусор с суммами типа 6.9039318099687e-310 в полях base_cost и discounted и т.д. и с несуществующими классами трафика tclass. Далее он попадает в таблицу downloaded и соответственно происходит списание. которое отражается в таблицах транзакций discount_transactions_all и discount_transactions_iptraffic_all.

Остановил ядро, удалил записи с несуществующими классами из downloaded и dtagg_iptraffic и запустил ядро с проверкой таблиц. Пока вроде все нормально. Посмотрим что будет при следующем закрытии периода. Может уже к этому времени ответят оффициалы из netup'а.

Ответить