Hash 0 Опубликовано: 2004-05-22 02:49:23 Share Опубликовано: 2004-05-22 02:49:23 С тех пор как я увидел старгазер, мне не хватало в нем одной вещи - более подробной отчетности. Согласитесь, неудобно, когда нельзя посмотреть сколько прошло траффика за день по различным направлениям, сколько заплатили пользователи вчера, или за прошлую неделю. Вернее, были попытки сделать подобные отчеты, но все же не было таких возможностей как сейчас. Думаю все уже видели в STG2 такую интересную возможность как подробная статистика по трафику. Формат ее представления чем-то похож на результат работы цисковой команды show ip accounting. В течение заданного интервала времени, собирается детальная статистика, и пишется в файл. Это уже что-то, но все же не хватает некоторой гибкости и удобства, которую дает БД. Именно поэтому я немного дописал STG2, и теперь у меня подробная статистика пишется в mysql базу, а к ней уже я буду на днях лепить веб-морду. Если кому-нить нужен будет результат моей работы - пишите в приват, я поделюсь =) Дык вот, возникает вопрос, как лучше хранить все в базе? Какую структуру вы предложите? Сейчас у меня есть таблица со следующими полями: datetime, login, ipstr, dir, down, up, cash, это дата+время записи, логин пользователя, IP по которому прошел траф, направление, принято байт, отправлено байт, общая стоимость этого трафика, соответсвенно. Но это не оптимальное решение, а так, то что пришло в сразу в голову. Я сейчас пойду спать, а вы пока предлагайте оптимальную структуру базы =) Ссылка на сообщение Поделиться на других сайтах
teapot 0 Опубліковано: 2004-05-25 19:06:02 Share Опубліковано: 2004-05-25 19:06:02 ну так если не жалко так выложил бы - мне кажется народ бы оценил Ссылка на сообщение Поделиться на других сайтах
BOBAH 0 Опубліковано: 2004-05-25 21:53:02 Share Опубліковано: 2004-05-25 21:53:02 Hash Это здорово что написал такую вещь, а как реализовано. Правил исходники, есть ли возможность выбора куда писать логи - в файл или базу. Поделись созданным. Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-05-26 08:48:16 Автор Share Опубліковано: 2004-05-26 08:48:16 Hash Это здорово что написал такую вещь, а как реализовано? Добавил функцию USER::WriteMysqlStat, написав ее на основе USER::WriteInetStat. Есть ли возможность выбора куда писать логи - в файл или базу. Да, она есть. Можно писать как в базу, так и в файл одновременно. Вот кусок кода из main.cpp, который пишет статистику после отключения пользователя. USER * u; for (int i = 0; i < users->GetUserNum(); i++) { u = users->GetUser(i); if (u ->GetConnected()) { u->Disconnect(LOGEVENT_DISCONNECT); } u->WriteStat(); u->WriteInetStat(); u->WriteMysqlStat(); //Функция добавленая мной } Аналогично, можно добавить запись статистики в базу по таймауту, который определяется в конфиге, так как код там похожий. Как видите, есть выбор какую статистику писать, в файл, базу, или вообще оба варианта, как у меня. Поделись созданным. Ок, я на выходных прикручу форму, через которую можно будет смотреть отчеты, простейшие для начала, и тогда выложу. Заодно, доработаю обработку ошибок, которые могут возникнуть при записи в базу. Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2004-05-26 11:58:43 Share Опубліковано: 2004-05-26 11:58:43 если не сложно скинь всё это добро автору - пусть тоже подумает над этим Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-05-26 12:19:57 Автор Share Опубліковано: 2004-05-26 12:19:57 если не сложно скинь всё это добро автору - пусть тоже подумает над этим Автор уже высказывался когда-то о ненужности, по его мнению, складирования логов в mysql из за большей нагрузки на сервер стг в момент работы с базой. Я сделаю дополнительную опцию в конфиге, чтобы можно было более удобно рулить логгированием, для тех, кому это нужно. Ссылка на сообщение Поделиться на других сайтах
DeadOff 0 Опубліковано: 2004-06-04 13:11:31 Share Опубліковано: 2004-06-04 13:11:31 Ждёмс.... А юзера в это время спрашивают "А где это я просидел 0,00023559546 центов" Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-06-04 15:51:58 Автор Share Опубліковано: 2004-06-04 15:51:58 Ждёмс.... Ой, я забыл совсем =) ЗАвтра с работы выложу. А юзера в это время спрашивают "А где это я просидел 0,00023559546 центов" В смысле? Ссылка на сообщение Поделиться на других сайтах
BOBAH 0 Опубліковано: 2004-06-04 17:16:00 Share Опубліковано: 2004-06-04 17:16:00 DeadOff имел ввиду, что теперь у него будут доказательства ввиде логов в базе по хостам Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-06-05 09:07:06 Автор Share Опубліковано: 2004-06-05 09:07:06 DeadOff имел ввиду, что теперь у него будут доказательства ввиде логов в базе по хостам Дык это и так хранится, только в текстовых файлах, а их парсить несколько неудобно. =) Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-06-05 16:34:25 Автор Share Опубліковано: 2004-06-05 16:34:25 (відредаговано) Кстати, какую статистику вы хотели бы видеть? Нужны ли графики загрузки, как в UTM? Да, и кстати, кто-нить может намалевать более-менее пристойный десигн, если я добавлю поболее функциональности в статистике? Відредаговано 2004-06-05 16:36:00 Hash Ссылка на сообщение Поделиться на других сайтах
Doozer 0 Опубліковано: 2004-06-05 19:43:14 Share Опубліковано: 2004-06-05 19:43:14 Hash С дизигном помогу. Свисти какого плана рисовать. ...только дайте для local.com.ua дорисовать ибо Foster'y обещал уже, надо доделать... Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-06-06 06:16:47 Автор Share Опубліковано: 2004-06-06 06:16:47 Hash С дизигном помогу. Свисти какого плана рисовать. Ок, я пока придумаю, какую функциональность я хочу вложить в него, а потом скажу че рисовать. Думаю нужно что-нить похожее на веб-морду УТМ. Просто и понятно. Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2004-06-06 06:43:56 Share Опубліковано: 2004-06-06 06:43:56 да да да веб морды как раз не хватает.... а ваще спишитешь с автором - я думаю что вы друг другу будете взаимополезны вобще конечно если может автор не откажется и если не откажетесь вы то сразу ваши изменения включать в его инсталяхи потому как когда разрознено все делается это плёхо пойди потом собери все патчи к исходникам Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-06-06 07:22:22 Автор Share Опубліковано: 2004-06-06 07:22:22 а ваще спишитешь с автором - я думаю что вы друг другу будете взаимополезны Да, я тоже об этом думал. Потому как есть идея, к примеру, которая позволит писать плагины к стг, без перекомпиляции сервера. Ссылка на сообщение Поделиться на других сайтах
zulu_gluk 23 Опубліковано: 2004-06-06 13:25:05 Share Опубліковано: 2004-06-06 13:25:05 Да, я тоже об этом думал. Потому как есть идея, к примеру, которая позволит писать плагины к стг, без перекомпиляции сервера. Вот это действительно полезная фича! Так что с автором свяжись по-любому, я думаю он будет только за. Ссылка на сообщение Поделиться на других сайтах
DarkNight 0 Опубліковано: 2004-06-08 23:17:17 Share Опубліковано: 2004-06-08 23:17:17 Hash интересно может вышлешь мне свою работу? меня просто заинтересовало это. И кстати если есть возможно то по асе давай свяжемся у меня куча вопросов есть к тебе. Ссылка на сообщение Поделиться на других сайтах
TruthSeeker 0 Опубліковано: 2004-07-07 12:59:08 Share Опубліковано: 2004-07-07 12:59:08 2Hash: Вышли свой патчик плиз. Или выложи куда нить. Очень надо. Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2004-08-05 10:25:25 Share Опубліковано: 2004-08-05 10:25:25 сделаны патчи для связи мискуля и СТГ патчи для последней версии СТГ от 03.08 за реализацию идеи говорим спасибо Hash за адаптацию патчей для текущей версии спасибо говорим TruthSeeker база для записи туда статистики создается так: CREATE TABLE `traff` ( `datetime` datetime NOT NULL default '0000-00-00 00:00:00', `login` varchar(100) NOT NULL default '', `ipstr` varchar(15) NOT NULL default '', `dir` smallint(1) NOT NULL default '0', `down` int(10) NOT NULL default '0', `up` int(10) NOT NULL default '0', `cash` float(10,4) NOT NULL default '0.0000' ) TYPE=MyISAM; в конф файл необходимо добавить следующие параметры: dbLogin - логин к БД dbPassword - пароль к БД dbName имя БД dbHost ХОСТ useMysql yes или no ignoreErrors yes или no СТГ с данным патчем собирается и под линукс и под фряху ... вот собственно патч: Only in stg2-2004.08.03-03.02.59: admin.o Only in stg2-2004.08.03-03.02.59: admins.o Only in stg2-2004.08.03-03.02.59: bsp.o Binary files stg2-2004.08.03-03.02.59/common.o and stg2-2004.08.03-mysql/common.o differ Binary files stg2-2004.08.03-03.02.59/conffiles.o and stg2-2004.08.03-mysql/conffiles.o differ Only in stg2-2004.08.03-03.02.59: configproto.o Only in stg2-2004.08.03-03.02.59: des.o Only in stg2-2004.08.03-03.02.59: list.o Binary files stg2-2004.08.03-03.02.59/main.o and stg2-2004.08.03-mysql/main.o differ diff -rbp stg2-2004.08.03-03.02.59/make.bsd stg2-2004.08.03-mysql/make.bsd *** stg2-2004.08.03-03.02.59/make.bsd Tue Aug 3 12:09:35 2004 --- stg2-2004.08.03-mysql/make.bsd Thu Aug 5 12:42:57 2004 *************** CC=g++ *** 6,11 **** --- 6,12 ---- flags=-Wall -gstabs+ defines=-DFREEBSD -DTARIFF$(t) + mysql=-I/usr/include/mysql -L/usr/lib/mysql bsd: stargazer *************** sendcl.o admin.o admins.o rsconf.o list. *** 14,20 **** freebsd/cap.o parser.o parser_admin.o parser_tariff.o $(CC) $(flags) -o stargazer main.o tariff.o conffiles.o common.o settings.o user.o users.o recivecl.o \ -pthread /usr/lib/libc_r.so des.o sendcl.o admin.o admins.o rsconf.o list.o configproto.o bsp.o traffcounter.o freebsd/cap.o \ ! /usr/local/lib/libexpat.so parser.o parser_admin.o parser_tariff.o main.o: main.cpp main.h $(CC) -c $(flags) $(defines) -o main.o main.cpp --- 15,21 ---- freebsd/cap.o parser.o parser_admin.o parser_tariff.o $(CC) $(flags) -o stargazer main.o tariff.o conffiles.o common.o settings.o user.o users.o recivecl.o \ -pthread /usr/lib/libc_r.so des.o sendcl.o admin.o admins.o rsconf.o list.o configproto.o bsp.o traffcounter.o freebsd/cap.o \ ! /usr/local/lib/libexpat.so parser.o parser_admin.o parser_tariff.o /usr/lib/mysql/libmysqlclient.so main.o: main.cpp main.h $(CC) -c $(flags) $(defines) -o main.o main.cpp *************** settings.o: settings.cpp settings.h *** 38,44 **** $(CC) -c $(flags) $(defines) -o settings.o settings.cpp user.o: user.cpp user.h ! $(CC) -c $(flags) $(defines) -o user.o user.cpp users.o: users.cpp users.h $(CC) -c $(flags) $(defines) -o users.o users.cpp --- 39,45 ---- $(CC) -c $(flags) $(defines) -o settings.o settings.cpp user.o: user.cpp user.h ! $(CC) -c $(flags) $(defines) $(mysql) -o user.o user.cpp users.o: users.cpp users.h $(CC) -c $(flags) $(defines) -o users.o users.cpp diff -rbp stg2-2004.08.03-03.02.59/make.linux stg2-2004.08.03-mysql/make.linux *** stg2-2004.08.03-03.02.59/make.linux Tue Aug 3 03:02:59 2004 --- stg2-2004.08.03-mysql/make.linux Thu Aug 5 12:09:55 2004 *************** t=2 *** 6,11 **** --- 6,12 ---- flags=-Wall -gstabs+ defines=-Dlinux -DTARIFF$(t) + mysql=-I/usr/include/mysql -L/usr/lib/mysql linux: stargazer *************** linux/cap.cpp parser.o parser_admin.o pa *** 15,21 **** $(CC) $(flags) -o stargazer main.o tariff.o conffiles.o common.o settings.o user.o \ users.o recivecl.o /lib/libpthread.so.0 des.o sendcl.o admin.o admins.o rsconf.o list.o \ configproto.o bsp.o traffcounter.o linux/cap.cpp parser.o parser_admin.o \ ! parser_tariff.o /usr/lib/libexpat.a main.o: main.cpp main.h --- 16,22 ---- $(CC) $(flags) -o stargazer main.o tariff.o conffiles.o common.o settings.o user.o \ users.o recivecl.o /lib/libpthread.so.0 des.o sendcl.o admin.o admins.o rsconf.o list.o \ configproto.o bsp.o traffcounter.o linux/cap.cpp parser.o parser_admin.o \ ! parser_tariff.o /usr/lib/libexpat.a /usr/lib/mysql/libmysqlclient.so main.o: main.cpp main.h *************** settings.o: settings.cpp settings.h *** 40,47 **** $(CC) -c $(flags) $(defines) -o settings.o settings.cpp user.o: user.cpp user.h ! $(CC) -c $(flags) $(defines) -o user.o user.cpp ! users.o: users.cpp users.h $(CC) -c $(flags) $(defines) -o users.o users.cpp --- 41,47 ---- $(CC) -c $(flags) $(defines) -o settings.o settings.cpp user.o: user.cpp user.h ! $(CC) -c $(flags) $(defines) $(mysql) -o user.o user.cpp users.o: users.cpp users.h $(CC) -c $(flags) $(defines) -o users.o users.cpp Only in stg2-2004.08.03-03.02.59: parser.o Only in stg2-2004.08.03-03.02.59: parser_admin.o Only in stg2-2004.08.03-03.02.59: parser_tariff.o Only in stg2-2004.08.03-03.02.59: recivecl.o Only in stg2-2004.08.03-03.02.59: rsconf.o Only in stg2-2004.08.03-03.02.59: sendcl.o diff -rbp stg2-2004.08.03-03.02.59/settings.cpp stg2-2004.08.03-mysql/settings.cpp *** stg2-2004.08.03-03.02.59/settings.cpp Tue Aug 3 03:02:59 2004 --- stg2-2004.08.03-mysql/settings.cpp Thu Aug 5 12:44:54 2004 *************** CONFPARAM params[]={ *** 118,123 **** --- 118,129 ---- {"DirName3", "", 1, 0}, //21 {"SpreadFee", "", 0, 0}, //22 + {"dbLogin", "", 0, 0}, //23 + {"dbPassword", "", 0, 0}, //24 + {"dbName", "", 0, 0}, //25 + {"dbHost", "", 0, 0}, //26 + {"useMysql", "", 0, 0}, //27 + {"ignoreErrors", "", 0, 0} //28 }; *************** if (f) *** 368,373 **** --- 374,427 ---- WriteServLog("пЫЙВЛБ Ч ЖБКМЕ ЛПОЖЙЗХТБГЙЙ! %s уФТПЛБ %d", str, lineNum); exit(1); + case 23: //dbLogin + strncpy(dbLogin, p2, 100); + params[i].read = 1; + break; + case 24: //dbPassword + strncpy(dbPassword, p2, 100); + params[i].read = 1; + break; + case 25: //dbName + strncpy(dbName, p2, 100); + params[i].read = 1; + break; + case 26: //dbHost + strncpy(dbHost, p2, 100); + params[i].read = 1; + break; + case 27: //useMysql + if (0 == strcasecmp(p2, "yes")) + { + params[i].read = 1; + useMysql = 1; + break; + } + if (0 == strcasecmp(p2, "no")) + { + params[i].read = 1; + useMysql = 0; + break; + } + useMysql = 0; + break; + + case 28: //ignoreErrors + if (0 == strcasecmp(p2, "yes")) + { + params[i].read = 1; + ignoreErrors = 1; + break; + } + if (0 == strcasecmp(p2, "no")) + { + params[i].read = 1; + ignoreErrors = 0; + break; + } + ignoreErrors = 1; + break; + default: break; } *************** int SETTINGS::Reload () *** 426,429 **** return ReadSettings(); } //----------------------------------------------------------------------------- - --- 480,482 ---- diff -rbp stg2-2004.08.03-03.02.59/settings.h stg2-2004.08.03-mysql/settings.h *** stg2-2004.08.03-03.02.59/settings.h Tue Aug 3 03:02:59 2004 --- stg2-2004.08.03-mysql/settings.h Thu Aug 5 12:07:29 2004 *************** public: *** 88,93 **** --- 88,99 ---- unsigned userPort; // рПТФ РП ЛПФПТПНХ РТПЙУИПДЙФ РПДЛМАЮЕОЙЕ ЛМЙЕОФБ char iface[MAX_DEV][DEV_NAME_LEN]; //FreeBSD only int devNum; + char dbLogin[100]; //мПЗЙО ДМС РПДЛМАЮЕОЙС Л Mysql + char dbPassword[100]; //Mysql password + char dbName[100]; //йНС mysql ВБЪЩ + char dbHost[100]; //Mysql иПУФ + int useMysql; //пРТЕДЕМСЕФ ОХЦОП МЙ РЙУБФШ ЮФП-МЙВП Ч ВБЪХ ЙМЙ ОЕФ + int ignoreErrors; //пУФБОБЧМЙЧБФШ МЙ УЕТЧЕТ УФЗ, РТЙ ЧПЪОЙЛОПЧЕОЙЙ ПЫЙВЛЙ ЪБРЙУЙ Ч ВБЪХ }; //----------------------------------------------------------------------------- #endif Binary files stg2-2004.08.03-03.02.59/settings.o and stg2-2004.08.03-mysql/settings.o differ Binary files stg2-2004.08.03-03.02.59/tariff.o and stg2-2004.08.03-mysql/tariff.o differ Only in stg2-2004.08.03-03.02.59: traffcounter.o diff -rbp stg2-2004.08.03-03.02.59/user.cpp stg2-2004.08.03-mysql/user.cpp *** stg2-2004.08.03-03.02.59/user.cpp Tue Aug 3 03:02:59 2004 --- stg2-2004.08.03-mysql/user.cpp Thu Aug 5 12:23:32 2004 *************** *** 55,60 **** --- 55,62 ---- #include "msgbuf.h" #include "configproto.h" + #include "mysql.h" + extern SETTINGS * settings; extern USERS * users; extern ADMINS * admins; *************** const PRIV * priv = admin->GetPriv(); *** 653,658 **** --- 655,667 ---- double dc = c - cash; + char sql_query[255]; + MYSQL mysql; + tm * lt; + time_t t; + + + if (log) { if (priv->userStat || priv->userCash) *************** if (log) *** 661,666 **** --- 670,703 ---- admin->GetLogin(), login, cash, c, msg); WriteLog("Admin \'%s\': йЪНЕОЕОЙЕ ДЕОЕЗ. вЩМП %.3f, УФБМП %.3f. %s", admin->GetLogin(), cash, c, msg); + + if (settings->useMysql) + { + mysql_init(&mysql); + if (!mysql_real_connect(&mysql, settings->dbHost, settings->dbLogin, settings->dbPassword, settings->dbName,0,NULL,0)) + { + WriteServLog("оЕЧПЪНПЦОП РПДЛМАЮЙФУС Л ВБЪЕ: пЫЙВЛБ: %s\n", mysql_error(&mysql)); + if (!settings->ignoreErrors) + _exit(1); + } + + t = time(NULL); + lt = localtime(&t); + + snprintf(sql_query, 255, "INSERT INTO logs (datetime, name, ip, what, client, money, status) VALUES (\"%d-%d-%d %d:%d:%d\", + \"%s\", \"%s\", \"%s\", \"%s\", %10.4f, \"%s\"\n)", lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, + lt->tm_sec, admin->GetLogin(), login, msg, login, c, "оЕ ПРМБЮЕОП"); + if (mysql_query(&mysql, sql_query)) + { + WriteServLog("пЫЙВЛБ: %s\n", mysql_error(&mysql)); + if (!settings->ignoreErrors) + _exit(1); + } + + mysql_close(&mysql); + } + + lastCash = dc; lastTimeCash = time(NULL); *************** void USER::AddCash(double c, char * msg, *** 697,702 **** --- 734,745 ---- ADMIN *admin = confProto->GetCurrAdmin(); const PRIV * priv = admin->GetPriv(); + char sql_query[255]; + MYSQL mysql; + tm * lt; + time_t t; + + if (log) { if (priv->userStat || priv->userCash) *************** if (log) *** 705,710 **** --- 748,782 ---- admin->GetLogin(), login, c > 0?"+":"", c, cash, cash + c, msg); WriteLog("Admin \'%s\': йЪНЕОЕОЙЕ ДЕОЕЗ: %s%.3f. вЩМП %.3f, УФБМП %.3f. %s", admin->GetLogin(), c > 0?"+":"", c, cash, cash + c, msg); + + if (settings->useMysql) + { + mysql_init(&mysql); + if (!mysql_real_connect(&mysql, settings->dbHost, settings->dbLogin, settings->dbPassword, settings->dbName,0,NULL,0)) + { + WriteServLog("оЕЧПЪНПЦОП РПДЛМАЮЙФУС Л ВБЪЕ: пЫЙВЛБ: %s\n", mysql_error(&mysql)); + if (!settings->ignoreErrors) + exit(1); + } + + t = time(NULL); + lt = localtime(&t); + + snprintf(sql_query, 255, "INSERT INTO logs (datetime, name, ip, what, client, money, status) VALUES (\"%d-%d-%d %d:%d:%d\", + \"%s\", \"%s\", \"%s\", \"%s\", %10.4f, \"%s\"\n)", lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, + lt->tm_sec, admin->GetLogin(), login, msg, login, c, "оЕ ПРМБЮЕОП"); + if (mysql_query(&mysql, sql_query)) + { + WriteServLog("пЫЙВЛБ: %s\n", mysql_error(&mysql)); + if (settings->ignoreErrors) + exit(1); + } + + mysql_close(&mysql); + } + + + lastCash = c; lastTimeCash = time(NULL); Only in stg2-2004.08.03-03.02.59: user.o Only in stg2-2004.08.03-03.02.59: users.o Ссылка на сообщение Поделиться на других сайтах
Den_LocalNet 1 474 Опубліковано: 2004-08-05 12:02:15 Share Опубліковано: 2004-08-05 12:02:15 я не силён в програмировании. Кто нибудь может поподробнее описать как пачить? Как использовать эту груду кода? Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2004-08-05 12:41:25 Share Опубліковано: 2004-08-05 12:41:25 берешь распаковываешь исх. коды сервера от 03 августа потом делаешь файлик с тем что япривел выше и как нить его называешь, например mysql.patch после этого пишешь в консоли patch -p1 < mysql.patch если все классно то не должно быть слов failed после этого все собираешь как обычно Ссылка на сообщение Поделиться на других сайтах
Гость Guest Опубліковано: 2004-08-05 13:02:45 Share Опубліковано: 2004-08-05 13:02:45 за реализацию идеи говорим спасибо Hash Это не полноценная реализация. Я отошел от идеи хранить все в базе. Это просто попытка показать, что всетаки нетяжело прикрутить stg+mysql. Реально кода, который выполняет саму запись в базу тут строк 5-7. Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-08-05 13:04:14 Автор Share Опубліковано: 2004-08-05 13:04:14 выше был я Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-08-05 13:31:02 Автор Share Опубліковано: 2004-08-05 13:31:02 Да, наверное нужно описать действия патча. В конфиге добавляются несколько параметров. dbLogin - логин к mysql dbPassword - пароль к mysql dbName - имя базы в mysql dbHost - хост, если база на одной машине с стг, то можно установить значение в "localhost" useMysql = значения "yes" или "no". Определяет, включить ли логгинг в базу. ignoreErrors = значения "yes" или "no". Определяет, нужно ли останавливать сервер стг, при возникновении ошибки записи базу. В итоге заполняется таблица, структуру которой описали выше. Таблица должна называтся traff. Но это можно поменять в исходниках. Ссылка на сообщение Поделиться на других сайтах
Hash 0 Опубліковано: 2004-08-07 23:41:55 Автор Share Опубліковано: 2004-08-07 23:41:55 Думаю, не будет лишним скопировать сюда мой ответ из другого топика по теме stg+mysql, дабы все что с этим связано было в одном месте. Как посоветуете реализовать функцию.При срабатываении файла OnChange чтоб сбрасывались данне в MySQL БД ? Для примера написал скрипт на Perl+DBI: структура таблицы: CREATE TABLE `changes` ( `datetime` datetime default NULL, `login` varchar(255) NOT NULL default '', `parametr` varchar(255) NOT NULL default '', `old_value` varchar(255) NOT NULL default '', `new_value` varchar(255) NOT NULL default '' ) TYPE=MyISAM; код OnChange: #!/usr/bin/perl use DBI; $user = "username"; $password = "mypassword"; $database = "database"; $login = $ARGV[0]; $parametr = $ARGV[1]; $old_value = $ARGV[2]; $new_value = $ARGV[3]; $dbh = DBI->connect("DBI:mysql:$database", $user, $password); $sth = $dbh->prepare("INSERT INTO changes (datetime, login, parametr, old_value, new_value) VALUES ( NOW(), \"$login\", \"$parametr\", \"$old_value\", \"$new_value\")"); $sth->execute; $dbh->disconnect; Коментарии, думаю не нужны, ибо код прост. Кому нужно, тот с легкостью модифицирует его. вариант OnChange на bash: #!/bin/bash db_user="login" db_pass="pass" db_name="database" datetime=`date "+ %Y-%m-%d %H:%M:%S"` login=$1 parametr=$2 old_value=$3 new_value=$4 mysql -u $db_user --password=$db_pass -s -e "use $db_name; insert into changes (datetime, login, parametr, old_value, new_value) values (\"$datetime\", \"$login\", \"$parametr\", \"$old_value\", \"$new_value\");" Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас