From 5fa1e01c9fae1f21ecbd324e966ecb8b5561eea3 Mon Sep 17 00:00:00 2001 From: Marcin Kowalczyk Date: Mon, 4 Jul 2016 12:40:07 +0200 Subject: [PATCH 1/4] There is an issue with empty_balance_context, type of dialplan is missing so transfer cannot be executed. Proper syntax for uuid transfer between contexts: freeswitch@freeswitch> uuid_transfer -USAGE: [-bleg|-both] [] [] On FS 1.6.7 when calling uuid_transfer without XML before context call is failed with No route to destination --- sessionmanager/fssessionmanager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sessionmanager/fssessionmanager.go b/sessionmanager/fssessionmanager.go index 37e4a86a3..e7dc3184e 100644 --- a/sessionmanager/fssessionmanager.go +++ b/sessionmanager/fssessionmanager.go @@ -276,7 +276,7 @@ func (sm *FSSessionManager) DisconnectSession(ev engine.Event, connId, notify st } if notify == INSUFFICIENT_FUNDS { if len(sm.cfg.EmptyBalanceContext) != 0 { - if _, err := sm.conns[connId].SendApiCmd(fmt.Sprintf("uuid_transfer %s %s %s\n\n", ev.GetUUID(), ev.GetCallDestNr(utils.META_DEFAULT), sm.cfg.EmptyBalanceContext)); err != nil { + if _, err := sm.conns[connId].SendApiCmd(fmt.Sprintf("uuid_transfer %s %s XML %s\n\n", ev.GetUUID(), ev.GetCallDestNr(utils.META_DEFAULT), sm.cfg.EmptyBalanceContext)); err != nil { utils.Logger.Err(fmt.Sprintf(" Could not transfer the call to empty balance context, error: <%s>, connId: %s", err.Error(), connId)) return err } From 8eaa9215afac1055f209244fb78ca5ef6a3a2d68 Mon Sep 17 00:00:00 2001 From: Marcin Kowalczyk Date: Mon, 4 Jul 2016 12:45:06 +0200 Subject: [PATCH 2/4] Signing CONTRIBUTORS.md --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 3c00699e0..a7e594736 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -46,6 +46,7 @@ information, please see the [`CONTRIBUTING.md`](CONTRIBUTING.md) file. | @J0hnSteel | John Koce Steel | | @ewsamuels | Errol Samuels | | @razvancrainea | Răzvan Crainea | +| @marcinkowalczyk | Marcin Kowalczyk | From 233426bb7ab19420a47c24b97e9b6b8851ee8cfd Mon Sep 17 00:00:00 2001 From: Errol Samuels Date: Tue, 5 Jul 2016 08:28:06 +0100 Subject: [PATCH 3/4] pg_cdr_migration.sql CDR migration script for Postgres. Migrates CDRs from the old cdrs_primary, rated_cdrs, cdrs_extra and cost_details tables into the single cdrs table. --- data/storage/postgres/pg_cdr_migration.sql | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 data/storage/postgres/pg_cdr_migration.sql diff --git a/data/storage/postgres/pg_cdr_migration.sql b/data/storage/postgres/pg_cdr_migration.sql new file mode 100644 index 000000000..f22a7beb6 --- /dev/null +++ b/data/storage/postgres/pg_cdr_migration.sql @@ -0,0 +1,38 @@ +/* +This script will migrate CDRs from the old CGRateS tables to the new cdrs table +but it only migrate CDRs where the duration is > 0. +If you need CDRs also with duration is = 0 you can make the appropriate change in the line beginning WHERE cdrs_primary.usage + +Also the script will process 10,000 CDRs before committing to save system resources +especially in systems where they are millions of CDRs to be migrated +You can increase or lower the value of step in the line after BEGIN below. +*/ + +DO $$ +DECLARE + count_cdrs integer; + start_id integer; + end_id integer; + step integer; +BEGIN + step := 10000; + start_id := 0; + end_id := start_id + step; + select count(*) INTO count_cdrs from rated_cdrs; + WHILE start_id < count_cdrs + LOOP + INSERT INTO + cdrs(cgrid,run_id,origin_host,source,origin_id,tor,request_type,direction,tenant,category,account,subject,destination,setup_time,pdd,answer_time,usage,supplier,disconnect_cause,extra_fields,cost_source,cost,cost_details,extra_info, created_at, updated_at, deleted_at) + SELECT cdrs_primary.cgrid,rated_cdrs.runid as run_id,cdrs_primary.cdrhost as origin_host,cdrs_primary.cdrsource as source,cdrs_primary.accid as origin_id, cdrs_primary.tor,rated_cdrs.reqtype as request_type,rated_cdrs.direction, rated_cdrs.tenant,rated_cdrs.category, rated_cdrs.account, rated_cdrs.subject, rated_cdrs.destination,rated_cdrs.setup_time,rated_cdrs.pdd,rated_cdrs.answer_time,rated_cdrs.usage,rated_cdrs.supplier,rated_cdrs.disconnect_cause,cdrs_extra.extra_fields,cost_details.cost_source,rated_cdrs.cost,cost_details.timespans as cost_details,rated_cdrs.extra_info,rated_cdrs.created_at,rated_cdrs.updated_at, rated_cdrs.deleted_at + FROM rated_cdrs + INNER JOIN cdrs_primary ON rated_cdrs.cgrid = cdrs_primary.cgrid + INNER JOIN cdrs_extra ON rated_cdrs.cgrid = cdrs_extra.cgrid + INNER JOIN cost_details ON rated_cdrs.cgrid = cost_details.cgrid + WHERE cdrs_primary.usage > '0' + AND not exists (select 1 from cdrs c where c.cgrid = cdrs_primary.cgrid) + ; + start_id = start_id + step; + end_id = end_id + step; + END LOOP; +END +$$; From 5fa03755c7fc27453e40c1e0d048bb418a4f71dc Mon Sep 17 00:00:00 2001 From: Errol Samuels Date: Tue, 5 Jul 2016 19:46:10 +0100 Subject: [PATCH 4/4] Update pg_cdr_migration.sql --- data/storage/postgres/pg_cdr_migration.sql | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/data/storage/postgres/pg_cdr_migration.sql b/data/storage/postgres/pg_cdr_migration.sql index f22a7beb6..1cb42a55e 100644 --- a/data/storage/postgres/pg_cdr_migration.sql +++ b/data/storage/postgres/pg_cdr_migration.sql @@ -10,17 +10,19 @@ You can increase or lower the value of step in the line after BEGIN below. DO $$ DECLARE - count_cdrs integer; - start_id integer; - end_id integer; - step integer; + max_cdrs bigint; + start_id bigint; + end_id bigint; + step bigint; BEGIN + /* You must change the step var to commit every step rows inserted */ step := 10000; start_id := 0; end_id := start_id + step; - select count(*) INTO count_cdrs from rated_cdrs; - WHILE start_id < count_cdrs + select max(id) INTO max_cdrs from rated_cdrs; + WHILE start_id <= max_cdrs LOOP + --RAISE NOTICE '%', (to_char(start_id, '99999999') || '-' || to_char(end_id, '99999999')); INSERT INTO cdrs(cgrid,run_id,origin_host,source,origin_id,tor,request_type,direction,tenant,category,account,subject,destination,setup_time,pdd,answer_time,usage,supplier,disconnect_cause,extra_fields,cost_source,cost,cost_details,extra_info, created_at, updated_at, deleted_at) SELECT cdrs_primary.cgrid,rated_cdrs.runid as run_id,cdrs_primary.cdrhost as origin_host,cdrs_primary.cdrsource as source,cdrs_primary.accid as origin_id, cdrs_primary.tor,rated_cdrs.reqtype as request_type,rated_cdrs.direction, rated_cdrs.tenant,rated_cdrs.category, rated_cdrs.account, rated_cdrs.subject, rated_cdrs.destination,rated_cdrs.setup_time,rated_cdrs.pdd,rated_cdrs.answer_time,rated_cdrs.usage,rated_cdrs.supplier,rated_cdrs.disconnect_cause,cdrs_extra.extra_fields,cost_details.cost_source,rated_cdrs.cost,cost_details.timespans as cost_details,rated_cdrs.extra_info,rated_cdrs.created_at,rated_cdrs.updated_at, rated_cdrs.deleted_at @@ -30,6 +32,8 @@ BEGIN INNER JOIN cost_details ON rated_cdrs.cgrid = cost_details.cgrid WHERE cdrs_primary.usage > '0' AND not exists (select 1 from cdrs c where c.cgrid = cdrs_primary.cgrid) + AND rated_cdrs.id >= start_id + AND rated_cdrs.id < end_id ; start_id = start_id + step; end_id = end_id + step;