8.11.2014

freeradius. cdrtool. patch

*** Warning: Linking the shared library rlm_sqlcounter.la against the loadable module
*** rlm_sql.so is not portable!
gcc -shared .libs/rlm_sqlcounter.o -L/usr/local/lib -lfreeradius-radius -lrlm_sql -lnsl -lresolv -lpthread -Wl,-soname -Wl,rlm_sqlcounte counter-2.1.12.so
/usr/bin/ld: cannot find -lrlm_sql
collect2: error: ld returned 1 exit status
libtool: install: error: relink `rlm_sqlcounter.la’ with the above command before installing it

Решение найдено в интеренет, как работает хуй знает – от этого тошно, но все же выглядит оно так:

надо конфигурить с параметром:

./configure --disable-cxx

Эх, где ж вы спецы линуксовые хорошие.
PS: помогло то, что скачал пакет из репозитория вместо того чтобы скачивать командой apt-get source freeradius.

6.11.2014

Mysql. With recursive. Суммировать результаты запроса. Having.

Привет,  давеча обнаружил что в таблице со звонками есть двойные звонки. Соответственно возникают две задачи:

1. Удалить дублирующися записи (легко),

2. Делать выборку без дублирующихся записей (легко),

3. Посчитать сумму звонков в продублированных записях. (интересно).

 

1 и 2 я опущу, это не интересно. А вот третий пункт делается так:

with recursive mytable as (select max(duration) from acc where time > ‘2014-08-01 00:00:00’ and srcip like ‘ip address’ and duration > 0 group by callid having count(callid) > 1) select sum(max) from mytable;

но это не включает секунды третьего звонка которые тоже есть.

создадим темповою табличку для экспериментов:

create temporary table acc2 as (select * from acc order by time desc limit 1000);

yooxy# delete from acc3 where id in (select max(id) from acc3 where time > ‘2014-08-01 00:00:00’ and srcip like ‘address’ and duration > 0 group by callid having count(callid) > 1);
DELETE 224
yooxy_1711=# delete from acc3 where id in (select max(id) from acc3 where time > ‘2014-08-01 00:00:00’ and srcip like ‘address’ and duration > 0 group by callid having count(callid) > 1);
DELETE 27
yooxy_1711=# delete from acc3 where id in (select max(id) from acc3 where time > ‘2014-08-01 00:00:00’ and srcip like ‘address’ and duration > 0 group by callid having count(callid) > 1);

DELETE 0.

правда это вручную, зато все под контролем. ну и удалим таблицу.

drop table acc2.