Перейти до

Рекомендованные сообщения

Опубликовано:

По материалам темы http://local.com.ua/forum/index.php?showtopic=9355.

Исправлены указанные ошибки и выполнены некоторые пожелания (например передача в скрипт изменения пользователя пароля).

 

Брать здесь: http://www.rapidshare.ru/408362

 

 

Просьба отписываться в теме только по обнаруженным ошибкам.

Опубліковано:

Чего то не все ошибки подправлены, при беглом просмотре осталось:

 

- Неправильны формат поля freemb в базе и при сохранении, не пишется дробная часть да и в формате БД не предусмотрена она.

 

- Не решена проблема с буквой Z если она первая в логине, имени тарифа.

 

Глубже пока не тестировал, неприятно осознавать что к подробным багрепортом, иногда и с патчем для исправления, относятся не очень внимательно.

Опубліковано:

Косметический баг в модуле FB, был на прошлой версии, но не успел зарепортить.

 

При запуске биллинга все метки времени в базе (время последнего логина и последних денег) уползает вперед на 2-4 часа (точно не замечал, но все время постоянный фактор), думаю что тупо связано с timezone сервера.

Опубліковано:

To egor2fsys

Исправлен ли в данной версии баг:

Если клиенту в абонплате забить 60 грн предоплаченного трафика, то каждый день в 00.00 баланс устанавливается опять в 60 грн.

То есть, если я насидел за день 15 грн, в балансе осталось 45, а в 00.00 баланс опять восстанавливается на 60 грн.

Вопрос довольно критичен.

Опубліковано:
Чего то не все ошибки подправлены, при беглом просмотре осталось:

 

- Неправильны формат поля freemb в базе и при сохранении, не пишется дробная часть да и в формате БД не предусмотрена она.

 

- Не решена проблема с буквой Z если она первая в логине, имени тарифа.

 

Глубже пока не тестировал, неприятно осознавать что к подробным багрепортом, иногда и с патчем для исправления, относятся не очень внимательно.

Oбраз sql базы пока не исправляли.

Опубліковано:

Ошибка модуля FB (или недоработка)

 

Ошибка связана с полями userdata

При сохранении в базу у полей не проставляет поле num, то есть все идут с 0 номером, принципиально это ничего не меняет так как сортировка все равно идет правильно и загружаются они в той же последовательности, НО

 

при некорректной остановке старгейзера (которая иногда неизбежно случается) в базе могут накапливатся неудаленные или лишние поля userdata, в результате они:

 

1. Путаются, баг визуально заметен, иногда поля у юзеров уползают на 5-6 userdata

2. Накапливаются старые поля и складируются в базе, не заметно, но например у меня на 300 пользователей уже 5000 userdata что в 1,5 раза больше.

 

Поскольку судя по коду это просто недоработка которую не успели доделать (расстановка num полей и сохранение каждого поля в свой номер), то прошу обратить внимание на серьезность данной проблемы.

Опубліковано:

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

 

Перенес Insert запросы в UserAdd

И заменил Insert на Update в SaveConf и добавил внесение в базу правильного num.

 

--- firebird_store_users.cpp    2007-09-14 15:06:02.000000000 +0400
+++ firebird_store_users.cpp.new        2007-09-23 00:20:35.000000000 +0400
@@ -166,6 +167,18 @@
            return -1;
            }
        }
+
+    for (i = 0; i < 10; i++)
+    {
+        strprintf(&query, "insert into tb_users_data (fk_user, data, num) values (%d, '', '%u')", uid, i);
+        if (db.Query(query))
+        {
+            strError = "Error making query: \"" + query + "\"";
+            db.Rollback();
+            return -1;
+        }
+    }
+
    db.Commit();
    }

@@ -578,23 +593,17 @@
            return -1;
            }
        }
-    strprintf(&query, "delete from tb_users_data where fk_user = %d", uid);
-    if (db.Query(query))
-        {
-        strError = "Error makeing query: \"" + query + "\"";
-        db.Rollback();
-        return -1;
-        }
+    i = 0;
    for (it = conf.userdata.begin(); it != conf.userdata.end(); ++it)
        {
-        strprintf(&query, "insert into tb_users_data (fk_user, data, num) values (%d, '%s', 0)", uid, it->c_str());
+        strprintf(&query, "update tb_users_data set data = '%s' where fk_user=%d and num=%u", it->c_str(), uid, i++);
        if (db.Query(query))
            {
            strError = "Error making query: \"" + query + "\"";
            db.Rollback();
            return -1;
            }
-        }
+       }
    strprintf(&query,
              "delete from tb_allowed_ip where fk_user = %d",
              uid);

Опубліковано:

Баг пофикшен. Решение с апдейтами не проходит в виду того, что количество полей user_data не регламентировано (в вашем патче оно принято равным 10).

Опубліковано:

На данный момент число полей все равно получается всегда 10 ввиду конфигуратора, а если реализуется концепция любого числа полей то тем более надо искать какое то новое решение, например с триггерами FB.

Опубліковано:

Новая ошибка в модуле FB

Нет экранирования переменных, при попытка сохранения поля note вываливается ошибка если разместить там '

 

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

Опубліковано:

По поводу последнего бага: сборка от 26.06.2007 или от 20.09.2007?

Эта бага уже была исправлена. Проверил - все нормально.

По поводу полей user_data: в идеале неплохо было бы использовать конструкцию UPDATE OR INSERT, но она поддерживается только самыми последними версиями Firebird (начиная с 2.1). А делать каждый раз проверку на наличие поля - достаточно накладно. Мне кажется, лучше сделать 1 delete и 10 insert чем 10 select и 10 insert/update. Можно, конечно, заранее сделать выборку всех полей для юзера и вынести логику из базы в модуль, но это как-то не искренне.

А то что id растут - так это ничего. Вон в детальной статистике они еще больше растут.

Опубліковано:

По поводу экранирования. Перепроверил код, нашел его отсутствие в некоторых местах и в новой версии. Фикшу.

Опубліковано:

господа

 

у меня второй месяц траффик не обнуляется в начале месяца

dayresettarif=0

 

ладно, это можно пофиксить в ручную, но при выполнении скрипта с КК который обнуляет все виды траффика - оно загибается...

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

 

поставил в скрипте слип на 2секунды - вроде едет

 

 

от чего зависит скорость выполнения запросов у КК???

и что за лажа с обнулением?

Опубліковано:
у меня второй месяц траффик не обнуляется в начале месяца

dayresettarif=0

1. Параметр называется DayResetTraff (а не Tariff)

2. 0 - не начало месяца, а последний его день.

3. Версия stg не указана а экстрасенсы в пожизненном отпуске :)

 

Еще было бы неплохо узнать, как оно загибается...

Опубліковано:

1. опечатка

2. вчера был послдений - на утро все данные, раньше стг2 - все обнулял

 

2.4, предпоследня сборка, сентябрь

 

даешь ему выполнить более полусотни запрос к КК, конфигуратор виснет, виндячим подключится нельзя, спасает рестарт стг

 

делаю группы по 4, через 2х секундный перерыв - работает

Опубліковано:

Конфигуратор в стг, как я понимаю, работает довольно хитро и криво, то есть одновременно отдача данных нескольким конфигураторам невозможна, но соединения он принимает всегда и просто тупо подвисает второй подключившийся до момента окончания отдачи данных первому.

 

У меня часто случается такой конфликт у параллельно работающих кассиров. Надо просто переписать всю работу с конфигураторами на полностью параллельную обработку.

Опубліковано:

при удалении пользователя - падает, ничего не оставляя в логах, конфигурато версии - 1.88.9 (вроде ж последняя?)

 

КК (тот что в комплекте) не отправляет сообщение пользователю - хотя и выводит "ОК"

 

и самое не приятное - параметры $ip $login $cash $id - передаются только OnConnect + OnDisconnect. раньше передавались всем скриптам ( в связи с этим возникло несколько проблемок) тобишь OnUserAdd и OnConnect в пользовательской дирректории...

 

не уверен что это баги и что именно этой версии, но все же ранее такого не наблюдалось.

 

ах да, после перехода со старой версии (2.016 ??? точно и не припомню ((() содуль статистики теперь не может присоединиться к серверу...

 

если кто может что подсказать - будьте добры!

Опубліковано:
при удалении пользователя - падает, ничего не оставляя в логах, конфигурато версии - 1.88.9 (вроде ж последняя?)

 

КК (тот что в комплекте) не отправляет сообщение пользователю - хотя и выводит "ОК"

 

и самое не приятное - параметры $ip $login $cash $id - передаются только OnConnect + OnDisconnect. раньше передавались всем скриптам ( в связи с этим возникло несколько проблемок) тобишь OnUserAdd и OnConnect в пользовательской дирректории...

 

не уверен что это баги и что именно этой версии, но все же ранее такого не наблюдалось.

 

ах да, после перехода со старой версии (2.016 ??? точно и не припомню ((() содуль статистики теперь не может присоединиться к серверу...

 

если кто может что подсказать - будьте добры!

Версии СТГ, сервера, ГСС где ? Дядя Вася, который бы за вас это все написал, в отпуске.

Опубліковано:

эээ.... ну вроде в этом топике обсуждается определенная сборка СТГ ? если точнее то 2.403b (stg-2.4-2007.09.20-16.35.00)

...

 

ошибок при сборке замечено небыло, но если интересно - gcc (GCC) 4.1.0 2006030.

 

система - линукс, федора 4, ядро 2.6.15.5 сборное.

Опубліковано:

Попробуйте собрать с дебагом (раскоментировав в main.cpp #define NO_DAEMON 1), и после того как демон упадет при удалении пользователя, скинуть последние 20 строк лога сюда.

Опубліковано:

по поводу КК - в логах - "не могу подключиться к серверу 127.0.0.1" (СТГ на этой же машине), сам КК говорит ОК - но действий никаких не происходит.

 

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

 

так что вывод не покажу

 

g++ -c admin.cpp -g3 -Wall -I ../../include -DLINUX
g++ -c admins.cpp -g3 -Wall -I ../../include -DLINUX
g++ -c main.cpp -g3 -Wall -I ../../include -DLINUX
main.cpp:61: error: ‘define’ does not name a type
main.cpp: In function ‘void CatchHUP(int)’:
main.cpp:231: error: ‘needRulesReloading’ was not declared in this scope
main.cpp: In function ‘int main(int, char**)’:
main.cpp:670: error: ‘needRulesReloading’ was not declared in this scope

 

прочем если просто запустить СТГ он выводи много информации, во время этого падения - ничегошеньки не выдает...

 

       rsconf.cpp > 14:01:11 > Connection accepted from 10.4.0.11
       rsconf.cpp > 14:01:11 > RecvHdr - ok buf = SG04 sizeof(STG_HEADER) = 4
  configproto.cpp > 14:01:11 > ParseXMLStart
  configproto.cpp > 14:01:11 > Start
       parser.cpp > 14:01:11 > PARSER_GET_SERVER_INFO::ParseStart
  configproto.cpp > 14:01:11 > Start
       parser.cpp > 14:01:11 > PARSER_GET_USERS::ParseStart
  configproto.cpp > 14:01:11 > Start
  configproto.cpp > 14:01:11 > Start
       parser.cpp > 14:01:11 > PARSER_CHG_USER::Reset()
       parser.cpp > 14:01:11 > PARSER_CHG_USER::Reset() DEL USR =====================
       parser.cpp > 14:01:11 > PARSER_CHG_USER::ParseStart el = DelUser depth = 1
       parser.cpp > 14:01:11 > PARSER_CHG_USER::Reset()
       parser.cpp > 14:01:11 > PARSER_CHG_USER::Reset() DEL USR =====================
  configproto.cpp > 14:01:11 > Start
       parser.cpp > 14:01:11 > PARSER_ADD_USER::ParseStart el = DelUser depth = 1
  configproto.cpp > 14:01:11 > Start
       parser.cpp > 14:01:11 > PARSER_DEL_USER::ParseStart el = DelUser
 traffcounter.cpp > 14:01:11 > DelUser: buratino

 

но намного больше меня беспокоит то, что не передаются переменные типа $ip $login в скрипты OnUserAdd и пользовательские скрипты.... это критично... может я в чем-то не прав, и в версиях 2,4х этого и не должно происходить?

Опубліковано:
main.cpp:61: error: ‘define’ does not name a type

Удалили лишнего. Должно быть:

#define NO_DAEMON 1

 

По поводу остального - посмотрю

Опубліковано:

упс, тогда выходит что у меня дебаг включен по умолчанию.... то-то он в консоль сколько всего выводит :)

 

тогда вот логи с дебаг опцией - выше...

 

пс (сорри программер с меня никакой)

Опубліковано:
и самое не приятное - параметры $ip $login $cash $id - передаются только OnConnect + OnDisconnect. раньше передавались всем скриптам ( в связи с этим возникло несколько проблемок) тобишь OnUserAdd и OnConnect в пользовательской дирректории...

 

не уверен что это баги и что именно этой версии, но все же ранее такого не наблюдалось.

В скрипт OnChange передаются параметры:

логин, название измененного параметра, старое значение, новое значение

 

В скрипты OnConnect/OnDisconnect передаются параметры:

логин, IP, деньги, идентификатор пользователя, включенные направления

 

В скрипт OnUserAdd/OnUserDel передается только логин. В момент передачи все другие параметры либо еще неизвестны (Add) либо уже неизвестны (Del).

 

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

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

Гость
Эта тема закрыта для публикации сообщений.
×
×
  • Створити нове...