Данный вариант подразумевает работу с Базой Данных (БД) напрямую. Используется MariaDB. Вариант с SQLite оставлю как домашнее задание.
Принцип основан на триггерах БД. В данном варианте учитывается входы, смены айпи и трафик. по всем серверам. При желании, и при достаточном кол-ве накопленных данных, можно будет провести корреляции по сменам ника, трафику, ip и(или) id определенного пользователя.
PHP:CREATE TABLE `clients_stat` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`client_id` INT(11) NOT NULL DEFAULT '0',
`server_id` INT(10) UNSIGNED NULL DEFAULT NULL,
`client_unique_id` VARCHAR(40) NULL DEFAULT NULL,
`client_nickname` VARCHAR(100) NULL DEFAULT NULL,
`client_login_name` VARCHAR(20) NULL DEFAULT NULL,
`client_login_password` VARCHAR(40) NULL DEFAULT NULL,
`client_lastconnected` INT(10) UNSIGNED NULL DEFAULT NULL,
`client_lastdisconnected` INT(10) UNSIGNED NULL DEFAULT NULL,
`client_totalconnections` INT(10) UNSIGNED NULL DEFAULT '0',
`client_month_upload` BIGINT(20) UNSIGNED NULL DEFAULT '0',
`client_month_download` BIGINT(20) UNSIGNED NULL DEFAULT '0',
`client_total_upload` BIGINT(20) UNSIGNED NULL DEFAULT '0',
`client_total_download` BIGINT(20) UNSIGNED NULL DEFAULT '0',
`client_lastip` VARCHAR(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `index_clients_id` (`client_id`),
INDEX `index_clients_serverid` (`server_id`),
INDEX `index_clients_uid` (`client_unique_id`, `server_id`),
INDEX `client_lastip` (`client_lastip`),
INDEX `index_clients_lastconnectedserverid` (`client_lastconnected`, `server_id`, `client_lastdisconnected`),
INDEX `client_nickname` (`client_nickname`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
PHP:CREATE TRIGGER `clients_before_update` BEFORE UPDATE ON `clients` FOR EACH ROW INSERT INTO clients_stat(
client_id, server_id, client_unique_id, client_nickname, client_login_name, client_login_password,
client_lastconnected, client_totalconnections,
client_month_upload, client_month_download, client_total_upload, client_total_download, client_lastip)
VALUES (
NEW.client_id, NEW.server_id, NEW.client_unique_id, NEW.client_nickname, NEW.client_login_name, NEW.client_login_password,
NEW.client_lastconnected, NEW.client_totalconnections,
NEW.client_month_upload, NEW.client_month_download, NEW.client_total_upload, NEW.client_total_download, NEW.client_lastip)
END
Небольшие уточнения:
- DDL таблицы clients_stat взят из оригинальной clients.
- Сам сервер TS3 оперирует INSERT OR UPDATE, поэтому триггер приходится вешать на UPDATE.
- Отследить дисконнект пользователя данным способом нереально. увы, только ботом.
- При большом кол-ве соединений и, соответственно, обновлений БД возможна просадка производительности самой Базы. Использовать на свой страх и риск.
- Работает уже чуть больше полугода #3, на не особо активном сервере NPL, база особо не растет (больше всего за это боялся). Деградации и падения производительности замечено не было.
Данный вариант можно "проапгрейдить" дальше как дополнение к логам сервера, для учета изменений привилегий, каналов и т.д. т.п.
-
Скрыть объявление
Рады видеть Вас на русскоязычном форуме TeamSpeak!
У нас Вы можете скачать последнюю версию:
- Клиент TeamSpeak 3;
- Русификатор TeamSpeak 3;
- Сервер TeamSpeak 3;
- Найти много всего интересного
Перед регистрацией рекомендуем ознакомиться
Присоединяйтесь! Учите и обучайтесь!
-
Новая группа "Новичок" на нашем форуме!
Новые пользователи будут попадать в группу "Новичок".
Это сделано для того чтобы "Новички" ознакомились с форумом, так как в большинстве случаев проблема с которой вы хотите обратиться уже обсуждалась.
Перейти в тему обсуждения
Быстрый переход в группу Пользователь -
VPS/VDS и дедикейт сервера в аренду с DDoS защитой
- Низкий пинг
- Действующий SLA
- Рублевые цены без привязки к курсу валют
Бесплатный тестовый период VPS-OpenVZ
Попробовать
Еще один вариант учета статистики пользователей
Принцип основан на триггерах БД. (Перенос темы из вопросов)
Метки: