NetUp UTM & ejabberd - синхронизация пользователей.

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
Закрыто
Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

NetUp UTM & ejabberd - синхронизация пользователей.

Сообщение Kayfolom »

После внедрения джаббера как средства обращения в техподдержку, общения пользователей и прочего, понадобилось средство синхронизации.
Рассматривал вариант написания модуля для ejabberd - отказался : сильная загрузка систем при каждой авторизации, отсутствие возможности создавать независимых от биллинга учетных записей джабера (к примеру с помощью авторегистрации).
По итогам написал сей скрипт, повесил его на события билинга Добавление и Изменение учетных записей. Загрузка системы минимальна, можно создавать не зависимых джабер-пользователей и т.п.
Алгоритм простой - выгребаются пользователи билинга напрямую из базы, в цикле создается один запрос на INSERT с ON DUPLICATE KEY UPDATE (если нет - вставляем, если есть - обновляем пароль), выполняем запрос на в базе джаббера.

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

Правда не удалоь логи писать, в билинге, в правиле файрвола строка
php /netup/utm5/bin/jabber_user_refresh.php >> /netup/utm5/log/jabber_user_refresh.log выполняется, но вывод не перенаправляется. Не знаю почему, да и так сойдет.

Код: Выделить всё

<?php
@ini_set&#40;"display_errors", "1"&#41;;
error_reporting&#40;E_ALL&#41;;

$db_host_UTM5 = 'localhost&#58;3306';
$db_base_UTM5 = 'UTM5';

$db_host_Jabber = '10.0.0.9&#58;3306';
$db_base_Jabber = 'ejabberd';

$db_user = 'login'; // сделал один логин на базу биллинга и джабера, чтоб не путаться.
$db_password = 'pass';

print date&#40;"d.m.Y H&#58;i"&#41;.' start'."\r\n";

$db_connect_UTM5=mysql_connect&#40;$db_host_UTM5,$db_user,$db_password&#41; or die &#40;"Connect failed"&#41;;
mysql_select_db&#40;$db_base_UTM5,$db_connect_UTM5&#41;;

$query_UTM5 = "Select users.login AS username, users.`password` From users Where users.is_deleted = '0'";

$result_UTM5 = mysql_query&#40;$query_UTM5,$db_connect_UTM5&#41;;

$query_Jabber = "INSERT INTO users &#40;username, password&#41; VALUES ";
while &#40;$row = mysql_fetch_array&#40;$result_UTM5&#41;&#41; &#123;
	$query_Jabber = $query_Jabber.sprintf&#40;"&#40;\"%s\",\"%s\"&#41;,", $row&#91;0&#93;, $row&#91;1&#93;&#41;;  
&#125;
$query_Jabber = $query_Jabber."***ON DUPLICATE KEY UPDATE password=password";
$query_Jabber = str_replace&#40;',***',' ',$query_Jabber&#41;;
mysql_free_result&#40;$result_UTM5&#41;;

$db_connect_Jabber = mysql_connect&#40;$db_host_Jabber,$db_user,$db_password&#41; or die&#40;"Could not connect&#58; " . mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;$db_base_Jabber,$db_connect_Jabber&#41;  or die &#40;'Can\'t use foo &#58; ' . mysql_error&#40;&#41;&#41;;
mysql_query&#40;$query_Jabber,$db_connect_Jabber&#41;;

print date&#40;"d.m.Y H&#58;i"&#41;.' stop'."\r\n";
?>

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Очень не рекомендую вешать подобное на события в биллинг. Ибо нетаповские события или не работают, или работают НЕ ПРЕДСКАЗУЕМО. По крайней мере в моей 005 сборке. Лучше по крону вызывать...

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

в моей шестой все тоже весьма плачевно, не расстраивайся.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

mikkey finn писал(а):в моей шестой все тоже весьма плачевно, не расстраивайся.
Угу. Уже расстроился. При перезапуске ядра, билинг начал выполнять скрипты на добавление и изменение для КАЖДОГО пользователя. Я минут 10 не мог въехать по какой причине у меня шлюз висит с максимальной загрузкой всех ресурсов, да еще и соседний сервак с джабер подгрузил не подетски ;)

Закрыто