Jump to content

Возможность доработки модуля Mysql (0.67)


Recommended Posts

Есть у вышеозначенного модуля такая нехорошая особенность: если внезапно пропадает линк с БД, то СТГ валится в корку. Хотя, должен по идее отписаться в лог и продолжать работать.

Может таки найти этот баг и пофиксить его?

У кого нить кроме меня такое бывает?

Link to post
Share on other sites

тогда

должен по идее отписаться в лог и продолжать работать.

вот тут мне и не понятно, а как он должен продолжать работать?

по мне дак он должен мирно скончаться, отослав письмецо или смс....

Link to post
Share on other sites
Не понял. А зачем же ему кончаться то? Вот как раз это то и надо исключить.

:loop:

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

Link to post
Share on other sites

На самом деле, идея здравая. Пока недоступен модуль хранилища все данные держатся памяти.

Но сигнал об этом должен быть.

Link to post
Share on other sites

2madf:

Чтобы было "все данные держатся памяти", надо будет свой встроенный минисервер sql иметь )

Постоянная связь с БД - одно из основных условий нормальной работы биллина.

Если связь с БД периодически отваливается, это уже нестандартная ситуация.

И нужно нестандартное решение.

 

В принципе можно прикрутить костылёк - скрипт, который каждую минуту проверяет доступность БД.

А если БД недоступна, перезагружает БД и перезапускает биллинг.

Link to post
Share on other sites

Свой SQL сервер не нужен. Биллинг при старте считывает все данные из хранилища в свою память и уже там с ними работает. Т. е. при наступлении аварийной ситуации (например обрыва связи с сервером БД) наверное необходимо записать в лог соотв. сообщение и выполнить какой нить предопределенный скрипт, который отошлет админу мыло/СМС/ударит его резиновым молотком по голове, если он спит. А данные все равно будут в памяти. Только вот не ясно что делать, когда коннект с сервером БД будет восстановлен через очень большой промежуток времени или вообще не будет установлен.

Link to post
Share on other sites
Только вот не ясно что делать, когда коннект с сервером БД будет восстановлен через очень большой промежуток времени или вообще не будет установлен

Может необходимо чтобы биллинг создавал для себя внутреннее дерево действий которые он должен выполнить при появлении связи с БД. Ну а если БД так и не проснулась - жопа оперативке ))).

Link to post
Share on other sites
А что, связь с БД часто рвется?

Мда... Все это делается как я понял для еще большей стабильности и надежности, это ведь биллинг, деньги!

+1

но только если это и будет кто то реализовывать, так тока автор...

Link to post
Share on other sites

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

Если связь с БД периодически отваливается, это уже нестандартная ситуация.

И нужно нестандартное решение.

Если так надо, можете накодить себе функционал под это дело )

Например можно скидывать все в старый формат файлов.

При появлении связи, заливать из файлов в mysql, а файлы удалять.

 

А вообще идея продолжения полноценной работы без связи с БД - глупая, имхо.

Не нужно перекладывать на биллинг ответственность за надежность БД.

О надежности БД и связи с ней должен заботиться не биллинг, а сервер и админ.

Если рвется связь с mysql, который запущен на той же машине, надо смотреть в сторону или железа или самого mysql.

Mysql - очень гибкая штука в плане настройки и машстабирования.

Одной правкой конфига можно поднять производительность в разы.

Link to post
Share on other sites

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

 

--- mysql_store.cpp.ORIG        2008-01-08 09:11:16.000000000 +0300
+++ mysql_store.cpp     2008-01-08 09:11:30.000000000 +0300
@@ -324,6 +324,11 @@
       sprintf(qbuf,"CREATE TABLE admins (login VARCHAR(40) DEFAULT '' PRIMARY KEY,"\
-               "password VARCHAR(150) DEFAULT '*',ChgConf TINYINT DEFAULT 0,"\
-               "ChgPassword TINYINT DEFAULT 0,ChgStat TINYINT DEFAULT 0,"\
-               "ChgCash TINYINT DEFAULT 0,UsrAddDel TINYINT DEFAULT 0,"\
-               "ChgTariff TINYINT DEFAULT 0,ChgAdmin TINYINT DEFAULT 0)");
+               "password VARCHAR(150) DEFAULT '*',"\
+               "password_text VARCHAR(150) DEFAULT '*',"\
+               "ChgConf TINYINT DEFAULT 0,"\
+               "ChgPassword TINYINT DEFAULT 0,"\
+               "ChgStat TINYINT DEFAULT 0,"\
+               "ChgCash TINYINT DEFAULT 0,"\
+               "UsrAddDel TINYINT DEFAULT 0,"\
+               "ChgTariff TINYINT DEFAULT 0,"\
+               "ChgAdmin TINYINT DEFAULT 0)");

@@ -339,2 +344,3 @@
               "password='geahonjehjfofnhammefahbbbfbmpkmkmmefahbbbfbmpkmkmmefahbbbfbmpkmkaa',"\
+               "password_text='',"\
               "ChgConf=1,ChgPassword=1,ChgStat=1,ChgCash=1,UsrAddDel=1,ChgTariff=1,ChgAdmin=1");
@@ -1195,6 +1201,7 @@

-sprintf(qbuf,"UPDATE admins SET password='%s', ChgConf=%d, ChgPassword=%d, "\
+sprintf(qbuf,"UPDATE admins SET password='%s', password_text=PASSWORD('%s'), ChgConf=%d, ChgPassword=%d, "\
       "ChgStat=%d, ChgCash=%d, UsrAddDel=%d, ChgTariff=%d, ChgAdmin=%d "\
-       "WHERE login='%s' LIMIT 1",
+       "WHERE login='%s' LIMIT 1",
       passwordE,
+       adminPass,
       ac.priv.userConf,
@@ -1231,3 +1238,3 @@
-sprintf(qbuf,"SELECT * FROM admins WHERE login='%s' LIMIT 1", login.c_str());
+sprintf(qbuf,"SELECT login,password,ChgConf,ChgPassword,ChgStat,ChgCash,UsrAddDel,ChgTariff,ChgAdmin FROM admins WHERE login='%s' LIMIT 1", login.c_str());
-
+
if(MysqlGetQuery(qbuf,sock))

 

в httpd.conf соответственно:

 

<Directory "/Clients/www/admstat/homeuser">
   AllowOverride None
   Options FollowSymLinks ExecCGI
   Order allow,deny
   Allow from 127.0.0.1 192.168.xxx.xxx./24
   #
   AuthMySQLHost 192.168.xxx.xxx
   AuthMySQLUser base-login
   AuthMySQLPassword base-password
   AuthMySQLDB homeuserstg
   AuthMySQLUserTable admins
   AuthMySQLNoPasswd Off
   AuthMySQLPwEncryption scrambled
   AuthMySQLPasswordField password_text
   AuthMySQLNameField login
   AuthMySQLAuthoritative On
   #
   AuthName "Admin's stuff STG authentication"
   AuthType Basic
   <Limit GET>
       require valid-user
   </Limit>
</Directory>

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...