Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« : 02 Июня 2016, 18:23:44 » |
|
Доброго времени суток.
Чешется добавить в лог авторизаций в клиентской статистике МАС, с которого собственно авторизация пришла. Сейчас МАС-и пишутся в таблицу dblogin процедурой radreply из запросов радиуса. Как заставить их переноситься в таблицу login и высветить в админке?
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #1 : 02 Июня 2016, 21:03:50 » |
|
а зачем что то куда то переносить .
select и вставть куда нужно в админку.
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #2 : 02 Июня 2016, 21:09:57 » |
|
Я так понял, что данные авторизации периодически из таблицы dblogin обрабатываются и переносятся в таблицу login, а с нее уже выводится информация в список авторизаций
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #3 : 02 Июня 2016, 21:48:49 » |
|
Я так понял, что данные авторизации периодически из таблицы dblogin обрабатываются и переносятся в таблицу login, а с нее уже выводится информация в список авторизаций
ну зачем что то кудато переносить? вам надо отобразить в веб морде - то не все равно с какой таблицы брать данные ? или если уж хочтся то измените процедуру радиуса стоп
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #4 : 03 Июня 2016, 10:45:47 » |
|
Так все процедуры пишут в dblogin. Мне переносить не надо - ядро все само переносит. Пусть будет stop - но как мне сказать ядру записать мас в таблицу? Я так понял, что этот кусок # ========================================================== # На основе хеша %AuthQueue # - установка в таблице users состояния авторизации клиентов # - запись в таблицу логинов # - установка состояния now_on в таблице users_trf sub SetAuthInDB { my ($cod,$err,$i,$id,$insert,$now_on,$rows,$st,$sql,$sql0,$sql1,$time); my %f; $i=0; $sql=$sql0=$sql1=''; $insert="INSERT INTO login (mid,act,time) VALUES"; foreach $id (keys %AuthQueue) { ($st,$cod,$now_on,$time,$err)=@{$AuthQueue{$id}}; next if ($Uauth{$id} eq $st) && !$err; # Текущее состояние авторизации такое же как и заказанное и не было ошибок записи текущего состояния $Uauth{$id}=$st; unless( $err ) { # если была ошибка - в логи не пишем - использовались групповые запросы $sql.="($id,$cod,$time),"; if ($i++>50) { # формируем групповые insert $i=0; chop $sql; &sqldo("$insert $sql"); $sql=''; } } $now_on? ($sql1.="$id,") : ($sql0.="$id,"); # скобки не убирать. $err не имеет значение - групповой запрос не insert, а update next if &sqldo("UPDATE users SET auth='$st' WHERE id=$id LIMIT 1"); @{$f{$id}}=($st,$cod,$now_on,$time,1); }
if ($sql) { chop $sql; &sqldo("$insert $sql",'Записи о текущих авторизациях'); }
chop $sql0; chop $sql1; $sql0 && &sqldo("UPDATE users_trf SET now_on=0 WHERE uid IN ($sql0)"); $sql1 && &sqldo("UPDATE users_trf SET now_on=1 WHERE uid IN ($sql1)");
%AuthQueue=%f; } Но что надо добавить?
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #5 : 03 Июня 2016, 11:26:56 » |
|
Так уже делал - выдает ошибку
sub SetAuthInDB { my ($cod,$err,$i,$id,$insert,$now_on,$rows,$st,$sql,$sql0,$sql1,$time,$mac); my %f; $i=0; $sql=$sql0=$sql1=''; $insert="INSERT INTO login (mid,act,time,mac) VALUES"; foreach $id (keys %AuthQueue) { ($st,$cod,$now_on,$time,$mac,$err)=@{$AuthQueue{$id}}; next if ($Uauth{$id} eq $st) && !$err; # Текущее состояние авторизации такое же как и заказанное и не было ошибок записи текущего состояния $Uauth{$id}=$st; unless( $err ) { # если была ошибка - в логи не пишем - использовались групповые запросы $sql.="($id,$cod,$time,$mac),"; if ($i++>50) { # формируем групповые insert $i=0; chop $sql; &sqldo("$insert $sql"); $sql=''; } } $now_on? ($sql1.="$id,") : ($sql0.="$id,"); # скобки не убирать. $err не имеет значение - групповой запрос не insert, а update next if &sqldo("UPDATE users SET auth='$st' WHERE id=$id LIMIT 1"); @{$f{$id}}=($st,$cod,$now_on,$time,$mac,1); }
if ($sql) { chop $sql; &sqldo("$insert $sql",'Записи о текущих авторизациях'); }
chop $sql0; chop $sql1; $sql0 && &sqldo("UPDATE users_trf SET now_on=0 WHERE uid IN ($sql0)"); $sql1 && &sqldo("UPDATE users_trf SET now_on=1 WHERE uid IN ($sql1)");
%AuthQueue=%f; }
Мож я чего упустил?
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #6 : 03 Июня 2016, 11:38:11 » |
|
$insert="INSERT INTO login (mid,act,time,mac) VALUES";
а
show create table login;
+
после foreach $id (keys %AuthQueue) { ($st,$cod,$now_on,$time,$mac,$err)=@{$AuthQueue{$id}};
сделайте вывод на екран переменых $st,$cod,$now_on,$time,$mac,$err
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #7 : 03 Июня 2016, 13:23:05 » |
|
| login | CREATE TABLE `login` ( `mid` mediumint(9) NOT NULL DEFAULT '0', `act` tinyint(4) NOT NULL DEFAULT '0', `time` int(11) DEFAULT NULL, `mac` char(32) NOT NULL, KEY `mid` (`mid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 | после foreach $id (keys %AuthQueue) { ($st,$cod,$now_on,$time,$mac,$err)=@{$AuthQueue{$id}};
сделайте вывод на екран переменых $st,$cod,$now_on,$time,$mac,$err В этом я не силен
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #8 : 03 Июня 2016, 16:12:19 » |
|
на глаз тут
$sql.="($id,$cod,$time,$mac),"; на
$sql.="($id,$cod,$time,'$mac'),";
и какую ошибку выдает ?
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #9 : 04 Июня 2016, 09:51:01 » |
|
В случае с $sql.="($id,$cod,$time,$mac),"; выдает ошибки: DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at /usr/local/nodeny/nodeny.pl line 517. DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at /usr/local/nodeny/nodeny.pl line 512. Иногда такое... You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '),(43,47,1465026380,)' at line 1 at /usr/local/nodeny/nodeny.pl line 517. С кавычками ошибок не выдает, но в таблицу нифига не пишет
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #10 : 04 Июня 2016, 09:57:31 » |
|
ну значит $mac пустое надо смотреть выще где формируется @{$AuthQueue{$id}};
поэтому и говорил сделать вывод на екран . посмотрите как оформленно дебаг
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #11 : 04 Июня 2016, 11:20:58 » |
|
$V && $V<$debug && &debug(sprintf("*>*>*>*",$st,$cod,$now_on,$time,$mac,$err)); Так пишет только *>*>*>*
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #12 : 04 Июня 2016, 11:34:38 » |
|
$V && $V<$debug && &debug(sprintf("*>*>*>*",$st,$cod,$now_on,$time,$mac,$err)); Так пишет только *>*>*>* не верно оформленно. @{$AuthQueue{$id}}; ну не тут тут мака . ищите выше где формируется...
|
|
|
Записан
|
|
|
|
Demeo
NoDeny
Постоялец
Карма: 6
Offline
Сообщений: 204
|
|
« Ответ #13 : 04 Июня 2016, 14:04:13 » |
|
По ходу пишет только числовые значения...
$AuthQueue{$id}[4]='0'; - работает $AuthQueue{$id}[4]='noop'; - не работает
|
|
|
Записан
|
|
|
|
ser970
NoDeny
Спец
Карма: 70
Offline
Сообщений: 1323
|
|
« Ответ #14 : 04 Июня 2016, 18:41:16 » |
|
По ходу пишет только числовые значения...
$AuthQueue{$id}[4]='0'; - работает $AuthQueue{$id}[4]='noop'; - не работает
почему так решили ? это же просто массив #!/usr/local/bin/perl $id=123; $AuthQueue{$id}[4]='noop'; print $AuthQueue{$id}[4]."\n"; 1; ./t.pl noop вот запись в мускул тут есть разница писать инт или стринг стринг должен быть экранирован
|
|
|
Записан
|
|
|
|
|