LINUX.ORG.RU
 
vitroot

[billing] Феерический косяк


0

0

Вчера узнал, что порядка 1-2 недели назад у местного крупного прова СибирьТелекома бОльшую часть абонентов их биллинг посчитал дважды и дважды списал у каждого со счета деньги. Было много ругани, скандалов, трупов, катаклизмов, бла-бла-бла.
Вчера с самого утра у меня в конторе UTM5 проделала то же (тогда про СибирьТелеком я еще был не в курсе). Написал разрабам - те, как партизаны.
В срочном порядке приходится переделывать просто кучу работы, ибо бОльшая часть клиентов просто залочеными (у некоторых в месяц нехреновые суммы набегают).
Сейчас буквально узнаю, что проблема у тучи контор. Связана с тем, что биллинги неправильно посчитали октябрьский переход с летнего времени на нормальное и оп! - по 2 раза как-то там всем насчитали расход.

На оф.форуме разрабы до сих пор молчат.
Это что, болезнь такая?


[#]  
k0l0b0k

Re: [billing] Феерический косяк

>Это что, болезнь такая?

нет, это сраная проприетарщина. Вам надо срочно показаться Столлману :)

** ()
[#]  
wyldrodney

Re: [billing] Феерический косяк

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

А в прошлом году такого не было?

# ()
[#]  
Mystra_x64

Re: [billing] Феерический косяк

Да, криворукость.

***** ()
[#]  
nikolayd

Re: [billing] Феерический косяк

Ого! Мы перешли с летнего времени на обычное?

* ()
[#] Ответ на: Re: [billing] Феерический косяк от nikolayd 02.10.2009 9:38:41  
lexxus-lex

Re: [billing] Феерический косяк

>Ого! Мы перешли с летнего времени на обычное?

Кстати... когда часы то переводят?

* ()
[#] Ответ на: Re: [billing] Феерический косяк от k0l0b0k 02.10.2009 9:35:21  

Re: [billing] Феерический косяк

> нет, это сраная проприетарщина

Ага, в открытых программах багов не бывает.

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 9:53:26  
k0l0b0k

Re: [billing] Феерический косяк

>Ага, в открытых программах багов не бывает.

баги бывают везде. но не раз сталкивался с тем что авторы проприетарного софта намного болезненнее реагируют на баги:

>На оф.форуме разрабы до сих пор молчат.

** ()
[#]  

Re: [billing] Феерический косяк

> Это что, болезнь такая?

Кстати о птичках. Я вчера реализовывал пересчет времени в человеческом формате в Unix time. Нарвался на очень странное поведение mktime(), похожее на баг. Для некоторых дат она накидывает лишний час. glibc 2.10.1. У вас биллинг на Линуксе?

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от k0l0b0k 02.10.2009 9:55:16  

Re: [billing] Феерический косяк

> баги бывают везде. но не раз сталкивался с тем что авторы проприетарного софта намного болезненнее реагируют на баги

Почему-то вспомнился Ульрих Дреппер. :)

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от wyldrodney 02.10.2009 9:35:25  
vitroot

Re: [billing] Феерический косяк

В том-то и дело, что в прошлом году и пазапрошлом такого, само собой, не было. Иначе я, хотя бы, мог бы угадать проблему

** ()
[#]  
RTP

Re: [billing] Феерический косяк

БУ-го-го! Ну эт говорит о том, что если собрался провайдерить, то не лепи лисапет, а покупай решение целиком. Тогда и предъявы будет кому выставлять.

Да и ваще - помагабайтная тарификация - прошлый век, УГ, ископаемое Г мамонта и проч. проч. проч.

ужоснах.

# ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 9:58:42  
vitroot

Re: [billing] Феерический косяк

>>Кстати о птичках. Я вчера реализовывал пересчет времени в человеческом формате в Unix time. Нарвался на очень странное поведение mktime(), похожее на баг. Для некоторых дат она накидывает лишний час. glibc 2.10.1. У вас биллинг на Линуксе?

именно. Только там Debian и я не очень помню, как в нем посмотреть версию установленной glibc

** ()
[#]  
Turbid

Re: [billing] Феерический косяк

Биллинг abills такой же фигней страдает

** ()
[#] Ответ на: Re: [billing] Феерический косяк от RTP 02.10.2009 10:09:54  
vitroot

Re: [billing] Феерический косяк

>>Да и ваще - помагабайтная тарификация - прошлый век, УГ, ископаемое Г мамонта и проч. проч. проч.

не говори чушь. Об этом спорили долго и можно еще дольше спорить. Клиентов полно, которые сами выбирают тарификация. Да и причем здесь вообще безлим или небезлим?? Абонентская плата за безлим берется. Она тоже посчиталась 2 раза, так что "лучше молчать и слыть за идиота, чем заговорить и развеять все сомнения" (с)

>>Ну эт говорит о том, что если собрался провайдерить, то не лепи лисапет, а покупай решение целиком. Тогда и предъявы будет кому выставлять.


Это ты к чему? И так есть, кому выставлять. Биллинг сертифицированный.

** ()
[#] Ответ на: Re: [billing] Феерический косяк от vitroot 02.10.2009 10:13:47  
RTP

Re: [billing] Феерический косяк

>Это ты к чему? И так есть, кому выставлять. Биллинг сертифицированный. vitroot ** (*) (02.10.2009 10:13:47)

Уже посмотрел на сертификаты. Значит надо трясти разрабов звонками в службу поддержки. А то получается косяк наисквернейший, но клиенты ищут решение на ЛОРе... :-)

# ()
[#] Ответ на: Re: [billing] Феерический косяк от RTP 02.10.2009 10:18:29  
wyldrodney

Re: [billing] Феерический косяк

Прости, а разве нет опенсорсных биллингов? Я как минимум трижды видел новости о новых релизах.

# ()
[#] Ответ на: Re: [billing] Феерический косяк от RTP 02.10.2009 10:18:29  
vitroot

Re: [billing] Феерический косяк

Какие-то странные ты вывод сегодня делаешь. Решения на ЛОРе никто не ищет. Я уж точно. Я это запостил не для этого, а для тех, у кого подобная проблема и они не могут до сих пор понять, с какого гейтса у них такое произошло

** ()
[#] Ответ на: Re: [billing] Феерический косяк от wyldrodney 02.10.2009 10:20:19  
Turbid

Re: [billing] Феерический косяк

>Прости, а разве нет опенсорсных биллингов?

Более или менее живой один - abills, но и он со множеством недостатков.

** ()
[#] Ответ на: Re: [billing] Феерический косяк от vitroot 02.10.2009 10:11:21  

Re: [billing] Феерический косяк

> Только там Debian и я не очень помню, как в нем посмотреть версию установленной glibc

apt-cache show libc6

Вот пример демонстрирующий проблему с mktime(). Он выводит 3 даты, по идее все они должны быть одинаковыми. Однако 1 апреля 1981 года случается что-то странное. Более поздние даты не смотрел. У кого есть возможность, запустите этот пример и напишите результат с указанием версии glibc.

#define _XOPEN_SOURCE
#include <time.h>
#include <stdio.h>
#include <string.h>

int mktime_test(const char* str)
{
	struct tm local_tm, local_tm2;
	time_t local_time;
	char buffer[128];

	puts(str);
	if (strptime(str, "%Y-%m-%d %H:%M:%S", &local_tm) == NULL)
	{
		fprintf(stderr, "failed to convert `%s' to struct tm\n", str);
		return 1;
	}
	snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d",
			local_tm.tm_year + 1900, local_tm.tm_mon + 1, local_tm.tm_mday,
			local_tm.tm_hour, local_tm.tm_min, local_tm.tm_sec);
	puts(buffer);
	if (strcmp(str, buffer) != 0)
	{
		fprintf(stderr, "strptime() failed\n");
		return 1;
	}
	local_time = mktime(&local_tm);
	localtime_r(&local_time, &local_tm2);
	snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d",
			local_tm2.tm_year + 1900, local_tm2.tm_mon + 1, local_tm2.tm_mday,
			local_tm2.tm_hour, local_tm2.tm_min, local_tm2.tm_sec);
	puts(buffer);
	if (strcmp(str, buffer) != 0)
	{
		fprintf(stderr, "mktime() or localtime_r() failed\n");
		return 1;
	}
	return 0;
}

int main()
{
	return mktime_test("1981-04-01 00:00:00");
}
**** ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 10:27:12  
wyldrodney

Re: [billing] Феерический косяк

wyldrodney@desktop /tmp $ gcc -o 1 1.c
1.c: В функции ‘mktime_test’:
1.c:18: предупреждение: несовместимая неявная декларация внутренней функции ‘snprintf’
wyldrodney@desktop /tmp $ ./1
1981-04-01 00:00:00
1981-04-01 00:00:00
1981-03-31 23:00:00
mktime() or localtime_r() failed
wyldrodney@desktop /tmp $

gcc версия 4.3.3 (Gentoo 4.3.3-r2 . . . )

# ()
[#] Ответ на: Re: [billing] Феерический косяк от wyldrodney 02.10.2009 10:29:57  

Re: [billing] Феерический косяк

Забавно. У меня наоборот -- на час вперед убегает:

1981-04-01 00:00:00
1981-04-01 00:00:00
1981-04-01 01:00:00
mktime() or localtime_r() failed

Кто код смотрел, ваше мнение?

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 10:27:12  

Re: [billing] Феерический косяк

[code]
Version: 2.9-27
[/code]

[code]
1981-04-01 00:00:00
1981-04-01 00:00:00
1981-04-01 01:00:00
[/code]

* ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 10:34:09  
wyldrodney

Re: [billing] Феерический косяк

Стоит списаться с разработчиками, возможно, это и баг. Быстрее напишешь - быстрее решишь проблему)

# ()
[#] Ответ на: Re: [billing] Феерический косяк от wyldrodney 02.10.2009 10:38:58  

Re: [billing] Феерический косяк

> Стоит списаться с разработчиками, возможно, это и баг. Быстрее напишешь - быстрее решишь проблему)

Да я вот сижу и думаю, то ли я дурак неправильно функцию использую, то ли действительно баг. :( Потому и хотелось бы чтобы кто-нибудь высказал свое мнение про код.

А вот так еще интереснее:

#define _XOPEN_SOURCE
#include <time.h>
#define __USE_UNIX98
#include <stdio.h>
#include <string.h>

int mktime_test(const char* str)
{
	struct tm local_tm, local_tm2;
	time_t local_time;
	char buffer[128];

	memset(buffer, 0, sizeof(buffer));
	puts(str);
	if (strptime(str, "%Y-%m-%d %H:%M:%S", &local_tm) == NULL)
	{
		fprintf(stderr, "failed to convert `%s' to struct tm\n", str);
		return 1;
	}
	snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d",
			local_tm.tm_year + 1900, local_tm.tm_mon + 1, local_tm.tm_mday,
			local_tm.tm_hour, local_tm.tm_min, local_tm.tm_sec);
	puts(buffer);
	if (strcmp(str, buffer) != 0)
	{
		fprintf(stderr, "strptime() failed\n");
		return 1;
	}
	local_time = mktime(&local_tm);
	localtime_r(&local_time, &local_tm2);
	snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d",
			local_tm2.tm_year + 1900, local_tm2.tm_mon + 1, local_tm2.tm_mday,
			local_tm2.tm_hour, local_tm2.tm_min, local_tm2.tm_sec);
	puts(buffer);
	if (strcmp(str, buffer) != 0)
	{
		fprintf(stderr, "mktime() or localtime_r() failed\n");
		return 1;
	}
	return 0;
}

int main()
{
	mktime_test("1981-07-01 00:00:00");
	mktime_test("1981-07-01 00:00:00");
	return 0;
}

Первый раз mktime() выдает неправильный результат, а второй раз -- правильный.

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от wyldrodney 02.10.2009 10:20:19  
HighwayStar

Re: [billing] Феерический косяк

>Прости, а разве нет опенсорсных биллингов?

есть, но они не сертифицированы

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 10:27:12  
k0l0b0k

Re: [billing] Феерический косяк

1981-04-01 00:00:00
1981-04-01 00:00:00
1981-04-01 01:00:00
mktime() or localtime_r() failed
k0l0b0k@kwork:/tmp$ apt-cache show libc6 | grep -i ver
Version: 2.9-26

** ()
[#] Ответ на: Re: [billing] Феерический косяк от HighwayStar 02.10.2009 11:06:04  
wyldrodney

Re: [billing] Феерический косяк

>они не сертифицированы

Биллинги... Может провести акцию по сбору денег на прохождение этой сертификации?

# ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 10:27:12  
WerNA

Re: [billing] Феерический косяк

у меня glibc-2.3.2-27.9.7 =)

выдало вот такое:

1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00

***** ()
[#] Ответ на: Re: [billing] Феерический косяк от WerNA 02.10.2009 11:14:46  

Re: [billing] Феерический косяк

Опа, а на glibc 2.3.2 (Red Hat 9?) всё нормально. Вот он, истинный stable. :)

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от vitroot 02.10.2009 11:10:48  
wyldrodney

Re: [billing] Феерический косяк

>на сертификацию не только деньги нужны

Фирма-производитель? Ваш, уже зарегистрированный, ЛУГ этим не может заняться?..

# ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 10:42:23  

Re: [billing] Феерический косяк

fenrirko ~ # ./time
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00

Latest version installed: 2.9_p20081201-r2


[iSage@exia ~]$ ./time
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00

Name : glibc
Arch : x86_64
Version : 2.10.1


** ()
[#] Ответ на: Re: [billing] Феерический косяк от wyldrodney 02.10.2009 11:21:30  
HighwayStar

Re: [billing] Феерический косяк

>Фирма-производитель? Ваш, уже зарегистрированный, ЛУГ этим не может заняться?..

сертифицировать можно только одну конкретную версию, стоит наложить на нее какой-нибудь один патч и все, она уже не сертифицирована

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от wyldrodney 02.10.2009 11:21:30  
vitroot

Re: [billing] Феерический косяк

пока нет. И без этого проектов и планов слишком много

** ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 10:42:23  
mironov_ivan

Re: [billing] Феерический косяк

>>-----Цитата---->>

Да я вот сижу и думаю, то ли я дурак неправильно функцию использую, то ли действительно баг. :( Потому и хотелось бы чтобы кто-нибудь высказал свое мнение про код.

<<-----Цитата----<<

Что-то странное...

$ ./test 
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 01:00:00
mktime() or localtime_r() failed
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00

$ cmp /etc/localtime /usr/share/zoneinfo/Asia/Yekaterinburg && echo Совпадает
Совпадает

$ sudo mv /etc/localtime /etc/localtime.b

$ ./test 
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00
1981-07-01 00:00:00

Fedora 11 amd64 со всеми свежими обновлениями, glibc 2.10.1, gcc 4.4.1.

***** ()
[#] Ответ на: Re: [billing] Феерический косяк от iSage 02.10.2009 11:42:01  

Re: [billing] Феерический косяк

> первый - гента х86_64 > второй - федора11 х86_64

Любопытно. У меня тоже Федора 11 х86_64, но пример работает неправильно. С какими опциями вы его компилировали? Какая версия ядра и компилятора?

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 11:48:55  
mironov_ivan

Re: [billing] Феерический косяк

Любопытно. У меня тоже Федора 11 х86_64, но пример работает неправильно. С какими опциями вы его компилировали? Какая версия ядра и компилятора? 

Похоже поведение зависит от настроек часового пояса (см. выше).

***** ()
[#] Ответ на: Re: [billing] Феерический косяк от mironov_ivan 02.10.2009 11:48:36  

Re: [billing] Феерический косяк

Да, после удаления /etc/localtime у меня тоже пример заработал. видимо проблема в конвертации между временными поясами. Осталось понять, почему она есть 1 июля 1981 года и отсутствует, к примеру, для 1 июля 1980 года.

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от mironov_ivan 02.10.2009 11:50:39  

Re: [billing] Феерический косяк

> Похоже поведение зависит от настроек часового пояса (см. выше).

У вас какой часовой пояс? У меня Москва и летнее время:

$ date '+%Z %:z'
MSD +04:00

**** ()
[#] Ответ на: Re: [billing] Феерический косяк от Relan 02.10.2009 11:57:10  
mironov_ivan

Re: [billing] Феерический косяк

>>-----Цитата---->>

У вас какой часовой пояс? У меня Москва и летнее время:

<<-----Цитата----<<

Я выше написал: Asia/Yekaterinburg.

$ date '+%Z %:z'
YEKST +06:00

***** ()