mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 10:06:24 +05:00
Changes and additions for Drone
This commit is contained in:
committed by
Dan Christian Bogos
parent
4472685065
commit
5409f2c60c
239
.drone.yml
239
.drone.yml
@@ -2,56 +2,217 @@ kind: pipeline
|
|||||||
type: docker
|
type: docker
|
||||||
name: unit
|
name: unit
|
||||||
|
|
||||||
|
|
||||||
workspace:
|
workspace:
|
||||||
path: /cgrates
|
path: /cgrates
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: unit
|
- name: unit
|
||||||
pull: never
|
pull: never
|
||||||
image: cgrates-integration
|
image: cgrates-it-entrypoint
|
||||||
commands:
|
commands:
|
||||||
# - docker-entrypoint.sh
|
- docker-entrypoint.sh
|
||||||
- ./test.sh
|
- ./test.sh
|
||||||
# - name: notify
|
- name: notify
|
||||||
# pull: never
|
pull: never
|
||||||
# image: trial97/drone-email
|
image: drillster/drone-email
|
||||||
# settings:
|
settings:
|
||||||
# from: cgrates.test01@gmail.com
|
from: cgrates.test01@gmail.com
|
||||||
# credentials:
|
host: smtp.gmail.com
|
||||||
# from_secret: credentials
|
username:
|
||||||
# token:
|
from_secret: email_username
|
||||||
# from_secret: token
|
password:
|
||||||
# when:
|
from_secret: email_password
|
||||||
# status: [ changed, failure ]
|
subject: >
|
||||||
|
[{{ build.status }}]
|
||||||
|
{{ repo.owner }}/{{ repo.name }}
|
||||||
|
({{ commit.branch }})
|
||||||
|
body: >
|
||||||
|
Build number: # {{ build.number }}
|
||||||
|
Build link: {{ build.link }}
|
||||||
|
Build started: {{ build.started }}
|
||||||
|
Build ended: {{ build.finished }}
|
||||||
|
Commit author: {{ commit.author.name }}
|
||||||
|
Commit message: {{ commit.message }}
|
||||||
|
Commit branch: {{ commit.branch }}
|
||||||
|
Commit link: {{ commit.link }}
|
||||||
|
recipients_file: recipients
|
||||||
|
recipients_only: true
|
||||||
|
when:
|
||||||
|
status: failure
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: integration-internal
|
||||||
|
|
||||||
|
|
||||||
# ---
|
workspace:
|
||||||
# kind: pipeline
|
path: /cgrates
|
||||||
# type: docker
|
|
||||||
# name: default
|
|
||||||
|
|
||||||
# workspace:
|
steps:
|
||||||
# path: /cgrates
|
- name: integration-internal
|
||||||
|
pull: never
|
||||||
|
image: cgrates-it-entrypoint
|
||||||
|
commands:
|
||||||
|
- docker-entrypoint.sh
|
||||||
|
- ./integration_test.sh -dbtype=*internal
|
||||||
|
- name: notify
|
||||||
|
pull: never
|
||||||
|
image: drillster/drone-email
|
||||||
|
settings:
|
||||||
|
from: cgrates.test01@gmail.com
|
||||||
|
host: smtp.gmail.com
|
||||||
|
username:
|
||||||
|
from_secret: email_username
|
||||||
|
password:
|
||||||
|
from_secret: email_password
|
||||||
|
subject: >
|
||||||
|
[{{ build.status }}]
|
||||||
|
{{ repo.owner }}/{{ repo.name }}
|
||||||
|
({{ commit.branch }})
|
||||||
|
body: >
|
||||||
|
Build number: # {{ build.number }}
|
||||||
|
Build link: {{ build.link }}
|
||||||
|
Build started: {{ build.started }}
|
||||||
|
Build ended: {{ build.finished }}
|
||||||
|
Commit author: {{ commit.author.name }}
|
||||||
|
Commit message: {{ commit.message }}
|
||||||
|
Commit branch: {{ commit.branch }}
|
||||||
|
Commit link: {{ commit.link }}
|
||||||
|
recipients_file: recipients
|
||||||
|
recipients_only: true
|
||||||
|
when:
|
||||||
|
status: failure
|
||||||
|
|
||||||
# steps:
|
---
|
||||||
# - name: integration
|
kind: pipeline
|
||||||
# pull: never
|
type: docker
|
||||||
# image: cgrates-integration
|
name: integration-mysql
|
||||||
# commands:
|
|
||||||
# - docker-entrypoint.sh
|
|
||||||
# - ./integration_test.sh
|
|
||||||
|
|
||||||
# - name: notify
|
|
||||||
# pull: never
|
|
||||||
# image: trial97/drone-email
|
|
||||||
# settings:
|
|
||||||
# from: cgrates.test01@gmail.com
|
|
||||||
# credentials:
|
|
||||||
# from_secret: credentials
|
|
||||||
# token:
|
|
||||||
# from_secret: token
|
|
||||||
# when:
|
|
||||||
# status: [ changed, failure ]
|
|
||||||
|
|
||||||
# depends_on:
|
workspace:
|
||||||
# - unit
|
path: /cgrates
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: integration-mysql
|
||||||
|
pull: never
|
||||||
|
image: cgrates-it-entrypoint
|
||||||
|
commands:
|
||||||
|
- docker-entrypoint.sh
|
||||||
|
- ./integration_test.sh -dbtype=*mysql
|
||||||
|
- name: notify
|
||||||
|
pull: never
|
||||||
|
image: drillster/drone-email
|
||||||
|
settings:
|
||||||
|
from: cgrates.test01@gmail.com
|
||||||
|
host: smtp.gmail.com
|
||||||
|
username:
|
||||||
|
from_secret: email_username
|
||||||
|
password:
|
||||||
|
from_secret: email_password
|
||||||
|
subject: >
|
||||||
|
[{{ build.status }}]
|
||||||
|
{{ repo.owner }}/{{ repo.name }}
|
||||||
|
({{ commit.branch }})
|
||||||
|
body: >
|
||||||
|
Build number: # {{ build.number }}
|
||||||
|
Build link: {{ build.link }}
|
||||||
|
Build started: {{ build.started }}
|
||||||
|
Build ended: {{ build.finished }}
|
||||||
|
Commit author: {{ commit.author.name }}
|
||||||
|
Commit message: {{ commit.message }}
|
||||||
|
Commit branch: {{ commit.branch }}
|
||||||
|
Commit link: {{ commit.link }}
|
||||||
|
recipients_file: recipients
|
||||||
|
recipients_only: true
|
||||||
|
when:
|
||||||
|
status: failure
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: integration-mongo
|
||||||
|
|
||||||
|
|
||||||
|
workspace:
|
||||||
|
path: /cgrates
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: integration-mongo
|
||||||
|
pull: never
|
||||||
|
image: cgrates-it-entrypoint
|
||||||
|
commands:
|
||||||
|
- docker-entrypoint.sh
|
||||||
|
- ./integration_test.sh -dbtype=*mongo
|
||||||
|
- name: notify
|
||||||
|
pull: never
|
||||||
|
image: drillster/drone-email
|
||||||
|
settings:
|
||||||
|
from: cgrates.test01@gmail.com
|
||||||
|
host: smtp.gmail.com
|
||||||
|
username:
|
||||||
|
from_secret: email_username
|
||||||
|
password:
|
||||||
|
from_secret: email_password
|
||||||
|
subject: >
|
||||||
|
[{{ build.status }}]
|
||||||
|
{{ repo.owner }}/{{ repo.name }}
|
||||||
|
({{ commit.branch }})
|
||||||
|
body: >
|
||||||
|
Build number: # {{ build.number }}
|
||||||
|
Build link: {{ build.link }}
|
||||||
|
Build started: {{ build.started }}
|
||||||
|
Build ended: {{ build.finished }}
|
||||||
|
Commit author: {{ commit.author.name }}
|
||||||
|
Commit message: {{ commit.message }}
|
||||||
|
Commit branch: {{ commit.branch }}
|
||||||
|
Commit link: {{ commit.link }}
|
||||||
|
recipients_file: recipients
|
||||||
|
recipients_only: true
|
||||||
|
when:
|
||||||
|
status: failure
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: integration-postgres
|
||||||
|
|
||||||
|
|
||||||
|
workspace:
|
||||||
|
path: /cgrates
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: integration-postgres
|
||||||
|
pull: never
|
||||||
|
image: cgrates-it-entrypoint
|
||||||
|
commands:
|
||||||
|
- docker-entrypoint.sh
|
||||||
|
- ./integration_test.sh -dbtype=*postgres
|
||||||
|
- name: notify
|
||||||
|
pull: never
|
||||||
|
image: drillster/drone-email
|
||||||
|
settings:
|
||||||
|
from: cgrates.test01@gmail.com
|
||||||
|
host: smtp.gmail.com
|
||||||
|
username:
|
||||||
|
from_secret: email_username
|
||||||
|
password:
|
||||||
|
from_secret: email_password
|
||||||
|
subject: >
|
||||||
|
[{{ build.status }}]
|
||||||
|
{{ repo.owner }}/{{ repo.name }}
|
||||||
|
({{ commit.branch }})
|
||||||
|
body: >
|
||||||
|
Build number: # {{ build.number }}
|
||||||
|
Build link: {{ build.link }}
|
||||||
|
Build started: {{ build.started }}
|
||||||
|
Build ended: {{ build.finished }}
|
||||||
|
Commit author: {{ commit.author.name }}
|
||||||
|
Commit message: {{ commit.message }}
|
||||||
|
Commit branch: {{ commit.branch }}
|
||||||
|
Commit link: {{ commit.link }}
|
||||||
|
recipients_file: recipients
|
||||||
|
recipients_only: true
|
||||||
|
when:
|
||||||
|
status: failure
|
||||||
|
|||||||
1
data/ansible/drone/drone_setup.retry
Normal file
1
data/ansible/drone/drone_setup.retry
Normal file
@@ -0,0 +1 @@
|
|||||||
|
localhost
|
||||||
60
data/ansible/drone/drone_setup.yaml
Normal file
60
data/ansible/drone/drone_setup.yaml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
- hosts: localhost
|
||||||
|
vars:
|
||||||
|
github_client_id: f378ce41a211899bb672
|
||||||
|
github_client_secret: 6557b7ff2b69ab4fcfed44172b98e89d30733341
|
||||||
|
drone_server_host: 5fd0-86-125-244-213.ngrok.io
|
||||||
|
tasks:
|
||||||
|
# We need docker first
|
||||||
|
# - name: Configure docker
|
||||||
|
# include: docker.yaml
|
||||||
|
|
||||||
|
# We will use this image in order to spin up the drone server
|
||||||
|
- name: Pull drone image
|
||||||
|
become: yes
|
||||||
|
shell: docker pull drone/drone:2
|
||||||
|
|
||||||
|
# We will use this image in order to run builds whenever an event occurs. (ie. pull request)
|
||||||
|
- name: Pull drone runner image
|
||||||
|
become: yes
|
||||||
|
shell: docker pull drone/drone-runner-docker:1
|
||||||
|
|
||||||
|
# We need to generate a secret in order to parse it to the drone server configuration
|
||||||
|
- name: generate RPCSecret
|
||||||
|
shell: "openssl rand -hex 16"
|
||||||
|
register: drone_secret
|
||||||
|
|
||||||
|
# Start drone server with proper configuration
|
||||||
|
- name: Start drone server
|
||||||
|
become: yes
|
||||||
|
shell: >
|
||||||
|
docker run \
|
||||||
|
--volume=/var/lib/drone:/data \
|
||||||
|
--env=DRONE_GITHUB_CLIENT_ID={{ github_client_id }} \
|
||||||
|
--env=DRONE_GITHUB_CLIENT_SECRET={{ github_client_secret }} \
|
||||||
|
--env=DRONE_RPC_SECRET={{ drone_secret.stdout }} \
|
||||||
|
--env=DRONE_SERVER_HOST={{ drone_server_host }} \
|
||||||
|
--env=DRONE_SERVER_PROTO=https \
|
||||||
|
--publish=80:80 \
|
||||||
|
--publish=443:443 \
|
||||||
|
--restart=always \
|
||||||
|
--detach=true \
|
||||||
|
--name=drone \
|
||||||
|
drone/drone:2
|
||||||
|
|
||||||
|
# Start drone runner with prper configuration
|
||||||
|
- name: Start drone runner
|
||||||
|
become: yes
|
||||||
|
shell: >
|
||||||
|
docker run --detach \
|
||||||
|
--volume=/var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
--env=DRONE_RPC_PROTO=https \
|
||||||
|
--env=DRONE_RPC_HOST={{ drone_server_host }} \
|
||||||
|
--env=DRONE_RPC_SECRET={{ drone_secret.stdout }} \
|
||||||
|
--env=DRONE_RUNNER_CAPACITY=2 \
|
||||||
|
--env=DRONE_RUNNER_NAME=drone-runner \
|
||||||
|
--publish=3000:3000 \
|
||||||
|
--restart=always \
|
||||||
|
--name=drone-runner \
|
||||||
|
drone/drone-runner-docker:1
|
||||||
|
|
||||||
|
|
||||||
9
data/docker/integration/scripts/mongo/create_user.js
Normal file
9
data/docker/integration/scripts/mongo/create_user.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
db = db.getSiblingDB('cgrates')
|
||||||
|
db.createUser(
|
||||||
|
{
|
||||||
|
user: "cgrates",
|
||||||
|
pwd: "CGRateS.org",
|
||||||
|
roles: [ { role: "dbAdmin", db: "cgrates" } ]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
14
data/docker/integration/scripts/mongo/setup_cgr_db.sh
Executable file
14
data/docker/integration/scripts/mongo/setup_cgr_db.sh
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#! /usr/bin/env sh
|
||||||
|
|
||||||
|
|
||||||
|
mongo --quiet create_user.js
|
||||||
|
cu=$?
|
||||||
|
|
||||||
|
if [ $cu = 0 ]; then
|
||||||
|
echo ""
|
||||||
|
echo "\t+++ CGR-DB successfully set-up! +++"
|
||||||
|
echo ""
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
--
|
||||||
|
-- Table structure for table `cdrs`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS cdrs;
|
||||||
|
CREATE TABLE cdrs (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
cgrid VARCHAR(40) NOT NULL,
|
||||||
|
run_id VARCHAR(64) NOT NULL,
|
||||||
|
origin_host VARCHAR(64) NOT NULL,
|
||||||
|
source VARCHAR(64) NOT NULL,
|
||||||
|
origin_id VARCHAR(128) NOT NULL,
|
||||||
|
tor VARCHAR(16) NOT NULL,
|
||||||
|
request_type VARCHAR(24) NOT NULL,
|
||||||
|
tenant VARCHAR(64) NOT NULL,
|
||||||
|
category VARCHAR(64) NOT NULL,
|
||||||
|
account VARCHAR(128) NOT NULL,
|
||||||
|
subject VARCHAR(128) NOT NULL,
|
||||||
|
destination VARCHAR(128) NOT NULL,
|
||||||
|
setup_time TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||||
|
answer_time TIMESTAMP WITH TIME ZONE NULL,
|
||||||
|
usage BIGINT NOT NULL,
|
||||||
|
extra_fields jsonb NOT NULL,
|
||||||
|
cost_source VARCHAR(64) NOT NULL,
|
||||||
|
cost NUMERIC(20,4) DEFAULT NULL,
|
||||||
|
cost_details jsonb,
|
||||||
|
extra_info text,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
updated_at TIMESTAMP WITH TIME ZONE NULL,
|
||||||
|
deleted_at TIMESTAMP WITH TIME ZONE NULL,
|
||||||
|
UNIQUE (cgrid, run_id)
|
||||||
|
);
|
||||||
|
;
|
||||||
|
DROP INDEX IF EXISTS deleted_at_cp_idx;
|
||||||
|
CREATE INDEX deleted_at_cp_idx ON cdrs (deleted_at);
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS session_costs;
|
||||||
|
CREATE TABLE session_costs (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
cgrid VARCHAR(40) NOT NULL,
|
||||||
|
run_id VARCHAR(64) NOT NULL,
|
||||||
|
origin_host VARCHAR(64) NOT NULL,
|
||||||
|
origin_id VARCHAR(128) NOT NULL,
|
||||||
|
cost_source VARCHAR(64) NOT NULL,
|
||||||
|
usage BIGINT NOT NULL,
|
||||||
|
cost_details jsonb,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
deleted_at TIMESTAMP WITH TIME ZONE NULL,
|
||||||
|
UNIQUE (cgrid, run_id)
|
||||||
|
);
|
||||||
|
DROP INDEX IF EXISTS cgrid_sessionscost_idx;
|
||||||
|
CREATE INDEX cgrid_sessionscost_idx ON session_costs (cgrid, run_id);
|
||||||
|
DROP INDEX IF EXISTS origin_sessionscost_idx;
|
||||||
|
CREATE INDEX origin_sessionscost_idx ON session_costs (origin_host, origin_id);
|
||||||
|
DROP INDEX IF EXISTS run_origin_sessionscost_idx;
|
||||||
|
CREATE INDEX run_origin_sessionscost_idx ON session_costs (run_id, origin_id);
|
||||||
|
DROP INDEX IF EXISTS deleted_at_sessionscost_idx;
|
||||||
|
CREATE INDEX deleted_at_sessionscost_idx ON session_costs (deleted_at);
|
||||||
9
data/docker/integration/scripts/postgres/create_db_with_users.sh
Executable file
9
data/docker/integration/scripts/postgres/create_db_with_users.sh
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
#
|
||||||
|
# Sample db and users creation. Replace here with your own details
|
||||||
|
#
|
||||||
|
|
||||||
|
sudo -u postgres dropdb -e cgrates
|
||||||
|
sudo -u postgres dropuser -e cgrates
|
||||||
|
sudo -u postgres psql -c "CREATE USER cgrates password 'CGRateS.org';"
|
||||||
|
sudo -u postgres createdb -e -O cgrates cgrates
|
||||||
4
data/docker/integration/scripts/postgres/create_ers_db.sh
Executable file
4
data/docker/integration/scripts/postgres/create_ers_db.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
# extra DB for ees and ers
|
||||||
|
sudo -u postgres dropdb -e cgrates2
|
||||||
|
sudo -u postgres createdb -e -O cgrates cgrates2
|
||||||
@@ -0,0 +1,477 @@
|
|||||||
|
--
|
||||||
|
-- Table structure for table `tp_timings`
|
||||||
|
--
|
||||||
|
DROP TABLE IF EXISTS tp_timings;
|
||||||
|
CREATE TABLE tp_timings (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
years VARCHAR(255) NOT NULL,
|
||||||
|
months VARCHAR(255) NOT NULL,
|
||||||
|
month_days VARCHAR(255) NOT NULL,
|
||||||
|
week_days VARCHAR(255) NOT NULL,
|
||||||
|
time VARCHAR(32) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag)
|
||||||
|
);
|
||||||
|
CREATE INDEX tptimings_tpid_idx ON tp_timings (tpid);
|
||||||
|
CREATE INDEX tptimings_idx ON tp_timings (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_destinations`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_destinations;
|
||||||
|
CREATE TABLE tp_destinations (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
prefix VARCHAR(24) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag, prefix)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpdests_tpid_idx ON tp_destinations (tpid);
|
||||||
|
CREATE INDEX tpdests_idx ON tp_destinations (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_rates`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_rates;
|
||||||
|
CREATE TABLE tp_rates (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
connect_fee NUMERIC(7,4) NOT NULL,
|
||||||
|
rate NUMERIC(10,4) NOT NULL,
|
||||||
|
rate_unit VARCHAR(16) NOT NULL,
|
||||||
|
rate_increment VARCHAR(16) NOT NULL,
|
||||||
|
group_interval_start VARCHAR(16) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag, group_interval_start)
|
||||||
|
);
|
||||||
|
CREATE INDEX tprates_tpid_idx ON tp_rates (tpid);
|
||||||
|
CREATE INDEX tprates_idx ON tp_rates (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `destination_rates`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_destination_rates;
|
||||||
|
CREATE TABLE tp_destination_rates (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
destinations_tag VARCHAR(64) NOT NULL,
|
||||||
|
rates_tag VARCHAR(64) NOT NULL,
|
||||||
|
rounding_method VARCHAR(255) NOT NULL,
|
||||||
|
rounding_decimals SMALLINT NOT NULL,
|
||||||
|
max_cost NUMERIC(7,4) NOT NULL,
|
||||||
|
max_cost_strategy VARCHAR(16) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag , destinations_tag)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpdestrates_tpid_idx ON tp_destination_rates (tpid);
|
||||||
|
CREATE INDEX tpdestrates_idx ON tp_destination_rates (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_rating_plans`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_rating_plans;
|
||||||
|
CREATE TABLE tp_rating_plans (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
destrates_tag VARCHAR(64) NOT NULL,
|
||||||
|
timing_tag VARCHAR(64) NOT NULL,
|
||||||
|
weight NUMERIC(8,2) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag, destrates_tag, timing_tag)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpratingplans_tpid_idx ON tp_rating_plans (tpid);
|
||||||
|
CREATE INDEX tpratingplans_idx ON tp_rating_plans (tpid,tag);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_rate_profiles`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_rating_profiles;
|
||||||
|
CREATE TABLE tp_rating_profiles (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
loadid VARCHAR(64) NOT NULL,
|
||||||
|
tenant VARCHAR(64) NOT NULL,
|
||||||
|
category VARCHAR(32) NOT NULL,
|
||||||
|
subject VARCHAR(64) NOT NULL,
|
||||||
|
activation_time VARCHAR(26) NOT NULL,
|
||||||
|
rating_plan_tag VARCHAR(64) NOT NULL,
|
||||||
|
fallback_subjects VARCHAR(64),
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, loadid, tenant, category, subject, activation_time)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpratingprofiles_tpid_idx ON tp_rating_profiles (tpid);
|
||||||
|
CREATE INDEX tpratingprofiles_idx ON tp_rating_profiles (tpid,loadid,tenant,category,subject);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_shared_groups`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_shared_groups;
|
||||||
|
CREATE TABLE tp_shared_groups (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
account VARCHAR(64) NOT NULL,
|
||||||
|
strategy VARCHAR(24) NOT NULL,
|
||||||
|
rating_subject VARCHAR(24) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag, account , strategy , rating_subject)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpsharedgroups_tpid_idx ON tp_shared_groups (tpid);
|
||||||
|
CREATE INDEX tpsharedgroups_idx ON tp_shared_groups (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_actions`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_actions;
|
||||||
|
CREATE TABLE tp_actions (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
action VARCHAR(24) NOT NULL,
|
||||||
|
extra_parameters VARCHAR(256) NOT NULL,
|
||||||
|
filters VARCHAR(256) NOT NULL,
|
||||||
|
balance_tag VARCHAR(64) NOT NULL,
|
||||||
|
balance_type VARCHAR(24) NOT NULL,
|
||||||
|
categories VARCHAR(32) NOT NULL,
|
||||||
|
destination_tags VARCHAR(64) NOT NULL,
|
||||||
|
rating_subject VARCHAR(64) NOT NULL,
|
||||||
|
shared_groups VARCHAR(64) NOT NULL,
|
||||||
|
expiry_time VARCHAR(26) NOT NULL,
|
||||||
|
timing_tags VARCHAR(128) NOT NULL,
|
||||||
|
units VARCHAR(256) NOT NULL,
|
||||||
|
balance_weight VARCHAR(10) NOT NULL,
|
||||||
|
balance_blocker VARCHAR(5) NOT NULL,
|
||||||
|
balance_disabled VARCHAR(5) NOT NULL,
|
||||||
|
weight NUMERIC(8,2) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag, action, balance_tag, balance_type, expiry_time, timing_tags, destination_tags, shared_groups, balance_weight, weight)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpactions_tpid_idx ON tp_actions (tpid);
|
||||||
|
CREATE INDEX tpactions_idx ON tp_actions (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_action_timings`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_action_plans;
|
||||||
|
CREATE TABLE tp_action_plans (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
actions_tag VARCHAR(64) NOT NULL,
|
||||||
|
timing_tag VARCHAR(64) NOT NULL,
|
||||||
|
weight NUMERIC(8,2) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag, actions_tag, timing_tag)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpactionplans_tpid_idx ON tp_action_plans (tpid);
|
||||||
|
CREATE INDEX tpactionplans_idx ON tp_action_plans (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table tp_action_triggers
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_action_triggers;
|
||||||
|
CREATE TABLE tp_action_triggers (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
tag VARCHAR(64) NOT NULL,
|
||||||
|
unique_id VARCHAR(64) NOT NULL,
|
||||||
|
threshold_type VARCHAR(64) NOT NULL,
|
||||||
|
threshold_value NUMERIC(20,4) NOT NULL,
|
||||||
|
recurrent BOOLEAN NOT NULL,
|
||||||
|
min_sleep VARCHAR(16) NOT NULL,
|
||||||
|
expiry_time VARCHAR(26) NOT NULL,
|
||||||
|
activation_time VARCHAR(26) NOT NULL,
|
||||||
|
balance_tag VARCHAR(64) NOT NULL,
|
||||||
|
balance_type VARCHAR(24) NOT NULL,
|
||||||
|
balance_categories VARCHAR(32) NOT NULL,
|
||||||
|
balance_destination_tags VARCHAR(64) NOT NULL,
|
||||||
|
balance_rating_subject VARCHAR(64) NOT NULL,
|
||||||
|
balance_shared_groups VARCHAR(64) NOT NULL,
|
||||||
|
balance_expiry_time VARCHAR(26) NOT NULL,
|
||||||
|
balance_timing_tags VARCHAR(128) NOT NULL,
|
||||||
|
balance_weight VARCHAR(10) NOT NULL,
|
||||||
|
balance_blocker VARCHAR(5) NOT NULL,
|
||||||
|
balance_disabled VARCHAR(5) NOT NULL,
|
||||||
|
actions_tag VARCHAR(64) NOT NULL,
|
||||||
|
weight NUMERIC(8,2) NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, tag, balance_tag, balance_type, threshold_type, threshold_value, balance_destination_tags, actions_tag)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpactiontrigers_tpid_idx ON tp_action_triggers (tpid);
|
||||||
|
CREATE INDEX tpactiontrigers_idx ON tp_action_triggers (tpid,tag);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table tp_account_actions
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_account_actions;
|
||||||
|
CREATE TABLE tp_account_actions (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
tpid VARCHAR(64) NOT NULL,
|
||||||
|
loadid VARCHAR(64) NOT NULL,
|
||||||
|
tenant VARCHAR(64) NOT NULL,
|
||||||
|
account VARCHAR(64) NOT NULL,
|
||||||
|
action_plan_tag VARCHAR(64),
|
||||||
|
action_triggers_tag VARCHAR(64),
|
||||||
|
allow_negative BOOLEAN NOT NULL,
|
||||||
|
disabled BOOLEAN NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE (tpid, loadid, tenant, account)
|
||||||
|
);
|
||||||
|
CREATE INDEX tpaccountactions_tpid_idx ON tp_account_actions (tpid);
|
||||||
|
CREATE INDEX tpaccountactions_idx ON tp_account_actions (tpid,loadid,tenant,account);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_resources`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_resources;
|
||||||
|
CREATE TABLE tp_resources (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant"varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"filter_ids" varchar(64) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"usage_ttl" varchar(32) NOT NULL,
|
||||||
|
"limit" varchar(64) NOT NULL,
|
||||||
|
"allocation_message" varchar(64) NOT NULL,
|
||||||
|
"blocker" BOOLEAN NOT NULL,
|
||||||
|
"stored" BOOLEAN NOT NULL,
|
||||||
|
"weight" NUMERIC(8,2) NOT NULL,
|
||||||
|
"threshold_ids" varchar(64) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_resources_idx ON tp_resources (tpid);
|
||||||
|
CREATE INDEX tp_resources_unique ON tp_resources ("tpid", "tenant", "id", "filter_ids");
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_stats`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_stats;
|
||||||
|
CREATE TABLE tp_stats (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant"varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"filter_ids" varchar(64) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"queue_length" INTEGER NOT NULL,
|
||||||
|
"ttl" varchar(32) NOT NULL,
|
||||||
|
"min_items" INTEGER NOT NULL,
|
||||||
|
"metric_ids" VARCHAR(128) NOT NULL,
|
||||||
|
"metric_filter_ids" VARCHAR(128) NOT NULL,
|
||||||
|
"stored" BOOLEAN NOT NULL,
|
||||||
|
"blocker" BOOLEAN NOT NULL,
|
||||||
|
"weight" decimal(8,2) NOT NULL,
|
||||||
|
"threshold_ids" varchar(64) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_stats_idx ON tp_stats (tpid);
|
||||||
|
CREATE INDEX tp_stats_unique ON tp_stats ("tpid","tenant", "id", "filter_ids","metric_ids");
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_threshold_cfgs`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_thresholds;
|
||||||
|
CREATE TABLE tp_thresholds (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant"varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"filter_ids" varchar(64) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"max_hits" INTEGER NOT NULL,
|
||||||
|
"min_hits" INTEGER NOT NULL,
|
||||||
|
"min_sleep" varchar(16) NOT NULL,
|
||||||
|
"blocker" BOOLEAN NOT NULL,
|
||||||
|
"weight" decimal(8,2) NOT NULL,
|
||||||
|
"action_ids" varchar(64) NOT NULL,
|
||||||
|
"async" BOOLEAN NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_thresholds_idx ON tp_thresholds (tpid);
|
||||||
|
CREATE INDEX tp_thresholds_unique ON tp_thresholds ("tpid","tenant", "id","filter_ids","action_ids");
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_filter`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_filters;
|
||||||
|
CREATE TABLE tp_filters (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant" varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"type" varchar(16) NOT NULL,
|
||||||
|
"element" varchar(64) NOT NULL,
|
||||||
|
"values" varchar(256) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_filters_idx ON tp_filters (tpid);
|
||||||
|
CREATE INDEX tp_filters_unique ON tp_filters ("tpid","tenant", "id", "type", "element");
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_routes`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_routes;
|
||||||
|
CREATE TABLE tp_routes (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant"varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"filter_ids" varchar(64) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"sorting" varchar(32) NOT NULL,
|
||||||
|
"sorting_parameters" varchar(64) NOT NULL,
|
||||||
|
"route_id" varchar(32) NOT NULL,
|
||||||
|
"route_filter_ids" varchar(64) NOT NULL,
|
||||||
|
"route_account_ids" varchar(64) NOT NULL,
|
||||||
|
"route_ratingplan_ids" varchar(64) NOT NULL,
|
||||||
|
"route_resource_ids" varchar(64) NOT NULL,
|
||||||
|
"route_stat_ids" varchar(64) NOT NULL,
|
||||||
|
"route_weight" decimal(8,2) NOT NULL,
|
||||||
|
"route_blocker" BOOLEAN NOT NULL,
|
||||||
|
"route_parameters" varchar(64) NOT NULL,
|
||||||
|
"weight" decimal(8,2) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_routes_idx ON tp_routes (tpid);
|
||||||
|
CREATE INDEX tp_routes_unique ON tp_routes ("tpid", "tenant", "id",
|
||||||
|
"filter_ids","route_id","route_filter_ids","route_account_ids",
|
||||||
|
"route_ratingplan_ids","route_resource_ids","route_stat_ids");
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_attributes`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_attributes;
|
||||||
|
CREATE TABLE tp_attributes (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant"varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"contexts" varchar(64) NOT NULL,
|
||||||
|
"filter_ids" varchar(64) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"attribute_filter_ids" varchar(64) NOT NULL,
|
||||||
|
"path" varchar(64) NOT NULL,
|
||||||
|
"type" varchar(64) NOT NULL,
|
||||||
|
"value" varchar(64) NOT NULL,
|
||||||
|
"blocker" BOOLEAN NOT NULL,
|
||||||
|
"weight" decimal(8,2) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_attributes_ids ON tp_attributes (tpid);
|
||||||
|
CREATE INDEX tp_attributes_unique ON tp_attributes ("tpid", "tenant", "id",
|
||||||
|
"filter_ids","path","value");
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_chargers`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_chargers;
|
||||||
|
CREATE TABLE tp_chargers (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant"varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"filter_ids" varchar(64) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"run_id" varchar(64) NOT NULL,
|
||||||
|
"attribute_ids" varchar(64) NOT NULL,
|
||||||
|
"weight" decimal(8,2) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_chargers_ids ON tp_chargers (tpid);
|
||||||
|
CREATE INDEX tp_chargers_unique ON tp_chargers ("tpid", "tenant", "id",
|
||||||
|
"filter_ids","run_id","attribute_ids");
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_dispatchers`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_dispatcher_profiles;
|
||||||
|
CREATE TABLE tp_dispatcher_profiles (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant" varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"subsystems" varchar(64) NOT NULL,
|
||||||
|
"filter_ids" varchar(64) NOT NULL,
|
||||||
|
"activation_interval" varchar(64) NOT NULL,
|
||||||
|
"strategy" varchar(64) NOT NULL,
|
||||||
|
"strategy_parameters" varchar(64) NOT NULL,
|
||||||
|
"conn_id" varchar(64) NOT NULL,
|
||||||
|
"conn_filter_ids" varchar(64) NOT NULL,
|
||||||
|
"conn_weight" decimal(8,2) NOT NULL,
|
||||||
|
"conn_blocker" BOOLEAN NOT NULL,
|
||||||
|
"conn_parameters" varchar(64) NOT NULL,
|
||||||
|
"weight" decimal(8,2) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_dispatcher_profiles_ids ON tp_dispatcher_profiles (tpid);
|
||||||
|
CREATE INDEX tp_dispatcher_profiles_unique ON tp_dispatcher_profiles ("tpid", "tenant", "id",
|
||||||
|
"filter_ids","strategy","conn_id","conn_filter_ids");
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `tp_dispatchers`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tp_dispatcher_hosts;
|
||||||
|
CREATE TABLE tp_dispatcher_hosts (
|
||||||
|
"pk" SERIAL PRIMARY KEY,
|
||||||
|
"tpid" varchar(64) NOT NULL,
|
||||||
|
"tenant" varchar(64) NOT NULL,
|
||||||
|
"id" varchar(64) NOT NULL,
|
||||||
|
"address" varchar(64) NOT NULL,
|
||||||
|
"transport" varchar(64) NOT NULL,
|
||||||
|
"connect_attempts" INTEGER NOT NULL,
|
||||||
|
"reconnects" INTEGER NOT NULL,
|
||||||
|
"connect_timeout" varchar(64) NOT NULL,
|
||||||
|
"reply_timeout" varchar(64) NOT NULL,
|
||||||
|
"tls" BOOLEAN NOT NULL,
|
||||||
|
"client_key" varchar(64) NOT NULL,
|
||||||
|
"client_certificate" varchar(64) NOT NULL,
|
||||||
|
"ca_certificate" varchar(64) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
CREATE INDEX tp_dispatchers_hosts_ids ON tp_dispatcher_hosts (tpid);
|
||||||
|
CREATE INDEX tp_dispatcher_hosts_unique ON tp_dispatcher_hosts ("tpid", "tenant", "id",
|
||||||
|
"address");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `versions`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS versions;
|
||||||
|
CREATE TABLE versions (
|
||||||
|
"id" SERIAL PRIMARY KEY,
|
||||||
|
"item" varchar(64) NOT NULL,
|
||||||
|
"version" INTEGER NOT NULL,
|
||||||
|
UNIQUE ("id","item")
|
||||||
|
);
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
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
|
||||||
|
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 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,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.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)
|
||||||
|
AND rated_cdrs.id >= start_id
|
||||||
|
AND rated_cdrs.id < end_id
|
||||||
|
;
|
||||||
|
start_id = start_id + step;
|
||||||
|
end_id = end_id + step;
|
||||||
|
END LOOP;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
30
data/docker/integration/scripts/postgres/setup_cgr_db.sh
Executable file
30
data/docker/integration/scripts/postgres/setup_cgr_db.sh
Executable file
@@ -0,0 +1,30 @@
|
|||||||
|
#! /usr/bin/env sh
|
||||||
|
|
||||||
|
|
||||||
|
user=$1
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
user="cgrates"
|
||||||
|
fi
|
||||||
|
|
||||||
|
host=$2
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
host="localhost"
|
||||||
|
fi
|
||||||
|
|
||||||
|
DIR="$(dirname "$(readlink -f "$0")")"
|
||||||
|
|
||||||
|
"$DIR"/create_db_with_users.sh
|
||||||
|
|
||||||
|
export PGPASSWORD="CGRateS.org"
|
||||||
|
|
||||||
|
psql -U $user -h $host -d cgrates -f "$DIR"/create_cdrs_tables.sql
|
||||||
|
cdrt=$?
|
||||||
|
psql -U $user -h $host -d cgrates -f "$DIR"/create_tariffplan_tables.sql
|
||||||
|
tpt=$?
|
||||||
|
|
||||||
|
if [ $cdrt = 0 ] && [ $tpt = 0 ]; then
|
||||||
|
echo "\n\t+++ CGR-DB successfully set-up! +++\n"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
293
drone_template.html
Normal file
293
drone_template.html
Normal file
@@ -0,0 +1,293 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-webkit-text-size-adjust: none;
|
||||||
|
width: 100% !important;
|
||||||
|
height: 100%;
|
||||||
|
line-height: 1.6;
|
||||||
|
background-color: #f6f6f6;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body-wrap {
|
||||||
|
background-color: #f6f6f6;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: block !important;
|
||||||
|
max-width: 600px !important;
|
||||||
|
margin: 0 auto !important;
|
||||||
|
/* makes it centered */
|
||||||
|
clear: both !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e9e9e9;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrap {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-block {
|
||||||
|
padding: 0 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3 {
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
||||||
|
color: #000;
|
||||||
|
margin: 40px 0 0;
|
||||||
|
line-height: 1.2;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border: 1px solid #e9e9e9;
|
||||||
|
margin: 20px 0;
|
||||||
|
height: 1px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
p li,
|
||||||
|
ul li,
|
||||||
|
ol li {
|
||||||
|
margin-left: 5px;
|
||||||
|
list-style-position: inside;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #348eda;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.last {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.padding {
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligncenter {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alignright {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alignleft {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 3px 3px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert a {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert.alert-warning {
|
||||||
|
background: #ff9f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert.alert-bad {
|
||||||
|
background: #d0021b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert.alert-good {
|
||||||
|
background: #68b90f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 640px) {
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3 {
|
||||||
|
font-weight: 600 !important;
|
||||||
|
margin: 20px 0 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 22px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 18px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content,
|
||||||
|
.content-wrapper {
|
||||||
|
padding: 10px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<table class="body-wrap">
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class="container" width="600">
|
||||||
|
<div class="content">
|
||||||
|
<table class="main" width="100%" cellpadding="0" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
{{#success build.status}}
|
||||||
|
<td class="alert alert-good">
|
||||||
|
<a href="{{ system.link_url }}/{{ repo.owner }}/{{ repo.name }}/{{ build.number }}">
|
||||||
|
Successful build #{{ build.number }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
{{else}}
|
||||||
|
<td class="alert alert-bad">
|
||||||
|
<a href="{{ system.link_url }}/{{ repo.owner }}/{{ repo.name }}/{{ build.number }}">
|
||||||
|
Failed build #{{ build.number }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
{{/success}}
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="content-wrap">
|
||||||
|
<table width="100%" cellpadding="0" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Repo:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ repo.owner }}/{{ repo.name }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Author:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ commit.author.name }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Branch:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ commit.branch }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Commit link:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ commit.link }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Build link:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ build.link }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Time:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ duration build.started build.finished }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<table width="100%" cellpadding="0" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ commit.message }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -85,21 +85,22 @@ func TestLibengineNewRPCConnection(t *testing.T) {
|
|||||||
TLS: true,
|
TLS: true,
|
||||||
ClientKey: "key1",
|
ClientKey: "key1",
|
||||||
}
|
}
|
||||||
expectedErr := "dial tcp [::1]:6012: connect: connection refused"
|
expectedErr1 := "dial tcp [::1]:6012: connect: connection refused"
|
||||||
|
expectedErr2 := "dial tcp 127.0.0.1:6012: connect: connection refused"
|
||||||
cM := NewConnManager(config.NewDefaultCGRConfig(), nil)
|
cM := NewConnManager(config.NewDefaultCGRConfig(), nil)
|
||||||
exp, err := rpcclient.NewRPCClient(utils.TCP, cfg.Address, cfg.TLS, cfg.ClientKey, cM.cfg.TLSCfg().ClientCerificate,
|
exp, err := rpcclient.NewRPCClient(utils.TCP, cfg.Address, cfg.TLS, cfg.ClientKey, cM.cfg.TLSCfg().ClientCerificate,
|
||||||
cM.cfg.TLSCfg().CaCertificate, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout,
|
cM.cfg.TLSCfg().CaCertificate, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout,
|
||||||
cfg.Transport, nil, false, nil)
|
cfg.Transport, nil, false, nil)
|
||||||
|
|
||||||
if err.Error() != expectedErr {
|
if err.Error() != expectedErr1 && err.Error() != expectedErr2 {
|
||||||
t.Errorf("Expected %v \n but received \n %v", expectedErr, err)
|
t.Errorf("Expected %v or %v \n but received \n %v", expectedErr1, expectedErr2, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
conn, err := NewRPCConnection(cfg, cM.cfg.TLSCfg().ClientKey, cM.cfg.TLSCfg().ClientCerificate, cM.cfg.TLSCfg().CaCertificate,
|
conn, err := NewRPCConnection(cfg, cM.cfg.TLSCfg().ClientKey, cM.cfg.TLSCfg().ClientCerificate, cM.cfg.TLSCfg().CaCertificate,
|
||||||
cM.cfg.GeneralCfg().ConnectAttempts, cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout,
|
cM.cfg.GeneralCfg().ConnectAttempts, cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout,
|
||||||
nil, false, nil, "*localhost", "a4f3f", new(ltcache.Cache))
|
nil, false, nil, "*localhost", "a4f3f", new(ltcache.Cache))
|
||||||
if err.Error() != expectedErr {
|
if err.Error() != expectedErr1 && err.Error() != expectedErr2 {
|
||||||
t.Errorf("Expected %v \n but received \n %v", expectedErr, err)
|
t.Errorf("Expected %v or %v \n but received \n %v", expectedErr1, expectedErr2, err)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(exp, conn) {
|
if !reflect.DeepEqual(exp, conn) {
|
||||||
t.Error("Connections don't match")
|
t.Error("Connections don't match")
|
||||||
|
|||||||
1
recipients
Normal file
1
recipients
Normal file
@@ -0,0 +1 @@
|
|||||||
|
nickolas.filip@itsyscom.com
|
||||||
4
recipients_backup
Normal file
4
recipients_backup
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
andrei.andronache@itsyscom.com
|
||||||
|
ionut.boangiu@itsyscom.com
|
||||||
|
adrian.porosnicu@itsyscom.com
|
||||||
|
nickolas.filip@itsyscom.com
|
||||||
Reference in New Issue
Block a user