mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
2173 lines
110 KiB
Go
2173 lines
110 KiB
Go
//go:generate go run ../data/scripts/generate_config/generate.go
|
||
/*
|
||
Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
|
||
Copyright (C) ITsysCOM GmbH
|
||
|
||
This program is free software: you can redistribute it and/or modify
|
||
it under the terms of the GNU Affero General Public License as published by
|
||
the Free Software Foundation, either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
This program is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU Affero General Public License for more details.
|
||
|
||
You should have received a copy of the GNU Affero General Public License
|
||
along with this program. If not, see <https://www.gnu.org/licenses/>
|
||
*/
|
||
|
||
package config
|
||
|
||
const CGRATES_CFG_JSON = `
|
||
{
|
||
|
||
// Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
|
||
// Copyright (C) ITsysCOM GmbH
|
||
//
|
||
// This file contains the default configuration hardcoded into CGRateS.
|
||
// This is what you get when you load CGRateS with an empty configuration file.
|
||
|
||
"general": {
|
||
"node_id": "", // identifier of this instance in the cluster, if empty it will be autogenerated
|
||
"rounding_decimals": 5, // system level precision for floats
|
||
"dbdata_encoding": "*msgpack", // encoding used to store object data in strings: <*msgpack|*json>
|
||
"tpexport_dir": "/var/spool/cgrates/tpe", // path towards export folder for offline TariffPlans
|
||
"default_request_type": "*rated", // default request type to consider when missing from requests: <""|*prepaid|*postpaid|*pseudoprepaid|*rated>
|
||
"default_category": "call", // default category to consider when missing from requests
|
||
"default_tenant": "cgrates.org", // default tenant to consider when missing from requests
|
||
"default_timezone": "Local", // default timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB>
|
||
"default_caching": "*reload", // default actions to do when caching items
|
||
"caching_delay": "0s", // add delay before cache reload
|
||
"min_call_duration": "0s", // only authorize calls with allowed duration higher than this
|
||
"max_call_duration": "3h", // maximum call duration a prepaid call can last
|
||
"connect_attempts": 5, // initial server connect attempts
|
||
"reconnects": -1, // number of retries in case of connection lost
|
||
"max_reconnect_interval": "", // time to wait in between reconnect attempts
|
||
"connect_timeout": "1s", // consider connection unsuccessful on timeout, 0 to disable the feature
|
||
"reply_timeout": "2s", // consider connection down for replies taking longer than this value
|
||
"locking_timeout": "0", // timeout internal locks to avoid deadlocks
|
||
"digest_separator": ",", // separator to use in replies containing data digests
|
||
"digest_equal": ":", // equal symbol used in case of digests
|
||
"max_parallel_conns": 100, // the maximum number of connection used by the *parallel strategy
|
||
"decimal_max_scale": 0, // the maximum scale for decimal numbers
|
||
"decimal_min_scale": 0, // the minimum scale for decimal numbers
|
||
"decimal_precision": 0, // the precision of the decimal operations
|
||
"decimal_rounding_mode": "*toNearestEven", // the rounding mode <*toNearestEven|*toNearestAway|*toZero|*awayFromZero|*toNegativeInf|*toPositiveInf|*toNearestTowardZero>
|
||
"opts":{
|
||
// "*exporterIDs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": []
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
"logger": {
|
||
"type": "*syslog", // controls the destination of logs <*syslog|*stdout|*kafkaLog>
|
||
"level": 6, // system level precision for floats
|
||
"efs_conns": ["*internal"], // connID to efs service
|
||
"opts": {
|
||
"kafka_conn": "", // the connection trough kafka
|
||
"kafka_topic": "", // the topic from where the events are exported
|
||
"kafka_attempts": 1, // number of attempts of connecting
|
||
"failed_posts_dir": "/var/spool/cgrates/failed_posts" // path where fail logs are exported
|
||
}
|
||
},
|
||
|
||
"cores": {
|
||
"caps": 0, // maximum concurrent request allowed ( 0 to disabled )
|
||
"caps_strategy": "*busy", // strategy in case of concurrent requests reached
|
||
"caps_stats_interval": "0", // the interval duration we sample for caps stats ( 0 to disabled )
|
||
"ees_conns": [], // connections to EventExporter
|
||
"shutdown_timeout": "1s" // the duration to wait until all services are stopped
|
||
},
|
||
|
||
"rpc_conns": { // rpc connections definitions
|
||
// "*localhost": {
|
||
// "strategy": "*first",
|
||
// "poolsize": 0,
|
||
// "reply_timeout": "2s",
|
||
// "conns": [{
|
||
// "address": "127.0.0.1:2012",
|
||
// "transport": "*json",
|
||
// "connect_attempts": 5,
|
||
// "reconnects": -1,
|
||
// "max_reconnect_interval": "",
|
||
// "connect_timeout": "1s",
|
||
// "reply_timeout": "2s",
|
||
// "tls": false,
|
||
// "client_key": "",
|
||
// "client_certificate": "",
|
||
// "ca_certificate": ""
|
||
// }]
|
||
// }
|
||
},
|
||
|
||
"db": { // database used to store data (eg: accounts)
|
||
"db_conns": {
|
||
"*default": { // The id of the DB connection
|
||
"db_type": "*internal", // db type: <*internal|*redis|*mysql|*mongo|*postgres>
|
||
"db_host": "", // db host address
|
||
"db_port": 0, // db port to reach the database
|
||
"db_name": "", // db database name to connect to
|
||
"db_user": "", // username to use when connecting to db
|
||
"db_password": "", // password to use when connecting to db
|
||
"string_indexed_fields": [], // indexes on cdrs table to speed up queries, used in case of *mongo and *internal
|
||
"prefix_indexed_fields": [], // prefix indexes on cdrs table to speed up queries, used in case of *internal
|
||
"remote_conns": [], // the conns that are queried when the items are not found in local DB
|
||
"remote_conn_id": "", // the ID to be sent to remote_conns to identify the connection
|
||
"replication_conns": [], // the conns the items are replicated
|
||
"replication_filtered": false, // if this is enabled the replication will be made only to the conns that received a get
|
||
"replication_cache": "", // the caching action that is executed on the replication_conns when the items are replicated
|
||
},
|
||
},
|
||
"items":{
|
||
// compatible with all db types
|
||
"*accounts": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*ip_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*ip_allocations": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*action_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*versions": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*charger_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
|
||
// compatible db types: <*internal|*redis|*mongo>
|
||
"*actions": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*resource_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*resources": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*statqueue_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*statqueues": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*threshold_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*thresholds": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*filters": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*route_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*attribute_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*rate_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*load_ids": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*resource_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*ip_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*stat_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*threshold_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*ranking_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*rankings": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*trend_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*trends": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"},
|
||
"*route_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*attribute_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*charger_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*rate_profile_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*rate_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*action_profile_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*account_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
"*reverse_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false, "dbConn": "*default"},
|
||
|
||
// compatible db types: <*internal|*mysql|*mongo|*postgres>
|
||
"*cdrs": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false, "dbConn": "*default"} // Compatible only for Internal, MySQL, Mongo and PostgresSQL databases
|
||
},
|
||
"opts":{
|
||
"internalDBDumpPath": "/var/lib/cgrates/internal_db/db", // the path where db will be dumped
|
||
"internalDBBackupPath": "/var/lib/cgrates/internal_db/backup/db", // default path taken by AdminSv1.Backupdb when "BackupFolderPath" is not provided
|
||
"internalDBStartTimeout": "5m", // the amount of wait time until timeout for DB startup
|
||
"internalDBDumpInterval": "1m", // dump db regularly to a file: "0" - disables it; "-1" - dump on each set/remove; <""|$dur>
|
||
"internalDBRewriteInterval": "1h", // rewrite dump files regularly: "0" - disables it; "-1" - rewrite on engine start; "-2" - rewrite on engine shutdown; <""|$dur>
|
||
"internalDBFileSizeLimit": "1GB", // maximum size that can be written in a singular dump file
|
||
"redisMaxConns": 10, // the connection pool size
|
||
"redisConnectAttempts": 20, // the maximum amount of dial attempts
|
||
"redisSentinel": "", // the name of sentinel when used
|
||
"redisCluster": false, // if enabled the db will try to connect to the redis cluster
|
||
"redisClusterSync": "5s", // the sync interval for the redis cluster
|
||
"redisClusterOndownDelay": "0", // the delay before executing the commands if the redis cluster is in the CLUSTERDOWN state
|
||
"redisConnectTimeout": "0", // the amount of wait time until timeout for a connection attempt
|
||
"redisReadTimeout": "0", // the amount of wait time until timeout for reading operations
|
||
"redisWriteTimeout": "0", // the amount of wait time until timeout for writing operations
|
||
"redisPoolPipelineWindow": "150µs", // duration after which internal pipelines are flushed (0 disables implicit pipelining)
|
||
"redisPoolPipelineLimit": 0, // maximum number of commands that can be pipelined before flushing (0 means no limit)
|
||
"redisTLS": false, // if true it will use a tls connection and use the redisClientCertificate, redisClientKey and redisCACertificate for tls connection
|
||
"redisClientCertificate": "", // path to client certificate
|
||
"redisClientKey": "", // path to client key
|
||
"redisCACertificate": "", // path to CA certificate (populate for self-signed certificate otherwise let it empty)
|
||
"sqlMaxOpenConns": 100, // maximum database connections opened, not applying for mongo
|
||
"sqlMaxIdleConns": 10, // maximum database connections idle, not applying for mongo
|
||
"sqlLogLevel": 3, // sql logger verbosity: 1=Silent, 2=Error, 3=Warn, 4=Info
|
||
"sqlConnMaxLifetime": "0", // maximum amount of time a connection may be reused (0 for unlimited), not applying for mongo
|
||
"mysqlDSNParams":{}, // DSN params for opening db
|
||
"pgSSLMode": "disable", // determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server
|
||
//"pgSSLCert": "", // file name of the client SSL certificate, replacing the default ~/.postgresql/postgresql.crt
|
||
//"pgSSLKey": "", // location for the secret key used for the client certificate
|
||
//"pgSSLPassword": "", // specifies the password for the secret key specified in pgSSLKey
|
||
//"pgSSLCertMode": "allow", // determines whether a client certificate may be sent to the server, and whether the server is required to request one
|
||
//"pgSSLRootCert": "", // name of a file containing SSL certificate authority (CA) certificate(s)
|
||
"mysqlLocation": "Local", // the location the time from mysql is retrived
|
||
"mongoQueryTimeout": "10s", // timeout for query when mongo is used
|
||
"mongoConnScheme": "mongodb" // scheme for MongoDB connection <mongodb|mongodb+srv>
|
||
}
|
||
},
|
||
|
||
"listen": {
|
||
"rpc_json": "127.0.0.1:2012", // RPC JSON listening address
|
||
"rpc_gob": "127.0.0.1:2013", // RPC GOB listening address
|
||
"http": "127.0.0.1:2080", // HTTP listening address
|
||
"rpc_json_tls" : "127.0.0.1:2022", // RPC JSON TLS listening address
|
||
"rpc_gob_tls": "127.0.0.1:2023", // RPC GOB TLS listening address
|
||
"http_tls": "127.0.0.1:2280" // HTTP TLS listening address
|
||
},
|
||
|
||
"tls": {
|
||
"server_certificate" : "", // path to server certificate
|
||
"server_key":"", // path to server key
|
||
"client_certificate" : "", // path to client certificate
|
||
"client_key":"", // path to client key
|
||
"ca_certificate":"", // path to CA certificate (populate for self-signed certificate otherwise let it empty)
|
||
"server_policy":4, // server_policy determines the TLS Client Authentication (0-NoClientCert, 1-RequestClientCert, 2-RequireAnyClientCert, 3-VerifyClientCertIfGiven, 4-RequireAndVerifyClientCert)
|
||
"server_name":""
|
||
},
|
||
|
||
|
||
"http": { // HTTP server configuration
|
||
"json_rpc_url": "/jsonrpc", // JSON RPC relative URL ("" to disable)
|
||
"registrars_url": "/registrar", // registrar service relative URL
|
||
"ws_url": "/ws", // WebSockets relative URL ("" to disable)
|
||
"freeswitch_cdrs_url": "/freeswitch_json", // Freeswitch CDRS relative URL ("" to disable)
|
||
"http_cdrs": "/cdr_http", // CDRS relative URL ("" to disable)
|
||
"pprof_path": "/debug/pprof/", // endpoint for serving runtime profiling data for pprof visualization
|
||
"use_basic_auth": false, // use basic authentication
|
||
"auth_users": {}, // basic authentication usernames and base64-encoded passwords (eg: { "username1": "cGFzc3dvcmQ=", "username2": "cGFzc3dvcmQy "})
|
||
"client_opts":{
|
||
"skipTLSVerification": false, // if enabled Http Client will accept any TLS certificate
|
||
// the options to configure the http.Transport
|
||
"tlsHandshakeTimeout": "10s",
|
||
"disableKeepAlives": false,
|
||
"disableCompression": false,
|
||
"maxIdleConns": 100,
|
||
"maxIdleConnsPerHost": 2,
|
||
"maxConnsPerHost": 0,
|
||
"idleConnTimeout": "90s",
|
||
"responseHeaderTimeout": "0",
|
||
"expectContinueTimeout": "0",
|
||
"forceAttemptHttp2": true,
|
||
// the optins to configure the net.Dialer
|
||
"dialTimeout": "30s",
|
||
"dialFallbackDelay": "300ms",
|
||
"dialKeepAlive": "30s"
|
||
}
|
||
},
|
||
|
||
"caches":{
|
||
"partitions": {
|
||
"*resource_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control resource profiles caching
|
||
"*resources": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control resources caching
|
||
"*event_resources": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // matching resources to events
|
||
"*ip_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control ip profiles caching
|
||
"*ip_allocations": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control ip allocations caching
|
||
"*event_ips": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // matching ip allocations to events
|
||
"*statqueue_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // statqueue profiles
|
||
"*statqueues": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // statqueues with metrics
|
||
"*threshold_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control threshold profiles caching
|
||
"*thresholds": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control thresholds caching
|
||
"*trend_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control threshold profiles caching
|
||
"*trends": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control thresholds caching
|
||
"*filters": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control filters caching
|
||
"*route_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control route profile caching
|
||
"*attribute_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control attribute profile caching
|
||
"*charger_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control charger profile caching
|
||
"*rate_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control rate profile caching
|
||
"*action_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control action profile caching
|
||
"*accounts": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control account profile caching
|
||
"*resource_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control resource filter indexes caching
|
||
"*ip_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control ip filter indexes caching
|
||
"*stat_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control stat filter indexes caching
|
||
"*threshold_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control threshold filter indexes caching
|
||
"*route_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control route filter indexes caching
|
||
"*attribute_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control attribute filter indexes caching
|
||
"*ranking_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control ranking profile caching
|
||
"*rankings": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control rankings caching
|
||
"*charger_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control charger filter indexes caching
|
||
"*rate_profile_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control rate profile filter indexes caching
|
||
"*rate_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control rate filter indexes caching
|
||
"*action_profile_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control action profile filter indexes caching
|
||
"*account_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control coount profile filter indexes caching
|
||
"*reverse_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control reverse filter indexes caching used only for set and remove filters
|
||
"*diameter_messages": {"limit": -1, "ttl": "3h", "static_ttl": false, "remote":false, "replicate": false}, // diameter messages caching
|
||
"*radius_packets": {"limit": -1, "ttl": "3h", "static_ttl": false, "remote":false, "replicate": false}, // radius packets caching
|
||
"*rpc_responses": {"limit": 0, "ttl": "2s", "static_ttl": false, "remote":false, "replicate": false}, // RPC responses caching
|
||
"*closed_sessions": {"limit": -1, "ttl": "10s", "static_ttl": false, "remote":false, "replicate": false}, // closed sessions cached for CDRs
|
||
"*event_charges": {"limit": 0, "ttl": "10s", "static_ttl": false, "remote":false, "replicate": false}, // events proccessed by ChargerS
|
||
"*cdr_ids": {"limit": -1, "ttl": "10m", "static_ttl": false, "remote":false, "replicate": false}, // protects CDRs against double-charging
|
||
"*load_ids": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control the load_ids for items
|
||
"*rpc_connections": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // RPC connections caching
|
||
"*uch": {"limit": -1, "ttl": "3h", "static_ttl": false, "remote":false, "replicate": false}, // User cache
|
||
"*stir": {"limit": -1, "ttl": "3h", "static_ttl": false, "remote":false, "replicate": false}, // stirShaken cache keys
|
||
"*apiban":{"limit": -1, "ttl": "2m", "static_ttl": false, "remote":false, "replicate": false},
|
||
"*sentrypeer":{"limit": -1, "ttl": "24h", "static_ttl": true, "remote":false, "replicate": false},
|
||
"*caps_events": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // caps cached samples
|
||
"*replication_hosts": {"limit": 0, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // the replication hosts cache(used when replication_filtered is enbled)
|
||
},
|
||
"replication_conns": [],
|
||
"remote_conns": [] // the conns that are queried when the items are not found in cache
|
||
},
|
||
|
||
|
||
"filters": {
|
||
"stats_conns": [], // connections to StatS for <*stats> filters, empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"resources_conns": [], // connections to ResourceS for <*resources> filters, empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"accounts_conns": [], // connections to AccountS for <*accounts> filters, empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"trends_conns": [], // connections to TrendS for <*trends> filters, empty to disable trends functionality: <""|*internal|$rpc_conns_id>
|
||
"rankings_conns": [] // connections to RankingS for <*rankings> filters, empty to disable rankings functionality: <""|*internal|$rpc_conns_id>
|
||
},
|
||
|
||
|
||
|
||
"cdrs": {
|
||
"enabled": false, // start the CDR Server: <true|false>
|
||
"extra_fields": [], // extra fields to store in CDRs for non-generic CDRs (ie: FreeSWITCH JSON)
|
||
"session_cost_retries": 5, // number of queries to session_costs before recalculating CDR
|
||
"chargers_conns": [], // connection to ChargerS for CDR forking, empty to disable billing for CDRs: <""|*internal|$rpc_conns_id>
|
||
"attributes_conns": [], // connection to AttributeS for altering *raw CDRs, empty to disable attributes functionality: <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connection to ThresholdS for CDR reporting, empty to disable thresholds functionality: <""|*internal|$rpc_conns_id>
|
||
"stats_conns": [], // connections to StatS for CDR reporting, empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"online_cdr_exports":[], // list of CDRE profiles to use for real-time CDR exports
|
||
"actions_conns": [], // connections to SchedulerS in case of *dynaprepaid request
|
||
"ees_conns": [], // connections to EventExporter
|
||
"rates_conns": [], // connections to RateS
|
||
"accounts_conns": [], // connections to AccountS
|
||
"opts": {
|
||
// "*accounts": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*attributes": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*chargers": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*ees": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*rates": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*stats": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*thresholds": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*refund": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*rerate": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*store": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "true"
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"ers": { // EventReaderService
|
||
"enabled": false, // starts the EventReader service: <true|false>
|
||
"sessions_conns":["*internal"], // RPC Connections IDs
|
||
"ees_conns": [], // connection for routing processed and invalid messages through EEs
|
||
"stats_conns": [], // connections to StatS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"partial_cache_ttl": "1s", // the duration to cache partial records when not pairing
|
||
"readers": [
|
||
{
|
||
"id": "*default", // identifier of the EventReader profile
|
||
"type": "*none", // reader type <*fileCSV>
|
||
"run_delay": "0", // sleep interval in seconds between consecutive runs, "-1" to use automation via inotify; "0" to disable running all together; <""|$dur>
|
||
"start_delay": "0", // time to wait before an reader starts to run
|
||
"concurrent_requests": 1024, // maximum simultaneous requests/files to process, 0 for unlimited
|
||
"source_path": "/var/spool/cgrates/ers/in", // read data from this path
|
||
"processed_path": "/var/spool/cgrates/ers/out", // move processed data here
|
||
"tenant": "", // tenant used by import
|
||
"timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB>
|
||
"ees_ids": [], // ids of exporters used for moving the processed event to EEs
|
||
"ees_success_ids": [], // ids of exporters used for moving the raw event to EEs
|
||
"ees_failed_ids": [], // ids of exporters used for moving the failed raw event to EEs
|
||
"filters": [], // limit parsing based on the filters
|
||
"flags": [], // flags to influence the event processing
|
||
"reconnects": -1, // number of retries in case of connection lost
|
||
"max_reconnect_interval": "5m", // time to wait in between reconnect attempts
|
||
"opts": {
|
||
// Partial
|
||
// "partialPath": "/", // the path were the partial events will be sent
|
||
"partialCacheAction": "*none", // the action that will be executed for the partial CSVs that are not matched<*none|*post_cdr|*dump_to_file>
|
||
"partialOrderField": "~*req.AnswerTime",// the field after what the events are order when merged
|
||
// "partialcsvFieldSeparator": "," // separator used when dumping the fields
|
||
|
||
// FileCSV
|
||
"csvRowLength": 0, // Number of fields from csv file
|
||
"csvFieldSeparator": ",", // separator used when reading the fields
|
||
"csvHeaderDefineChar": ":", // the starting character for header definition used in case of CSV files
|
||
// "csvLazyQuotes": false, // if a quote may appear in an unquoted field and a non-doubled quote may appear in a quoted field
|
||
|
||
// FileXML
|
||
// "xmlRootPath": "", // path towards one event in case of XML CDRs
|
||
|
||
// AMQP and AMQPv1
|
||
// "amqpQueueID": "cgrates_cdrs", // identifier for the primary queue where messages are consumed (0.9.1/1.0)
|
||
// "amqpUsername": "", // username for SASL PLAIN auth, exclusive to AMQP 1.0, often representing the policy name
|
||
// "amqpPassword": "", // password for authentication, exclusive to AMQP 1.0
|
||
// "amqpConsumerTag": "cgrates", // unique tag for the consumer, useful for message tracking and consumer management (0.9.1)
|
||
// "amqpExchange": "", // name of the primary exchange where messages will be published (0.9.1)
|
||
// "amqpExchangeType": "", // type of the primary exchange (direct, topic, fanout, headers) (0.9.1)
|
||
// "amqpRoutingKey": "", // key used for routing messages to the primary queue (0.9.1)
|
||
|
||
// Kafka
|
||
// "kafkaTopic": "cgrates", // the topic from were the events are read
|
||
// "kafkaBatchSize": 100, // limit on how many messages will be buffered before being sent
|
||
// "kafkaGroupID": "cgrates", // the group that reads the events
|
||
// "kafkaMaxWait": "1ms", // the maximum amount of time to wait for new data to come
|
||
// "kafkaTLS": false, // if set to true it will try to authenticate the server
|
||
// "kafkaCAPath": "",
|
||
// "kafkaSkipTLSVerify": false,
|
||
|
||
// SQL
|
||
// "sqlDBName": "cgrates", // the name of the database from were the events are read
|
||
// "sqlTableName": "cdrs", // the name of the table from were the events are read
|
||
// "sqlBatchSize: 0, // number of SQL rows that can be selected at a time. 0 or lower for unlimited
|
||
// "sqlDeleteIndexedFields": [], // list of fields to DELETE from the table
|
||
// "pgSSLMode": "disable", // the ssl mode for postgres db
|
||
|
||
// SQS and S3
|
||
// "awsRegion": "",
|
||
// "awsKey": "",
|
||
// "awsSecret": "",
|
||
// "awsToken": "",
|
||
|
||
// SQS
|
||
// "sqsQueueID": "cgrates_cdrs", // the queue id for SQS readers from were the events are read
|
||
|
||
// S3
|
||
// "s3BucketID": "cgrates_cdrs", // the bucket id for S3 readers from were the events are read
|
||
|
||
// nats
|
||
// "natsJetStream": false, // controls if the nats reader uses the JetStream
|
||
// "natsConsumerName": "cgrates", // in case of JetStream the name of the consumer
|
||
// "natsStreamName": "cdrs", // the name of the NATS JetStream stream from which the consumer will read messages
|
||
"natsSubject": "cgrates_cdrs", // the subject from were the events are read
|
||
// "natsQueueID": "", // the queue id the consumer listen to
|
||
// "natsJWTFile": "", // the path to the JWT file( can be the chained file or the user file)
|
||
// "natsSeedFile": "", // the path to the seed files( if the JWT file is mention this is used as seedFile for the JWT user mentioned above)
|
||
// "natsCertificateAuthority": "", // the path to a custom certificate authority file( used by tls)
|
||
// "natsClientCertificate": "", // the path to a client certificate( used by tls)
|
||
// "natsClientKey": "", // the path to a client key( used by tls)
|
||
// "natsJetStreamMaxWait": "5s" // the maximum amount of time to wait for a response
|
||
},
|
||
"fields":[ // import fields template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value
|
||
{"tag": "ToR", "path": "*cgreq.ToR", "type": "*variable", "value": "~*req.2", "mandatory": true},
|
||
{"tag": "OriginID", "path": "*cgreq.OriginID", "type": "*variable", "value": "~*req.3", "mandatory": true},
|
||
{"tag": "RequestType", "path": "*cgreq.RequestType", "type": "*variable", "value": "~*req.4", "mandatory": true},
|
||
{"tag": "Tenant", "path": "*cgreq.Tenant", "type": "*variable", "value": "~*req.6", "mandatory": true},
|
||
{"tag": "Category", "path": "*cgreq.Category", "type": "*variable", "value": "~*req.7", "mandatory": true},
|
||
{"tag": "Account", "path": "*cgreq.Account", "type": "*variable", "value": "~*req.8", "mandatory": true},
|
||
{"tag": "Subject", "path": "*cgreq.Subject", "type": "*variable", "value": "~*req.9", "mandatory": true},
|
||
{"tag": "Destination", "path": "*cgreq.Destination", "type": "*variable", "value": "~*req.10", "mandatory": true},
|
||
{"tag": "SetupTime", "path": "*cgreq.SetupTime", "type": "*variable", "value": "~*req.11", "mandatory": true},
|
||
{"tag": "AnswerTime", "path": "*cgreq.AnswerTime", "type": "*variable", "value": "~*req.12", "mandatory": true},
|
||
{"tag": "Usage", "path": "*cgreq.Usage", "type": "*variable", "value": "~*req.13", "mandatory": true}
|
||
],
|
||
"partial_commit_fields": [],
|
||
"cache_dump_fields": []
|
||
}
|
||
]
|
||
},
|
||
|
||
"efs": {
|
||
"enabled": false, // starts the EventReader service: <true|false>
|
||
"poster_attempts": 3, // number of attempts before considering post request failed (eg: *httpPost, CDR exports)
|
||
"failed_posts_dir": "/var/spool/cgrates/failed_posts", // directory path where we store failed requests
|
||
"failed_posts_ttl": "5s" // time to wait before writing the failed posts in a single file
|
||
},
|
||
|
||
"ees": {
|
||
"enabled": false, // starts the EventReader service: <true|false>
|
||
"attributes_conns":[], // RPC Connections IDs
|
||
"cache": {
|
||
"*fileCSV": {"limit": -1, "ttl": "5s", "static_ttl": false}
|
||
},
|
||
"exporters": [
|
||
{
|
||
"id": "*default", // identifier of the EventReader profile
|
||
"type": "*none", // exporter type
|
||
"export_path": "/var/spool/cgrates/ees", // path where the exported events will be placed
|
||
"failed_posts_dir": "/var/spool/cgrates/failed_posts", // directory path where we store failed requests
|
||
"concurrent_requests": 0, // maximum simultaneous requests to process, 0 for unlimited
|
||
"timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB>
|
||
"efs_conns": ["*internal"], // connID to efs service
|
||
"filters": [], // limit parsing based on the filters
|
||
"flags": [], // flags to influence the event processing
|
||
"attribute_ids": [], // select Attribute profiles instead of discovering them
|
||
"attribute_context": "", // context used to discover matching Attribute profiles
|
||
"synchronous": false, // block processing until export has a result
|
||
"blocker": false, // stops the processing of the following exporters
|
||
"attempts": 1, // export attempts
|
||
"opts": { // extra options for exporter
|
||
|
||
// CSV
|
||
// "csvFieldSeparator": ",", // separator used when reading the fields
|
||
|
||
|
||
// Elasticsearch options
|
||
// "elsCloud": true, // if true, use cloud ID deployment
|
||
// "elsApiKey": "", // base64-encoded token for auth; overrides username/password and service token
|
||
// "elsUsername": "", // username for HTTP Basic Authentication
|
||
// "elsPassword": "", // password for HTTP Basic Authentication
|
||
// "elsServiceToken": "", // service token for auth; if set, overrides username/password
|
||
// "elsCertificateFingerPrint": "", // SHA256 hex fingerprint given by Elasticsearch on first launch
|
||
// "elsCAPath": "", // path to CA certificate
|
||
// "elsDiscoverNodesOnStart": false, // discover nodes when initializing the client
|
||
// "elsDiscoverNodesInterval": "10s", // discover nodes periodically
|
||
// "elsEnableDebugLogger": "false", // enable the debug logging
|
||
// "elsLogger": "", // logger type <elsJson|elsColor|elsText>
|
||
// "elsCompressRequestBody": false, // enable compression on requests
|
||
// "elsCompressRequestBodyLevel": 0, // compression level <0(gzip)|9(best compression)|-2(HuffmanOnly)|1(best speed)>
|
||
// "elsRetryOnStatus": [502,503,504], // status codes for retry
|
||
// "elsMaxRetries": 3, // maximum number of retries
|
||
// "elsDisableRetry": false, // disable retry mechanism
|
||
|
||
// "elsIndex": "", // target elasticsearch index
|
||
// "elsRefresh": "false", // controls when changes become searchable <true|false|wait_for>
|
||
// "elsOpType": "index", // operation type <index|create>
|
||
// "elsPipeline": "", // name of the ingest pipeline to use
|
||
// "elsRouting": "", // custom routing value for document storage
|
||
// "elsTimeout": "1m", // maximum time to wait for operation
|
||
// "elsWaitForActiveShards": "1", // number of shard copies required before indexing (default: 1)
|
||
|
||
|
||
// SQL
|
||
// "sqlMaxIdleConns": 0, // SQLMaxIdleConns
|
||
// "sqlMaxOpenConns": 0, // SQLMaxOpenConns
|
||
// "sqlConnMaxLifetime": "0", // SQLConnMaxLifetime
|
||
// "sqlUpdateIndexedFields": [], // list of field names used for indexing UPDATE queries from the table
|
||
// "mysqlDSNParams": {}, // DSN params
|
||
|
||
|
||
// "sqlTableName":"cdrs", // the name of the table from where the events are exported
|
||
// "sqlDBName": "cgrates", // the name of the database from where the events are exported
|
||
// "pgSSLMode": "disable", // the postgresSSLMode for postgres
|
||
|
||
|
||
// Kafka
|
||
// "kafkaTopic": "cgrates", // the topic from where the events are exported
|
||
// "kafkaTLS": false, // if set to true it will try to authenticate the server
|
||
// "kafkaCAPath": "", // path to certificate authority pem file
|
||
// "kafkaSkipTLSVerify": false, // if set to true it will skip certificate verification
|
||
|
||
|
||
// AMQP
|
||
// "amqpQueueID": "cgrates_cdrs", // the queue id for AMQP exporters from were the events are exported
|
||
// "amqpRoutingKey": "", // RoutingKey, amqp 0.9.1 exclusive
|
||
// "amqpExchange": "", // Exchange, amqp 0.9.1 exclusive
|
||
// "amqpExchangeType": "", // ExchangeType, amqp 0.9.1 exclusive
|
||
// "amqpUsername": "", // amqp 1.0 exclusive, used for SASL PLAIN auth, usually represents the policy name
|
||
// "amqpPassword": "", // amqp 1.0 exclusive, used for SASL PLAIN auth, populated with one of its policy's keys
|
||
|
||
|
||
// SQS and S3
|
||
// "awsRegion": "", // AWSRegion
|
||
// "awsKey": "", // AWSKey
|
||
// "awsSecret": "", // AWSSecret
|
||
// "awsToken": "", // AWSToken
|
||
|
||
//SQS
|
||
// "sqsQueueID": "cgrates_cdrs", // the queue id for SQS exporters from were the events are exported
|
||
|
||
// S3
|
||
// "s3BucketID": "cgrates_cdrs", // the bucket id for S3 readers from where the events that are exported
|
||
// "s3FolderPath": "", // S3FolderPath
|
||
|
||
// Nats
|
||
// "natsJetStream": false, // controls if the nats poster uses the JetStream
|
||
// "natsSubject": "cgrates_cdrs", // the subject were the events are exported
|
||
// "natsJWTFile": "", // the path to the JWT file( can be the chained file or the user file)
|
||
// "natsSeedFile": "", // the path to the seed files( if the JWT file is mention this is used as seedFile for the JWT user mentioned above)
|
||
// "natsCertificateAuthority": "", // the path to a custom certificate authority file( used by tls)
|
||
// "natsClientCertificate": "", // the path to a client certificate( used by tls)
|
||
// "natsClientKey": "", // the path to a client key( used by tls)
|
||
// "natsJetStreamMaxWait": "5s", // the maximum amount of time to wait for a response
|
||
|
||
//RPC
|
||
// "rpcCodec": "", // for compression, encoding and decoding <internalRPC | BIRPC | JSON/HTTP/GOB>
|
||
// "serviceMethod": "", // the method that should be called trough RPC
|
||
// "keyPath": "" , // path to server key
|
||
// "certPath": "", // path to client certificate
|
||
// "caPath": "", // path to CA certificate
|
||
// "tls": false,
|
||
// "connIDs": [], // connections for connManager to this exporter
|
||
// "rpcConnTimeout" : "1s", // connection unsuccesfull on timeout
|
||
// "rpcReplyTimeout":"2s", // connection down at replies if taking longer that this value
|
||
// "rpcAPIOpts": {} // opts that will be passed within APIOpts
|
||
},
|
||
"fields":[] // import fields template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value
|
||
}
|
||
]
|
||
},
|
||
|
||
|
||
"sessions": {
|
||
"enabled": false, // starts the session service: <true|false>
|
||
"listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests
|
||
"listen_bigob": "", // address where to listen for bidirectional GOB-RPC requests
|
||
"chargers_conns": [], // connections to ChargerS for session forking <""|*internal|$rpc_conns_id>
|
||
"cdrs_conns": [], // connections to CDRs for CDR posting <""|*internal|$rpc_conns_id>
|
||
"resources_conns": [], // connections to ResourceS for resources monitoring <""|*internal|$rpc_conns_id>
|
||
"ips_conns": [], // connections to IPs for monitoring ip usage <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS for reporting session events <""|*internal|$rpc_conns_id>
|
||
"stats_conns": [], // connections to StatS for reporting session events <""|*internal|$rpc_conns_id>
|
||
"routes_conns": [], // connections to RouteS for querying routes for event <""|*internal|$rpc_conns_id>
|
||
"attributes_conns": [], // connections to AttributeS for altering event fields <""|*internal|$rpc_conns_id>
|
||
"replication_conns": [], // replicate sessions towards these session services
|
||
"debit_interval": "0s", // interval to perform debits on.
|
||
"store_session_costs": false, // enable storing of the session costs within CDRs
|
||
"default_usage":{ // the usage if the event is missing the usage field
|
||
"*any": "3h",
|
||
"*voice": "3h",
|
||
"*data": "1048576",
|
||
"*sms": "1"
|
||
},
|
||
"session_ttl": "0s", // time after a session with no updates is terminated, not defined by default
|
||
//"session_ttl_max_delay": "", // activates session_ttl randomization and limits the maximum possible delay
|
||
//"session_ttl_last_used": "", // tweak LastUsed for sessions timing-out, not defined by default
|
||
//"session_ttl_usage": "", // tweak Usage for sessions timing-out, not defined by default
|
||
//"session_last_usage": "", // tweak LastUsage for session timing-out, not defined by default
|
||
"session_indexes": [], // index sessions based on these fields for GetActiveSessions API
|
||
"client_protocol": 1.0, // version of protocol to use when acting as JSON-PRC client <"0","1.0">
|
||
"channel_sync_interval": "0", // sync channels to detect stale sessions (0 to disable)
|
||
"terminate_attempts": 5, // attempts to get the session before terminating it
|
||
"alterable_fields": [], // the session fields that can be updated
|
||
//"min_dur_low_balance": "5s", // threshold which will trigger low balance warnings for prepaid calls (needs to be lower than debit_interval)
|
||
"stir": {
|
||
"allowed_attest": ["*any"], // the default attest for stir/shaken authentication <*any|A|B|C>
|
||
"payload_maxduration": "-1", // the duration that stir header is valid after it was created
|
||
"default_attest": "A", // the default attest level if not mentioned in API
|
||
"publickey_path": "", // the path to the public key
|
||
"privatekey_path": "", // the path to the private key
|
||
},
|
||
"actions_conns": [], // connections to SchedulerS in case of *dynaprepaid request
|
||
"rates_conns": [], // connections to RateS
|
||
"accounts_conns": [], // connections to AccountS
|
||
"opts": {
|
||
// "*accounts": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*attributes": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*cdrs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*chargers": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*resources": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*ips": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*routes": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*stats": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*thresholds": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*initiate": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*update": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*terminate": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*message": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*attributesDerivedReply": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*blockerError": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*cdrsDerivedReply": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*resourcesAuthorize": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*resourcesAllocate": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*resourcesRelease": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*resourcesDerivedReply": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*ipsAuthorize": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*ipsAllocate": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*ipsRelease": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*routesDerivedReply": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*statsDerivedReply": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*thresholdsDerivedReply": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*maxUsage": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*forceDuration": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*ttl": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*chargeable": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*ttlLastUsage": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*ttlLastUsed": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*debitInterval": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*ttlMaxDelay": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*ttlUsage": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*originID": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*accountsForceUsage": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"asterisk_agent": {
|
||
"enabled": false, // starts the Asterisk agent: <true|false>
|
||
"sessions_conns": ["*birpc_internal"],
|
||
"create_cdr": false, // create CDR out of events and sends it to CDRS component
|
||
"asterisk_conns":[ // instantiate connections to multiple Asterisk servers
|
||
{
|
||
"address": "127.0.0.1:8088",
|
||
"user": "cgrates",
|
||
"password": "CGRateS.org",
|
||
"connect_attempts": 3,
|
||
"reconnects": 5,
|
||
"max_reconnect_interval": ""
|
||
}
|
||
]
|
||
},
|
||
|
||
|
||
"freeswitch_agent": {
|
||
"enabled": false, // starts the FreeSWITCH agent: <true|false>
|
||
"sessions_conns": ["*birpc_internal"],
|
||
"subscribe_park": true, // subscribe via fsock to receive park events
|
||
"create_cdr": false, // creates CDR out of events and sends them to CDRS component
|
||
"extra_fields": [], // extra fields to store in auth/CDRs when creating them
|
||
"low_balance_ann_file": "", // file to be played when low balance is reached for prepaid calls
|
||
"empty_balance_context": "", // if defined, prepaid calls will be transferred to this context on empty balance
|
||
"empty_balance_ann_file": "", // file to be played before disconnecting prepaid calls on empty balance (applies only if no context defined)
|
||
"max_wait_connection": "2s", // maximum duration to wait for a connection to be retrieved from the pool
|
||
"active_session_delimiter": ",", // delimiter for 'show channels' responses and requests
|
||
"event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers
|
||
{
|
||
"address": "127.0.0.1:8021", // FreeSWITCH server address and port
|
||
"password": "ClueCon", // authentication password for FreeSWITCH
|
||
"reconnects": 5, // max reconnect attempts before giving up ("-1" for no limit)
|
||
"max_reconnect_interval": "", // max time between reconnects ("0" for no limit)
|
||
"reply_timeout": "1m", // max wait time for FreeSWITCH replies
|
||
"alias": ""
|
||
}
|
||
]
|
||
},
|
||
|
||
|
||
"kamailio_agent": {
|
||
"enabled": false, // starts Kamailio agent: <true|false>
|
||
"sessions_conns": ["*birpc_internal"],
|
||
"create_cdr": false, // create CDR out of events and sends them to CDRS component
|
||
"timezone": "", // timezone of the Kamailio server
|
||
"evapi_conns":[ // instantiate connections to multiple Kamailio servers
|
||
{
|
||
"address": "127.0.0.1:8448",
|
||
"reconnects": 5,
|
||
"max_reconnect_interval": ""
|
||
}
|
||
]
|
||
},
|
||
|
||
|
||
"diameter_agent": {
|
||
"enabled": false, // enables the diameter agent: <true|false>
|
||
"listen": "127.0.0.1:3868", // address where to listen for diameter requests <x.y.z.y/x1.y1.z1.y1:1234>
|
||
"listen_net": "tcp", // transport type for diameter <tcp|sctp>
|
||
"dictionaries_path": "/usr/share/cgrates/diameter/dict/", // path towards directory holding additional dictionaries to load
|
||
// "ce_applications": [], // list of applications in dictionaries wanted to be included in Capability-Exchange. Needed either "app name", "app ID", or "vendor name.app name/ID"
|
||
"sessions_conns": ["*birpc_internal"],
|
||
"stats_conns": [], // connections to StatS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"origin_host": "CGR-DA", // diameter Origin-Host AVP used in replies
|
||
"origin_realm": "cgrates.org", // diameter Origin-Realm AVP used in replies
|
||
"vendor_id": 0, // diameter Vendor-Id AVP used in replies
|
||
"product_name": "CGRateS", // diameter Product-Name AVP used in replies
|
||
"synced_conn_requests": false, // process one request at the time per connection
|
||
"asr_template": "", // enable AbortSession message being sent to client on DisconnectSession
|
||
"rar_template": "", // template used to build the Re-Auth-Request
|
||
"forced_disconnect": "*none", // the request to send to diameter on DisconnectSession <*none|*asr|*rar>
|
||
"request_processors": [] // list of processors to be applied to diameter messages
|
||
},
|
||
|
||
|
||
"radius_agent": {
|
||
"enabled": false, // enables the radius agent: <true|false>
|
||
"listeners":[
|
||
{
|
||
"network": "udp", // network to listen on <udp|tcp>
|
||
"auth_address": "127.0.0.1:1812", // address where to listen for radius authentication requests <x.y.z.y:1234>
|
||
"acct_address": "127.0.0.1:1813" // address where to listen for radius accounting requests <x.y.z.y:1234>
|
||
}
|
||
],
|
||
"client_secrets": { // hash containing secrets for clients connecting here <*default|$client_ip>
|
||
"*default": "CGRateS.org"
|
||
},
|
||
"client_dictionaries": { // per client path towards directory holding additional dictionaries to load (extra to RFC)
|
||
"*default": [ // key represents the client IP or catch-all <*default|$client_ip>
|
||
"/usr/share/cgrates/radius/dict/"
|
||
]
|
||
},
|
||
"client_da_addresses": { // configuration for clients capable of handling Dynamic Authorization (CoA/DM) requests.
|
||
// "nasIdentifier": { // identifier for the NAS, typically the host from the initial RADIUS packet.
|
||
// "transport": "udp", // transport protocol for Dynamic Authorization requests, defaults to UDP.
|
||
// "host": "", // optionally specify an alternative host for DA requests. Defaults to the NAS identifier if empty.
|
||
// "port": 3799, // port for Dynamic Authorization requests, default is 3799.
|
||
// "flags": [] // additional options, currently supports *log for logging DA requests before sending.
|
||
// }
|
||
},
|
||
"requests_cache_key": "", // used to choose the cache key of a RADIUS packet <RSRParsers>
|
||
"sessions_conns": ["*internal"],
|
||
"stats_conns": [], // connections to StatS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"dmr_template": "*dmr", // template used to build the Disconnect-Request packet
|
||
"coa_template": "*coa", // template used to build the CoA-Request packet
|
||
"request_processors": [] // request processors to be applied to Radius messages
|
||
},
|
||
|
||
|
||
"http_agent": [], // HTTP Agents, ie towards cnc.to MVNE platform
|
||
|
||
|
||
"dns_agent": {
|
||
"enabled": false, // enables the DNS agent: <true|false>
|
||
"listeners":[
|
||
{
|
||
"address": "127.0.0.1:53", // address where to listen for DNS requests <x.y.z.y:1234>
|
||
"network": "udp" // network to listen on <udp|tcp|tcp-tls>
|
||
}
|
||
],
|
||
"sessions_conns": ["*internal"],
|
||
"stats_conns": [], // connections to StatS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"timezone": "", // timezone of the events if not specified <UTC|Local|$IANA_TZ_DB>
|
||
"request_processors": [] // request processors to be applied to DNS messages
|
||
},
|
||
|
||
|
||
"prometheus_agent": {
|
||
"enabled": false, // enables the prometheus agent: <true|false>
|
||
"path": "/prometheus", // endpoint for prometheus metrics
|
||
"caches_conns": [], // connections to CacheS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"cache_ids": [], // cache partition IDs to collect statistics for, empty for all partitions
|
||
"cores_conns": [], // connections to CoreS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"stats_conns": [], // connections to StatS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"stat_queue_ids": [] // StatQueue IDs to collect metrics from <[tenant]:ID>
|
||
},
|
||
|
||
|
||
"attributes": {
|
||
"enabled": false, // starts attribute service: <true|false>
|
||
"stats_conns": [], // connections to StatS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"resources_conns": [], // connections to ResourceS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"accounts_conns": [], // connections to AccountS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"opts":{
|
||
// "*profileIDs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": []
|
||
// }
|
||
// ],
|
||
// "*processRuns": [ // number of run loops when processing event
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "1"
|
||
// }
|
||
// ],
|
||
// "*profileRuns": [ // number of runs a profile will process during the event
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 0
|
||
// }
|
||
// ],
|
||
// "*profileIgnoreFilters": [ // ignore the filters for attributeIDs
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"chargers": {
|
||
"enabled": false, // starts charger service: <true|false>
|
||
"attributes_conns": [], // connections to AttributeS for event fields altering <""|127.0.0.1:2013>
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
},
|
||
|
||
|
||
"resources": {
|
||
"enabled": false, // starts ResourceLimiter service: <true|false>
|
||
"store_interval": "", // dump cache regularly to db, 0 - dump at start/shutdown: <""|$dur>
|
||
"thresholds_conns": [], // connections to ThresholdS for resource reporting, empty to disable thresholds functionality: <""|*internal|$rpc_conns_id>
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"opts":{
|
||
// "*usageID": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*usageTTL": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "72h"
|
||
// }
|
||
// ],
|
||
// "*units": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 1
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
"ips": {
|
||
"enabled": false, // enables the IPs service: <true|false>
|
||
"store_interval": "", // dump cache regularly to db, 0 - dump at start/shutdown: <""|$dur>
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"opts":{
|
||
// "*allocationID": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*ttl": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "72h"
|
||
// }
|
||
// ],
|
||
// "*units": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 1
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"stats": {
|
||
"enabled": false, // starts Stat service: <true|false>
|
||
"store_interval": "", // dump cache regularly to db, 0 - dump at start/shutdown: <""|$dur>
|
||
"store_uncompressed_limit": 0, // used to compress data
|
||
"thresholds_conns": [], // connections to ThresholdS for StatUpdates, empty to disable thresholds functionality: <""|*internal|$rpc_conns_id>
|
||
"ees_conns": [], // connections to EEs for StatUpdates, empty to disable export functionality: <""|*internal|$rpc_conns_id>
|
||
"ees_exporter_ids": [], // list of EventExporter profiles to use for real-time StatUpdate exports
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"opts": {
|
||
// "*profileIDs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": []
|
||
// }
|
||
// ],
|
||
// "*profileIgnoreFilters": [ // ignore the filters for statIDs
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*roundingDecimals": [ // ignore the filters for statIDs
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 5
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"thresholds": {
|
||
"enabled": false, // starts ThresholdS service: <true|false>
|
||
"store_interval": "", // dump cache regularly to db, 0 - dump at start/shutdown: <""|$dur>
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"actions_conns": [], // connections to ActionS to execute the actions
|
||
"ees_conns": [], // connections to EEs to sent threshold events, empty to disable export functionality: <""|*internal|$rpc_conns_id>
|
||
"ees_exporter_ids": [], // list of EventExporter profiles to use for real-time threshold exports
|
||
"opts":{
|
||
// "*thresholdsIDs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": []
|
||
// }
|
||
// ],
|
||
// "*profileIgnoreFilters": [ // ignore the filters for thresholdIDs
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"trends":{
|
||
"enabled": false, // starts TrendS service: <true|false>.
|
||
"store_interval": "", // dump cache regularly to db, 0 - dump at start/shutdown: <""|$dur>
|
||
"store_uncompressed_limit": 0, // used to compress metrics
|
||
"stats_conns": [], // connections to StatS ,empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"scheduled_ids": {}, // autoload these trend ids on start
|
||
"thresholds_conns": [], // connections to ThresholdS ,empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"ees_conns": [], // connections to EEs for trendSummary, empty to disable export functionality: <""|*internal|$rpc_conns_id>
|
||
"ees_exporter_ids": [] // list of EventExporter profiles to use for real-time trendSummary exports
|
||
},
|
||
|
||
|
||
"rankings":{
|
||
"enabled": false, // starts RankingS service: <true|false>.
|
||
"store_interval": "", // dump cache regularly to db, 0 - dump at start/shutdown: <""|$dur>
|
||
"stats_conns": [], // connections to StatS ,empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"scheduled_ids": {}, // autoload these ranking ids on start
|
||
"thresholds_conns": [], // connections to ThresholdS for rankingSummary reporting, empty to disable thresholds functionality: <""|*internal|$rpc_conns_id>
|
||
"ees_conns": [], // connections to EEs for rankingSummary events, empty to disable export functionality: <""|*internal|$rpc_conns_id>
|
||
"ees_exporter_ids": [] // list of EventExporter profiles to use for real-time rankingSummary exports
|
||
},
|
||
|
||
|
||
"routes": {
|
||
"enabled": false, // starts RouteS service: <true|false>.
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"attributes_conns": [], // connections to AttributeS for altering events before route queries: <""|*internal|$rpc_conns_id>
|
||
"resources_conns": [], // connections to ResourceS for *res sorting, empty to disable functionality: <""|*internal|$rpc_conns_id>
|
||
"stats_conns": [], // connections to StatS for *stats sorting, empty to disable stats functionality: <""|*internal|$rpc_conns_id>
|
||
"rates_conns": [], // connections to RateS
|
||
"accounts_conns": [], // connections to AccountS
|
||
"default_ratio":1, // default ratio used in case of *load strategy
|
||
"opts":{
|
||
// "*context": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "*routes"
|
||
// }
|
||
// ],
|
||
// "*profileCount": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "1"
|
||
// }
|
||
// ],
|
||
// "*ignoreErrors": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ],
|
||
// "*maxCost": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": ""
|
||
// }
|
||
// ],
|
||
// "*limit": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 1
|
||
// }
|
||
// ],
|
||
// "*offset": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 1
|
||
// }
|
||
// ],
|
||
// "*maxItems": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 1
|
||
// }
|
||
// ],
|
||
// "*usage": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "1m"
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"loaders": [
|
||
{
|
||
"id": "*default", // identifier of the Loader
|
||
"enabled": false, // starts as service: <true|false>.
|
||
"tenant": "", // tenant used in filterS.Pass
|
||
"run_delay": "0", // sleep interval in seconds between consecutive runs, -1 to use automation via inotify or 0 to disable running all together
|
||
"lockfile_path": ".cgr.lck", // Filename containing concurrency lock in case of delayed processing
|
||
"caches_conns": ["*internal"],
|
||
"field_separator": ",", // separator used in case of csv files
|
||
"tp_in_dir": "/var/spool/cgrates/loader/in", // absolute path towards the directory where the TPs are stored
|
||
"tp_out_dir": "/var/spool/cgrates/loader/out", // absolute path towards the directory where processed TPs will be moved
|
||
"action": "*store", // what should the loader do<*store|*parse|*remove|*dryRun>
|
||
"opts": {
|
||
// "*cache": "*reload",
|
||
"*withIndex": true,
|
||
// "*forceLock": false,
|
||
// "*stopOnError": false
|
||
},
|
||
"cache":{
|
||
"*filters":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*attributes":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*resources":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*ips":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*stats":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*thresholds":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*routes":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*chargers":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*rate_profiles":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*action_profiles":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*accounts":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*trends":{"limit": -1, "ttl": "5s", "static_ttl": false},
|
||
"*rankings":{"limit": -1, "ttl": "5s", "static_ttl": false}
|
||
},
|
||
"data":[ // data profiles to load
|
||
{
|
||
"type": "*filters", // data source type
|
||
"file_name": "Filters.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "Type", "path": "Rules.Type", "type": "*variable", "value": "~*req.2", "new_branch":true},
|
||
{"tag": "Element", "path": "Rules.Element", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Values", "path": "Rules.Values", "type": "*variable", "value": "~*req.4"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*attributes", // data source type
|
||
"file_name": "Attributes.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "TenantID", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ProfileID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "AttributeFilterIDs", "path": "Attributes.FilterIDs", "type": "*variable", "value": "~*req.5","new_branch":true},
|
||
{"tag": "AttributeBlockers", "path": "Attributes.Blockers", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "Path", "path": "Attributes.Path", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "Type", "path": "Attributes.Type", "type": "*variable", "value": "~*req.8"},
|
||
{"tag": "Value", "path": "Attributes.Value", "type": "*variable", "value": "~*req.9"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*resources", // data source type
|
||
"file_name": "Resources.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "TTL", "path": "UsageTTL", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "Limit", "path": "Limit", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "AllocationMessage", "path": "AllocationMessage", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "Blocker", "path": "Blocker", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "Stored", "path": "Stored", "type": "*variable", "value": "~*req.8"},
|
||
{"tag": "ThresholdIDs", "path": "ThresholdIDs", "type": "*variable", "value": "~*req.9"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*ips", // data source type
|
||
"file_name": "IPs.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "TTL", "path": "TTL", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "Stored", "path": "Stored", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "PoolID", "path": "Pools.ID", "type": "*variable", "value": "~*req.6","new_branch":true},
|
||
{"tag": "PoolFilterIDs", "path": "Pools.FilterIDs", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "PoolType", "path": "Pools.Type", "type": "*variable", "value": "~*req.8"},
|
||
{"tag": "PoolRange", "path": "Pools.Range", "type": "*variable", "value": "~*req.9"},
|
||
{"tag": "PoolStrategy", "path": "Pools.Strategy", "type": "*variable", "value": "~*req.10"},
|
||
{"tag": "PoolMessage", "path": "Pools.Message", "type": "*variable", "value": "~*req.11"},
|
||
{"tag": "PoolWeights", "path": "Pools.Weights", "type": "*variable", "value": "~*req.12"},
|
||
{"tag": "PoolBlockers", "path": "Pools.Blockers", "type": "*variable", "value": "~*req.13"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*stats", // data source type
|
||
"file_name": "Stats.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "QueueLength", "path": "QueueLength", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "TTL", "path": "TTL", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "MinItems", "path": "MinItems", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "Stored", "path": "Stored", "type": "*variable", "value": "~*req.8"},
|
||
{"tag": "ThresholdIDs", "path": "ThresholdIDs", "type": "*variable", "value": "~*req.9"},
|
||
{"tag": "MetricIDs", "path": "Metrics.MetricID", "type": "*variable", "value": "~*req.10","new_branch":true},
|
||
{"tag": "MetricFilterIDs", "path": "Metrics.FilterIDs", "type": "*variable", "value": "~*req.11"},
|
||
{"tag": "MetricBlockers", "path": "Metrics.Blockers", "type": "*variable", "value": "~*req.12"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*thresholds", // data source type
|
||
"file_name": "Thresholds.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "MaxHits", "path": "MaxHits", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "MinHits", "path": "MinHits", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "MinSleep", "path": "MinSleep", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "Blocker", "path": "Blocker", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "ActionProfileIDs", "path": "ActionProfileIDs", "type": "*variable", "value": "~*req.8"},
|
||
{"tag": "Async", "path": "Async", "type": "*variable", "value": "~*req.9"} ,
|
||
{"tag": "EeIDs", "path": "EeIDs", "type": "*variable", "value": "~*req.10"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*trends", // data source type
|
||
"file_name": "Trends.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "Schedule", "path": "Schedule", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "StatID", "path": "StatID", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Metrics", "path": "Metrics", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "TTL", "path": "TTL", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "QueueLength", "path": "QueueLength", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "MinItems", "path": "MinItems", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "CorrelationType", "path": "CorrelationType", "type": "*variable", "value": "~*req.8"},
|
||
{"tag": "Tolerance", "path": "Tolerance", "type": "*variable", "value": "~*req.9"},
|
||
{"tag": "Stored", "path": "Stored", "type": "*variable", "value": "~*req.10"},
|
||
{"tag": "ThresholdIDs", "path": "ThresholdIDs", "type": "*variable", "value": "~*req.11"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*rankings", // data source type
|
||
"file_name": "Rankings.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "Schedule", "path": "Schedule", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "StatIDs", "path": "StatIDs", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "MetricIDs", "path": "MetricIDs", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "Sorting", "path": "Sorting", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "SortingParameters", "path": "SortingParameters", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "Stored", "path": "Stored", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "ThresholdIDs", "path": "ThresholdIDs", "type": "*variable", "value": "~*req.8"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*routes", // data source type
|
||
"file_name": "Routes.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "Sorting", "path": "Sorting", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "SortingParameters", "path": "SortingParameters", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "RouteID", "path": "Routes.ID", "type": "*variable", "value": "~*req.7","new_branch":true},
|
||
{"tag": "RouteFilterIDs", "path": "Routes.FilterIDs", "type": "*variable", "value": "~*req.8"},
|
||
{"tag": "RouteAccountIDs", "path": "Routes.AccountIDs", "type": "*variable", "value": "~*req.9"},
|
||
{"tag": "RouteRateProfileIDs", "path": "Routes.RateProfileIDs", "type": "*variable", "value": "~*req.10"},
|
||
{"tag": "RouteResourceIDs", "path": "Routes.ResourceIDs", "type": "*variable", "value": "~*req.11"},
|
||
{"tag": "RouteStatIDs", "path": "Routes.StatIDs", "type": "*variable", "value": "~*req.12"},
|
||
{"tag": "RouteWeights", "path": "Routes.Weights", "type": "*variable", "value": "~*req.13"},
|
||
{"tag": "RouteBlockers", "path": "Routes.Blockers", "type": "*variable", "value": "~*req.14"},
|
||
{"tag": "RouteParameters", "path": "Routes.RouteParameters", "type": "*variable", "value": "~*req.15"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*chargers", // data source type
|
||
"file_name": "Chargers.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "RunID", "path": "RunID", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "AttributeIDs", "path": "AttributeIDs", "type": "*variable", "value": "~*req.6"}
|
||
]
|
||
},
|
||
{
|
||
"type": "*rate_profiles", // data source type
|
||
"file_name": "Rates.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "MinCost", "path": "MinCost", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "MaxCost", "path": "MaxCost", "type": "*variable", "value": "~*req.5"},
|
||
{"tag": "MaxCostStrategy", "path": "MaxCostStrategy", "type": "*variable", "value": "~*req.6"},
|
||
// {"tag": "RateID", "path": "RateID", "type": "*variable", "value": "~*req.7"},
|
||
{"tag": "RateFilterIDs", "path": "Rates[<~*req.7>].FilterIDs", "type": "*variable", "value": "~*req.8", "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateActivationTimes", "path": "Rates[<~*req.7>].ActivationTimes", "type": "*variable", "value": "~*req.9", "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateWeights", "path": "Rates[<~*req.7>].Weights", "type": "*variable", "value": "~*req.10", "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateBlocker", "path": "Rates[<~*req.7>].Blocker", "type": "*variable", "value": "~*req.11", "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateIntervalStart", "path": "Rates[<~*req.7>].IntervalRates.IntervalStart", "type": "*variable", "value": "~*req.12","new_branch":true, "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateFixedFee", "path": "Rates[<~*req.7>].IntervalRates.FixedFee", "type": "*variable", "value": "~*req.13", "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateRecurrentFee", "path": "Rates[<~*req.7>].IntervalRates.RecurrentFee", "type": "*variable", "value": "~*req.14", "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateUnit", "path": "Rates[<~*req.7>].IntervalRates.Unit", "type": "*variable", "value": "~*req.15", "filters": ["*notempty:~*req.7:"]},
|
||
{"tag": "RateIncrement", "path": "Rates[<~*req.7>].IntervalRates.Increment", "type": "*variable", "value": "~*req.16", "filters": ["*notempty:~*req.7:"]}
|
||
]
|
||
},
|
||
{
|
||
"type": "*action_profiles", // data source type
|
||
"file_name": "Actions.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "Schedule", "path": "Schedule", "type": "*variable", "value": "~*req.5"},
|
||
// {"tag": "TargetType", "path": "TargetType", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "TargetIDs", "path": "Targets[<~*req.6>]", "type": "*variable", "value": "~*req.7"},
|
||
// {"tag": "ActionID", "path": "Actions.ID", "type": "*variable", "value": "~*req.8","new_branch":true},
|
||
{"tag": "ActionFilterIDs", "path": "Actions[<~*req.8>].FilterIDs", "type": "*variable", "value": "~*req.9", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionTTL", "path": "Actions[<~*req.8>].TTL", "type": "*variable", "value": "~*req.10", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionType", "path": "Actions[<~*req.8>].Type", "type": "*variable", "value": "~*req.11", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionOpts", "path": "Actions[<~*req.8>].Opts", "type": "*variable", "value": "~*req.12", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionWeights", "path": "Actions[<~*req.8>].Weights", "type": "*variable", "value": "~*req.13", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionBlockers", "path": "Actions[<~*req.8>].Blockers", "type": "*variable", "value": "~*req.14", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionDiktatsID", "path": "Actions[<~*req.8>].Diktats.ID", "type": "*variable", "value": "~*req.15","new_branch":true, "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionDiktatsFilterIDs", "path": "Actions[<~*req.8>].Diktats.FilterIDs", "type": "*variable", "value": "~*req.16", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionDiktatsOpts", "path": "Actions[<~*req.8>].Diktats.Opts", "type": "*variable", "value": "~*req.17", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionDiktatsWeights", "path": "Actions[<~*req.8>].Diktats.Weights", "type": "*variable", "value": "~*req.18", "filters": ["*notempty:~*req.8:"]},
|
||
{"tag": "ActionDiktatsBlockers", "path": "Actions[<~*req.8>].Diktats.Blockers", "type": "*variable", "value": "~*req.19", "filters": ["*notempty:~*req.8:"]},
|
||
]
|
||
},
|
||
{
|
||
"type": "*accounts", // data source type
|
||
"file_name": "Accounts.csv", // file name in the tp_in_dir
|
||
"fields": [
|
||
{"tag": "Tenant", "path": "Tenant", "type": "*variable", "value": "~*req.0", "mandatory": true},
|
||
{"tag": "ID", "path": "ID", "type": "*variable", "value": "~*req.1", "mandatory": true},
|
||
{"tag": "FilterIDs", "path": "FilterIDs", "type": "*variable", "value": "~*req.2"},
|
||
{"tag": "Weights", "path": "Weights", "type": "*variable", "value": "~*req.3"},
|
||
{"tag": "Blockers", "path": "Blockers", "type": "*variable", "value": "~*req.4"},
|
||
{"tag": "Opts", "path": "Opts", "type": "*variable", "value": "~*req.5"},
|
||
// {"tag": "BalanceID", "path": "Balances.ID", "type": "*variable", "value": "~*req.6"},
|
||
{"tag": "BalanceFilterIDs", "path": "Balances[<~*req.6>].FilterIDs", "type": "*variable", "value": "~*req.7","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceWeights", "path": "Balances[<~*req.6>].Weights", "type": "*variable", "value": "~*req.8","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceBlockers", "path": "Balances[<~*req.6>].Blockers", "type": "*variable", "value": "~*req.9","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceType", "path": "Balances[<~*req.6>].Type", "type": "*variable", "value": "~*req.10","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceUnits", "path": "Balances[<~*req.6>].Units", "type": "*variable", "value": "~*req.11","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceUnitFactors", "path": "Balances[<~*req.6>].UnitFactors", "type": "*variable", "value": "~*req.12","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceOpts", "path": "Balances[<~*req.6>].Opts", "type": "*variable", "value": "~*req.13","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceCostIncrements", "path": "Balances[<~*req.6>].CostIncrements", "type": "*variable", "value": "~*req.14","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceAttributeIDs", "path": "Balances[<~*req.6>].AttributeIDs", "type": "*variable", "value": "~*req.15","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "BalanceRateProfileIDs", "path": "Balances[<~*req.6>].RateProfileIDs", "type": "*variable", "value": "~*req.16","filters": ["*notempty:~*req.6:"]},
|
||
{"tag": "ThresholdIDs", "path": "ThresholdIDs", "type": "*variable", "value": "~*req.17"}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
],
|
||
|
||
|
||
"suretax": {
|
||
"url": "", // API url
|
||
"client_number": "", // client number, provided by SureTax
|
||
"validation_key": "", // validation key provided by SureTax
|
||
"business_unit": "", // client’s Business Unit
|
||
"timezone": "Local", // convert the time of the events to this timezone before sending request out <UTC|Local|$IANA_TZ_DB>
|
||
"include_local_cost": false, // sum local calculated cost with tax one in final cost
|
||
"return_file_code": "0", // default or Quote purposes <0|Q>
|
||
"response_group": "03", // determines how taxes are grouped for the response <03|13>
|
||
"response_type": "D4", // determines the granularity of taxes and (optionally) the decimal precision for the tax calculations and amounts in the response
|
||
"regulatory_code": "03", // provider type
|
||
"client_tracking": "~*opts.*originID", // template extracting client information out of StoredCdr; <RSRParsers>
|
||
"customer_number": "~*req.Subject", // template extracting customer number out of StoredCdr; <RSRParsers>
|
||
"orig_number": "~*req.Subject", // template extracting origination number out of StoredCdr; <RSRParsers>
|
||
"term_number": "~*req.Destination", // template extracting termination number out of StoredCdr; <RSRParsers>
|
||
"bill_to_number": "", // template extracting billed to number out of StoredCdr; <RSRParsers>
|
||
"zipcode": "", // template extracting billing zip code out of StoredCdr; <RSRParsers>
|
||
"plus4": "", // template extracting billing zip code extension out of StoredCdr; <RSRParsers>
|
||
"p2pzipcode": "", // template extracting secondary zip code out of StoredCdr; <RSRParsers>
|
||
"p2pplus4": "", // template extracting secondary zip code extension out of StoredCdr; <RSRParsers>
|
||
"units": "1", // template extracting number of “lines” or unique charges contained within the revenue out of StoredCdr; <RSRParsers>
|
||
"unit_type": "00", // template extracting number of unique access lines out of StoredCdr; <RSRParsers>
|
||
"tax_included": "0", // template extracting tax included in revenue out of StoredCdr; <RSRParsers>
|
||
"tax_situs_rule": "04", // template extracting tax situs rule out of StoredCdr; <RSRParsers>
|
||
"trans_type_code": "010101", // template extracting transaction type indicator out of StoredCdr; <RSRParsers>
|
||
"sales_type_code": "R", // template extracting sales type code out of StoredCdr; <RSRParsers>
|
||
"tax_exemption_code_list": "", // template extracting tax exemption code list out of StoredCdr; <RSRParsers>
|
||
},
|
||
|
||
|
||
"loader": { // loader for tariff plans out of .csv files
|
||
"tpid": "", // tariff plan identificator
|
||
"data_path": "./", // path towards tariff plan files
|
||
"disable_reverse": false, // disable reverse computing
|
||
"field_separator": ",", // separator used in case of csv files
|
||
"caches_conns":["*localhost"],
|
||
"actions_conns": ["*localhost"],
|
||
"gapi_credentials": ".gapi/credentials.json", // the path to the credentials for google API or the credentials.json file content
|
||
"gapi_token": ".gapi/token.json" // the path to the token for google API or the token.json file content
|
||
},
|
||
|
||
|
||
"migrator": {
|
||
"users_filters":[],
|
||
"fromItems":{
|
||
"*accounts": {"dbConn": "*default"},
|
||
"*statqueue_profiles": {"dbConn": "*default"},
|
||
"*filters": {"dbConn": "*default"},
|
||
"*charger_profiles": {"dbConn": "*default"},
|
||
"*load_ids": {"dbConn": "*default"},
|
||
"*versions": {"dbConn": "*default"}
|
||
},
|
||
"out_db_opts":{
|
||
"redisMaxConns": 10, // the connection pool size
|
||
"redisConnectAttempts": 20, // the maximum amount of dial attempts
|
||
"redisSentinel": "",
|
||
"redisCluster": false,
|
||
"redisClusterSync": "5s",
|
||
"redisClusterOndownDelay": "0",
|
||
"redisConnectTimeout": "0", // the amount of wait time until timeout for a connection attempt
|
||
"redisReadTimeout": "0", // the amount of wait time until timeout for reading operations
|
||
"redisWriteTimeout": "0", // the amount of wait time until timeout for writing operations
|
||
"redisPoolPipelineWindow": "150µs", // duration after which internal pipelines are flushed (0 disables implicit pipelining)
|
||
"redisPoolPipelineLimit": 0, // maximum number of commands that can be pipelined before flushing (0 means no limit)
|
||
"redisTLS": false, // enable TLS when connecting to Redis and use the redisClientCertificate, redisClientKey and redisCACertificate for TLS connection
|
||
"redisClientCertificate":"", // path to client certificate
|
||
"redisClientKey":"", // path to client key
|
||
"redisCACertificate":"", // path to CA certificate (populate for self-signed certificate otherwise let it empty)
|
||
"mongoQueryTimeout":"10s", // timeout for query when mongo is used
|
||
"mongoConnScheme": "mongodb" // scheme for MongoDB connection <mongodb|mongodb+srv>
|
||
},
|
||
},
|
||
|
||
|
||
"registrarc":{
|
||
"rpc":{
|
||
"enabled": false,
|
||
"registrars_conns": [],
|
||
"hosts": [],
|
||
"refresh_interval": "5m"
|
||
}
|
||
},
|
||
|
||
|
||
"analyzers":{
|
||
"enabled": false, // starts AnalyzerS service: <true|false>.
|
||
"db_path": "/var/spool/cgrates/analyzers", // path to the folder where to store the information
|
||
"index_type": "*scorch", // the type of index for the storage: <*internal|*scorch|*boltdb|*leveldb|*mossdb>
|
||
"ttl": "24h", // time to wait before removing the API capture
|
||
"ees_conns": [], // connections to EEs
|
||
"cleanup_interval": "1h", // the interval we clean the db
|
||
"opts":{
|
||
// "*exporterIDs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": []
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"admins": {
|
||
"enabled": false,
|
||
"caches_conns":["*internal"],
|
||
"actions_conns": [], // connections to ActionS for reloads
|
||
"attributes_conns": [], // connections to AttributeS for CDRExporter
|
||
"ees_conns": [] // connections to EEs
|
||
},
|
||
|
||
|
||
"rates": {
|
||
"enabled": false,
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"rate_indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"rate_string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"rate_prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"rate_suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"rate_exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"rate_notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"rate_nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"verbosity": 1000, // number of increment iterations allowed
|
||
"opts":{
|
||
// "*profileIDs": [ // select the rate profiles used for cost calculation
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": []
|
||
// }
|
||
// ],
|
||
// "*startTime": [ // start time used for cost calculation
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "*now"
|
||
// }
|
||
// ],
|
||
// "*usage": [ // usage used for cost calculation
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "1m"
|
||
// }
|
||
// ],
|
||
// "*intervalStart": [ // event interval start
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "0"
|
||
// }
|
||
// ],
|
||
// "*profileIgnoreFilters": [ // ignore the filters for rateProfileIDs
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"sip_agent": { // SIP Agents, only used for redirections
|
||
"enabled": false, // enables the SIP agent: <true|false>
|
||
"listen": "127.0.0.1:5060", // address where to listen for SIP requests <x.y.z.y:1234>
|
||
"listen_net": "udp", // network to listen on <udp|tcp|tcp-tls>
|
||
"sessions_conns": ["*internal"],
|
||
"stats_conns": [], // connections to StatS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS, empty to disable: <""|*internal|$rpc_conns_id>
|
||
"timezone": "", // timezone of the events if not specified <UTC|Local|$IANA_TZ_DB>
|
||
"retransmission_timer": "1s", // the duration to wait to receive an ACK before resending the reply
|
||
"request_processors": [] // request processors to be applied to SIP messages
|
||
},
|
||
|
||
"janus_agent": {
|
||
"enabled": false, // enables the Janus agent: <true|false>
|
||
"url": "/janus",
|
||
"sessions_conns": ["*internal"],
|
||
"janus_conns": [{ // instantiate connections to multiple Janus Servers
|
||
"address": "127.0.0.1:8088", // janus API address
|
||
"type": "*ws", // type of the transport to interact via janus API
|
||
"admin_address": "localhost:7188", // janus admin address used to retrive more information for sessions and handles
|
||
"admin_password": "" // secret to pass restriction to communicate to the endpoint
|
||
}],
|
||
"request_processors": [] // request processors to be applied to Janus messages
|
||
},
|
||
|
||
"templates": {
|
||
"*fsa": [
|
||
{ "tag": "ToR", "path": "*cgreq.ToR","type": "*constant",
|
||
"value": "*voice"},
|
||
{"tag":"PDD","path":"*cgreq.PDD","type":"*composed",
|
||
"value":"~*req.variable_progress_mediamsec;ms"},
|
||
{"tag":"ACD","path":"*cgreq.ACD","type":"*composed",
|
||
"value":"~*req.variable_cdr_acd;s"},
|
||
{"tag": "OriginID","path": "*cgreq.OriginID","type": "*variable",
|
||
"value": "~*req.Unique-ID"},
|
||
{"tag": "*originID","path": "*opts.*originID","type": "*variable",
|
||
"value": "~*req.Unique-ID"},
|
||
{"tag": "OriginHost","path": "*cgreq.OriginHost","type": "*variable",
|
||
"value": "~*req.variable_cgr_originhost"},
|
||
{"tag": "Account","path": "*cgreq.Account","type": "*variable",
|
||
"value": "~*req.Caller-Username"},
|
||
{"tag":"Source","path":"*cgreq.Source", "type":"*composed",
|
||
"value":"FS_;~*req.Event-Name"},
|
||
{"tag":"RequestType","path":"*cgreq.RequestType","type":"*constant",
|
||
"value":"*none","filters":["*string:*req.variable_process_cdr:false"]},
|
||
{"tag":"RequestType","path":"*cgreq.RequestType","type":"*constant",
|
||
"value":"*none","filters":["*string:*req.Caller-Dialplan:inline"]},
|
||
{"tag":"RequestType","path": "*cgreq.RequestType","type": "*constant",
|
||
"filters":["*exists:*cgreq.RequestType:"],"value": "*prepaid"},
|
||
{"tag":"Tenant","path":"*cgreq.Tenant","type":"*constant",
|
||
"value":"cgrates.org"},
|
||
{"tag":"Category","path":"*cgreq.Category","type":"*constant",
|
||
"value":"call"},
|
||
{"tag":"Subject","path":"*cgreq.Subject","type":"*variable",
|
||
"value":"~*req.Caller-Username"},
|
||
{"tag":"Destination","path":"*cgreq.Destination","type":"*variable",
|
||
"value":"~*req.Caller-Destination-Number"},
|
||
{"tag":"SetupTime","path":"*cgreq.SetupTime","type":"*variable",
|
||
"value":"~*req.Caller-Channel-Created-Time"},
|
||
{"tag":"AnswerTime","path":"*cgreq.AnswerTime","type":"*variable",
|
||
"value":"~*req.Caller-Channel-Answered-Time"},
|
||
{"tag":"Usage","path":"*cgreq.Usage","type":"*composed",
|
||
"value":"~*req.variable_billsec;s"},
|
||
{"tag":"Route","path":"*cgreq.Route","type":"*variable",
|
||
"value":"~*req.variable_cgr_route"},
|
||
{"tag":"Cost","path":"*cgreq.Cost","type":"*constant",
|
||
"value":"-1.0"},
|
||
{"tag":"DisconnectCause","path":"*cgreq.DisconnectCause",
|
||
"filters":["*notempty:*req.Hangup-Cause:"],"type":"*variable","value":"~*req.Hangup-Cause"},
|
||
],
|
||
"*err": [
|
||
{"tag": "SessionId", "path": "*rep.Session-Id", "type": "*variable",
|
||
"value": "~*req.Session-Id", "mandatory": true},
|
||
{"tag": "OriginHost", "path": "*rep.Origin-Host", "type": "*variable",
|
||
"value": "~*vars.OriginHost", "mandatory": true},
|
||
{"tag": "OriginRealm", "path": "*rep.Origin-Realm", "type": "*variable",
|
||
"value": "~*vars.OriginRealm", "mandatory": true}
|
||
],
|
||
"*cca": [
|
||
{"tag": "SessionId", "path": "*rep.Session-Id", "type": "*variable",
|
||
"value": "~*req.Session-Id", "mandatory": true},
|
||
{"tag": "ResultCode", "path": "*rep.Result-Code", "type": "*constant",
|
||
"value": "2001"},
|
||
{"tag": "OriginHost", "path": "*rep.Origin-Host", "type": "*variable",
|
||
"value": "~*vars.OriginHost", "mandatory": true},
|
||
{"tag": "OriginRealm", "path": "*rep.Origin-Realm", "type": "*variable",
|
||
"value": "~*vars.OriginRealm", "mandatory": true},
|
||
{"tag": "AuthApplicationId", "path": "*rep.Auth-Application-Id", "type": "*variable",
|
||
"value": "~*vars.*appid", "mandatory": true},
|
||
{"tag": "CCRequestType", "path": "*rep.CC-Request-Type", "type": "*variable",
|
||
"value": "~*req.CC-Request-Type", "mandatory": true},
|
||
{"tag": "CCRequestNumber", "path": "*rep.CC-Request-Number", "type": "*variable",
|
||
"value": "~*req.CC-Request-Number", "mandatory": true}
|
||
],
|
||
"*asr": [
|
||
{"tag": "SessionId", "path": "*diamreq.Session-Id", "type": "*variable",
|
||
"value": "~*req.Session-Id", "mandatory": true},
|
||
{"tag": "OriginHost", "path": "*diamreq.Origin-Host", "type": "*variable",
|
||
"value": "~*req.Destination-Host", "mandatory": true},
|
||
{"tag": "OriginRealm", "path": "*diamreq.Origin-Realm", "type": "*variable",
|
||
"value": "~*req.Destination-Realm", "mandatory": true},
|
||
{"tag": "DestinationRealm", "path": "*diamreq.Destination-Realm", "type": "*variable",
|
||
"value": "~*req.Origin-Realm", "mandatory": true},
|
||
{"tag": "DestinationHost", "path": "*diamreq.Destination-Host", "type": "*variable",
|
||
"value": "~*req.Origin-Host", "mandatory": true},
|
||
{"tag": "AuthApplicationId", "path": "*diamreq.Auth-Application-Id", "type": "*variable",
|
||
"value": "~*vars.*appid", "mandatory": true}
|
||
],
|
||
"*rar": [
|
||
{"tag": "SessionId", "path": "*diamreq.Session-Id", "type": "*variable",
|
||
"value": "~*req.Session-Id", "mandatory": true},
|
||
{"tag": "OriginHost", "path": "*diamreq.Origin-Host", "type": "*variable",
|
||
"value": "~*req.Destination-Host", "mandatory": true},
|
||
{"tag": "OriginRealm", "path": "*diamreq.Origin-Realm", "type": "*variable",
|
||
"value": "~*req.Destination-Realm", "mandatory": true},
|
||
{"tag": "DestinationRealm", "path": "*diamreq.Destination-Realm", "type": "*variable",
|
||
"value": "~*req.Origin-Realm", "mandatory": true},
|
||
{"tag": "DestinationHost", "path": "*diamreq.Destination-Host", "type": "*variable",
|
||
"value": "~*req.Origin-Host", "mandatory": true},
|
||
{"tag": "AuthApplicationId", "path": "*diamreq.Auth-Application-Id", "type": "*variable",
|
||
"value": "~*vars.*appid", "mandatory": true},
|
||
{"tag": "ReAuthRequestType", "path": "*diamreq.Re-Auth-Request-Type", "type": "*constant",
|
||
"value": "0"}
|
||
],
|
||
"*dmr": [ // used by RadiusAgent when sending Disconnect message towards the client
|
||
{"tag": "User-Name", "path": "*radDAReq.User-Name", "type": "*variable",
|
||
"value": "~*oreq.User-Name"},
|
||
{"tag": "NAS-IP-Address", "path": "*radDAReq.NAS-IP-Address", "type": "*variable",
|
||
"value": "~*oreq.NAS-IP-Address"},
|
||
{"tag": "Acct-Session-Id", "path": "*radDAReq.Acct-Session-Id", "type": "*variable",
|
||
"value": "~*oreq.Acct-Session-Id"},
|
||
{"tag": "Reply-Message", "path": "*radDAReq.Reply-Message", "type": "*variable",
|
||
"value": "~*req.DisconnectCause"}
|
||
],
|
||
"*coa": [ // used by RadiusAgent when sending ChangeOfAuthorization message towards the client
|
||
{"tag": "User-Name", "path": "*radDAReq.User-Name", "type": "*variable",
|
||
"value": "~*oreq.User-Name"},
|
||
{"tag": "NAS-IP-Address", "path": "*radDAReq.NAS-IP-Address", "type": "*variable",
|
||
"value": "~*oreq.NAS-IP-Address"},
|
||
{"tag": "Acct-Session-Id", "path": "*radDAReq.Acct-Session-Id", "type": "*variable",
|
||
"value": "~*oreq.Acct-Session-Id"},
|
||
{"tag": "Filter-Id", "path": "*radDAReq.Filter-Id", "type": "*variable",
|
||
"value": "~*req.CustomFilter"}
|
||
],
|
||
"*errSip": [
|
||
{"tag": "Request", "path": "*rep.Request", "type": "*constant",
|
||
"value": "SIP/2.0 500 Internal Server Error", "mandatory": true}
|
||
],
|
||
"*cdrLog": [ // cdrLog template is used in ActionS to build the event that is send to CDRs in case of *cdrLog actionType
|
||
{"tag": "ToR", "path": "*cdr.ToR", "type": "*variable",
|
||
"value": "~*req.BalanceType", "mandatory": true},
|
||
{"tag": "OriginHost", "path": "*cdr.OriginHost", "type": "*constant",
|
||
"value": "127.0.0.1", "mandatory": true},
|
||
{"tag": "RequestType", "path": "*cdr.RequestType", "type": "*constant",
|
||
"value": "*none", "mandatory": true},
|
||
{"tag": "Tenant", "path": "*cdr.Tenant", "type": "*variable",
|
||
"value": "~*req.Tenant", "mandatory": true},
|
||
{"tag": "Account", "path": "*cdr.Account", "type": "*variable",
|
||
"value": "~*req.Account", "mandatory": true},
|
||
{"tag": "Subject", "path": "*cdr.Subject", "type": "*variable",
|
||
"value": "~*req.Account", "mandatory": true},
|
||
{"tag": "Cost", "path": "*cdr.Cost", "type": "*variable",
|
||
"value": "~*req.Cost", "mandatory": true},
|
||
{"tag": "Source", "path": "*cdr.Source", "type": "*constant",
|
||
"value": "*cdrLog", "mandatory": true},
|
||
{"tag": "Usage", "path": "*cdr.Usage", "type": "*constant",
|
||
"value": "1", "mandatory": true},
|
||
{"tag": "RunID", "path": "*cdr.RunID", "type": "*variable",
|
||
"value": "~*req.ActionType", "mandatory": true},
|
||
{"tag": "SetupTime", "path": "*cdr.SetupTime", "type": "*constant",
|
||
"value": "*now", "mandatory": true},
|
||
{"tag": "AnswerTime", "path": "*cdr.AnswerTime", "type": "*constant",
|
||
"value": "*now", "mandatory": true},
|
||
{"tag": "PreRated", "path": "*cdr.PreRated", "type": "*constant",
|
||
"value": "true", "mandatory": true}
|
||
]
|
||
},
|
||
|
||
|
||
"configs": {
|
||
"enabled": false,
|
||
"url": "/configs/", // configs url
|
||
"root_dir": "/var/spool/cgrates/configs" // root directory in case of calling /configs request
|
||
},
|
||
|
||
|
||
"apiban": {
|
||
"enabled": false,
|
||
"keys": []
|
||
},
|
||
|
||
"sentrypeer": {
|
||
"client_id":"",
|
||
"client_secret":"",
|
||
"token_url":"https://authz.sentrypeer.com/oauth/token",
|
||
"ips_url":"https://sentrypeer.com/api/ip-addresses",
|
||
"numbers_url":"https://sentrypeer.com/api/phone-numbers",
|
||
"audience":"https://sentrypeer.com/api",
|
||
"grant_type":"client_credentials"
|
||
},
|
||
|
||
|
||
"actions": {
|
||
"enabled": false, // starts attribute service: <true|false>
|
||
"cdrs_conns": [], // connections to CDRs for CDR posting <""|*internal|$rpc_conns_id>
|
||
"ees_conns": [], // connections to Ees for exporting event <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS for *reset_threshold action <""|*internal|$rpc_conns_id>
|
||
"stats_conns": [], // connections to StatS for *reset_stat_queue action: <""|*internal|$rpc_conns_id>
|
||
"accounts_conns": [], // connections to AccountS for *topup/*topup_reset action: <""|*internal|$rpc_conns_id>
|
||
"admins_conns": [], // connections to AdminS for *dynamic actions: <""|*internal|$rpc_conns_id>
|
||
"tenants":[], // List of tenants to operate on
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"dynaprepaid_actionprofile": [],
|
||
"opts":{
|
||
// "*profileIDs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": [],
|
||
// }
|
||
// ],
|
||
// "*profileIgnoreFilters": [ // ignore the filters for actionProfileIDs
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": false
|
||
// }
|
||
// ],
|
||
// "*posterAttempts": [ // poster attempts for HTTPPost action type
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": 1
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"accounts": {
|
||
"enabled": false, // starts service: <true|false>
|
||
"indexed_selects": true, // enable profile matching exclusively on indexes
|
||
"attributes_conns": [], // connections to AttributeS for account/balance updates, empty to disable attributes functionality: <""|*internal|$rpc_conns_id>
|
||
"rates_conns": [], // connections to RatesS for account/balance updates, empty to disable rates functionality: <""|*internal|$rpc_conns_id>
|
||
"thresholds_conns": [], // connections to ThresholdS for account/balance updates, empty to disable thresholds functionality: <""|*internal|$rpc_conns_id>
|
||
//"string_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"prefix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"suffix_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"exists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"notexists_indexed_fields": [], // query indexes based on these fields for faster processing
|
||
"nested_fields": false, // determines which field is checked when matching indexed filters(true: all; false: only the one on the first level)
|
||
"max_iterations": 1000, // maximum number of iterations
|
||
"max_usage": "72h", // maximum time of usage
|
||
"opts":{
|
||
// "*profileIDs": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": []
|
||
// }
|
||
// ],
|
||
// "*usage": [
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "72h"
|
||
// }
|
||
// ],
|
||
// "*profileIgnoreFilters": [ // ignore the filters for accountIDs
|
||
// {
|
||
// "Tenant": "*any",
|
||
// "FilterIDs": [],
|
||
// "Value": "false"
|
||
// }
|
||
// ]
|
||
}
|
||
},
|
||
|
||
|
||
"config_db": { // database used to store runtime data (eg: accounts)
|
||
"db_type": "*internal", // db type: <*internal|*redis|*mongo>
|
||
"db_host": "", // db host address
|
||
"db_port": 0, // db port to reach the database
|
||
"db_name": "", // db database name to connect to
|
||
"db_user": "", // username to use when connecting to db
|
||
"db_password": "", // password to use when connecting to db
|
||
"opts":{
|
||
"internalDBDumpPath": "/var/lib/cgrates/internal_db/configdb", // the path where configdb will be dumped
|
||
"internalDBBackupPath": "/var/lib/cgrates/internal_db/backup/configdb", // default path taken by ConfigSv1.BackupConfigDB when "BackupFolderPath" is not provided
|
||
"internalDBStartTimeout": "5m", // the amount of wait time until timeout for DB startup
|
||
"internalDBDumpInterval": "0s", // dump configdb regularly to a file: "0" - disables it; "-1" - dump on each set/remove; <""|$dur>
|
||
"internalDBRewriteInterval": "0s", // rewrite dump files regularly: "0" - disables it; "-1" - rewrite on engine start; "-2" - rewrite on engine shutdown; <""|$dur>
|
||
"internalDBFileSizeLimit": "1GB", // maximum size that can be written in a singular dump file
|
||
"redisMaxConns": 10, // the connection pool size
|
||
"redisConnectAttempts": 20, // the maximum amount of dial attempts
|
||
"redisSentinel": "", // the name of sentinel when used
|
||
"redisCluster": false, // if enabled the configdb will try to connect to the redis cluster
|
||
"redisClusterSync": "5s", // the sync interval for the redis cluster
|
||
"redisClusterOndownDelay": "0", // the delay before executing the commands if the redis cluster is in the CLUSTERDOWN state
|
||
"redisConnectTimeout": "0", // the amount of wait time until timeout for a connection attempt
|
||
"redisReadTimeout": "0", // the amount of wait time until timeout for reading operations
|
||
"redisWriteTimeout": "0", // the amount of wait time until timeout for writing operations
|
||
"redisPoolPipelineWindow": "150µs", // duration after which internal pipelines are flushed (0 disables implicit pipelining)
|
||
"redisPoolPipelineLimit": 0, // maximum number of commands that can be pipelined before flushing (0 means no limit)
|
||
"redisTLS": false, // if true it will use a tls connection and use the redisClientCertificate, redisClientKey and redisCACertificate for tls connection
|
||
"redisClientCertificate":"", // path to client certificate
|
||
"redisClientKey":"", // path to client key
|
||
"redisCACertificate":"", // path to CA certificate (populate for self-signed certificate otherwise let it empty)
|
||
"mongoQueryTimeout":"10s", // timeout for query when mongo is used
|
||
"mongoConnScheme": "mongodb" // scheme for MongoDB connection <mongodb|mongodb+srv>
|
||
}
|
||
},
|
||
|
||
"tpes": {
|
||
"enabled": false
|
||
}
|
||
|
||
}`
|