//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 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see */ 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 "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 "rsr_separator": ";", // separator used within RSR fields "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 in case of concurrent requests reached "caps_stats_interval": "0", // the interval 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": { // "*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":"" // } // ], // }, }, // rpc connections definitions "data_db": { // database used to store runtime data (eg: accounts) "db_type": "*redis", // data_db type: <*redis|*mongo> "db_host": "127.0.0.1", // data_db host address "db_port": 6379, // data_db port to reach the database "db_name": "10", // data_db database name to connect to "db_user": "cgrates", // username to use when connecting to data_db "db_password": "", // password to use when connecting to data_db "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":{ "*accounts": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*actions": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*resource_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*resources": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*statqueue_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*statqueues": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*threshold_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*thresholds": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*filters": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*route_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*attribute_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*charger_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*dispatcher_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*dispatcher_hosts": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*rate_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*action_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*load_ids": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*versions": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false}, "*resource_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*stat_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*threshold_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*route_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*attribute_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*charger_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*dispatcher_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*rate_profile_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*rate_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*action_profile_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*account_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, "*reverse_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, }, "opts":{ "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 datadb 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 "mongoQueryTimeout": "10s", // timeout for query when mongo is used "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) } }, "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 "prometheus_url": "/prometheus", "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) "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 "*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 "*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 "*dispatcher_profiles": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control dispatcher profile caching "*dispatcher_hosts": {"limit": -1, "ttl": "", "static_ttl": false, "precache": false, "remote":false, "replicate": false}, // control dispatcher hosts 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 "*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 "*charger_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control charger filter indexes caching "*dispatcher_filter_indexes" : {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control dispatcher 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 "*dispatcher_routes": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control dispatcher routes caching "*dispatcher_loads": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control dispatcher load( in case of *ratio ConnParams is present) "*dispatchers": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate": false}, // control dispatcher interface "*diameter_messages": {"limit": -1, "ttl": "3h", "static_ttl": false, "remote":false, "replicate": false}, // diameter messages 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}, "*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": { // Filters configuration (*new) "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> }, "cdrs": { // CDRs config "enabled": false, // start the CDR Server: "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, // }, // ], }, }, "ers": { // EventReaderService "enabled": false, // starts the EventReader service: "sessions_conns":["*internal"], // RPC Connections IDs "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 or 0 to disable running all together "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 "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", // the queue id for AMQP and AMQPv1 readers from were the events are read // "amqpQueueIDProcessed": "", // the queue id for AMQP and AMQPv1 readers were the events are sent after they are processed // AMQP // "amqpConsumerTag": "cgrates", // the ID of the consumer // "amqpExchange": "", // "amqpExchangeType": "", // "amqpRoutingKey": "", // "amqpExchangeProcessed": "", // "amqpExchangeTypeProcessed": "", // "amqpRoutingKeyProcessed": "", // Kafka // "kafkaTopic": "cgrates", // the topic from were the events are read // "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, // "kafkaTopicProcessed": "", //the topic were the events are sent after they are processed // "kafkaTLSProcessed": false, // "kafkaCAPathProcessed": "", // "kafkaSkipTLSVerifyProcessed": 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 // "pgSSLMode": "disable", // the ssl mode for postgres db // "sqlDBNameProcessed": "", // the name of the database were the events are sent after they are processed // "sqlTableNameProcessed": "", // the name of the table were the events are sent after they are processed // "pgSSLModeProcessed": "", // the ssl mode for postgres db // SQS and S3 // "awsRegion": "", // "awsKey": "", // "awsSecret": "", // "awsToken": "", // "awsRegionProcessed": "", // "awsKeyProcessed": "", // "awsSecretProcessed": "", // "awsTokenProcessed": "", // SQS // "sqsQueueID": "cgrates_cdrs", // the queue id for SQS readers from were the events are read // "sqsQueueIDProcessed": "", // the queue id for SQS readers were the events are sent after they are processed // S3 // "s3BucketID": "cgrates_cdrs", // the bucket id for S3 readers from were the events are read // "s3FolderPathProcessed": "", // only for S3 event posting // "s3BucketIDProcessed": "cgrates_cdrs", // the bucket id for S3 readers were the events are sent after they are processed // nats // "natsJetStream": false, // controls if the nats reader uses the JetStream // "natsConsumerName": "cgrates", // in case of JetStream the name of the consumer "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 // "natsJetStreamProcessed": false, // controls if the nats poster uses the JetStream // "natsSubjectProcessed": "cgrates_cdrs", // the subject were the events are posted // "natsJWTFileProcessed": "", // the path to the JWT file( can be the chained file or the user file) // "natsSeedFileProcessed": "", // the path to the seed files( if the JWT file is mention this is used as seedFile for the JWT user mentioned above) // "natsCertificateAuthorityProcessed": "", // the path to a custom certificate authority file( used by tls) // "natsClientCertificateProcessed": "", // the path to a client certificate( used by tls) // "natsClientKeyProcessed": "", // the path to a client key( used by tls) // "natsJetStreamMaxWaitProcessed": "5s ", // the maximum amount of time to wait for a response }, "tenant": "", // tenant used by import "timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> "filters": [], // limit parsing based on the filters "flags": [], // flags to influence the event processing "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": { // ExportFailover service "enabled": false, // starts the EventReader service: "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": { // EventExporterService "enabled": false, // starts the EventReader service: "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 "concurrent_requests": 0, // maximum simultaneous requests to process, 0 for unlimited "opts": { // CSV // "csvFieldSeparator": ",", // separator used when reading the fields // Elasticsearch options // "elsIndex": "", // ElsIndex // "elsIfPrimaryTerm": 0, // ElsIfPrimaryTerm // "elsIfSeqNo": 0, // ElsIfSeqNo // "elsOpType": "", // ElsOpType // "elsPipeline": "", // ElsPipeline // "elsRouting": "", // ElsRouting // "elsTimeout": "", // ElsTimeout // "elsVersion": 0, // ElsVersionLow // "elsVersionType": "", // ElsVersionType // "elsWaitForActiveShards": "", // ElsWaitForActiveShards // SQL // "sqlMaxIdleConns": 0, // SQLMaxIdleConns // "sqlMaxOpenConns": 0, // SQLMaxOpenConns // "sqlConnMaxLifetime": "0", // SQLConnMaxLifetime // "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 // "amqpExchange": "", // Exchange // "amqpExchangeType": "", // ExchangeType // 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 // "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 }, // extra options for exporter "timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> "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 "fields":[], // import fields template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value "efs_conns": ["*internal"], // connID to efs service "failed_posts_dir": "/var/spool/cgrates/failed_posts", // directory path where we store failed requests }, ], }, "sessions": { "enabled": false, // starts the session service: "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> "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, // }, // ], // "*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, // }, // ], // "*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": "", // }, // ], }, }, "asterisk_agent": { "enabled": false, // starts the Asterisk agent: "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: "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 "event_socket_conns":[ // instantiate connections to multiple FreeSWITCH servers {"address": "127.0.0.1:8021", "password": "ClueCon", "reconnects": 5, "max_reconnect_interval": "", "alias":""} ], }, "kamailio_agent": { "enabled": false, // starts Kamailio agent: "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: "listen": "127.0.0.1:3868", // address where to listen for diameter requests "listen_net": "tcp", // transport type for diameter "dictionaries_path": "/usr/share/cgrates/diameter/dict/", // path towards directory holding additional dictionaries to load "sessions_conns": ["*birpc_internal"], "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 "concurrent_requests": -1, // limit the number of active requests processed by the server <-1|0-n> "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: "listen_net": "udp", // network to listen on "listen_auth": "127.0.0.1:1812", // address where to listen for radius authentication requests "listen_acct": "127.0.0.1:1813", // address where to listen for radius accounting requests "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": "/usr/share/cgrates/radius/dict/", // key represents the client IP or catch-all <*default|$client_ip> }, "sessions_conns": ["*internal"], "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: "listen": "127.0.0.1:2053", // address where to listen for DNS requests "listen_net": "udp", // network to listen on "sessions_conns": ["*internal"], "timezone": "", // timezone of the events if not specified "request_processors": [ // request processors to be applied to DNS messages ], }, "attributes": { // AttributeS config "enabled": false, // starts attribute service: "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": { // ChargerS config "enabled": false, // starts charger service: . "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": { // ResourceS config "enabled": false, // starts ResourceLimiter service: . "store_interval": "", // dump cache regularly to dataDB, 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, // }, // ], }, }, "stats": { // StatS config "enabled": false, // starts Stat service: . "store_interval": "", // dump cache regularly to dataDB, 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> "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, // }, // ], // "*prometheusStatIDs": [ // { // "Tenant": "*any", // "FilterIDs": [], // "Value": [], // }, // ], }, }, "thresholds": { // ThresholdS "enabled": false, // starts ThresholdS service: . "store_interval": "", // dump cache regularly to dataDB, 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 "opts":{ // // "*thresholdsIDs": [ // { // "Tenant": "*any", // "FilterIDs": [], // "Value": [], // }, // ], // "*profileIgnoreFilters": [ // ignore the filters for thresholdIDs // { // "Tenant": "*any", // "FilterIDs": [], // "Value": false, // }, // ], }, }, "routes": { // RouteS config "enabled": false, // starts RouteS service: . "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": [ // LoaderS config { "id": "*default", // identifier of the Loader "enabled": false, // starts as service: . "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}, "*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}, "*dispatchers":{"limit": -1, "ttl": "5s", "static_ttl": false}, "*dispatcher_hosts":{"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}, }, "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": "*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"}, ], }, { "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": "*dispatchers", // data source type "file_name": "DispatcherProfiles.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": "Weight", "path": "Weight", "type": "*variable", "value": "~*req.3"}, {"tag": "Strategy", "path": "Strategy", "type": "*variable", "value": "~*req.4"}, {"tag": "StrategyParameters", "path": "StrategyParams", "type": "*variable", "value": "~*req.5"}, {"tag": "ConnID", "path": "Hosts.ID", "type": "*variable", "value": "~*req.6","new_branch":true}, {"tag": "ConnFilterIDs", "path": "Hosts.FilterIDs", "type": "*variable", "value": "~*req.7"}, {"tag": "ConnWeight", "path": "Hosts.Weight", "type": "*variable", "value": "~*req.8"}, {"tag": "ConnBlocker", "path": "Hosts.Blocker", "type": "*variable", "value": "~*req.9"}, {"tag": "ConnParameters", "path": "Hosts.Params", "type": "*variable", "value": "~*req.10"}, ], }, { "type": "*dispatcher_hosts", // data source type "file_name": "DispatcherHosts.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": "Address", "path": "Address", "type": "*variable", "value": "~*req.2"}, {"tag": "Transport", "path": "Transport", "type": "*variable", "value": "~*req.3"}, {"tag": "ConnectAttempts", "path": "ConnectAttempts", "type": "*variable", "value":"~*req.4"}, {"tag": "Reconnects", "path": "Reconnects", "type": "*variable", "value":"~*req.5"}, {"tag": "MaxReconnectInterval", "path": "MaxReconnectInterval", "type": "*variable", "value":"~*req.6"}, {"tag": "ConnectTimeout", "path": "ConnectTimeout", "type": "*variable", "value":"~*req.7"}, {"tag": "ReplyTimeout", "path": "ReplyTimeout", "type": "*variable", "value":"~*req.8"}, {"tag": "TLS", "path": "TLS", "type": "*variable", "value": "~*req.9"}, {"tag": "ClientKey", "path": "ClientKey", "type": "*variable", "value":"~*req.10"}, {"tag": "ClientCertificate", "path": "ClientCertificate", "type": "*variable", "value":"~*req.11"}, {"tag": "CaCertificate", "path": "CaCertificate", "type": "*variable", "value":"~*req.12"}, ], }, { "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": "ActionPath", "path": "Actions[<~*req.8>].Diktats.Path", "type": "*variable", "value": "~*req.13","new_branch":true, "filters": ["*notempty:~*req.8:"]}, {"tag": "ActionValue", "path": "Actions[<~*req.8>].Diktats.Value", "type": "*variable", "value": "~*req.14", "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 "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; "customer_number": "~*req.Subject", // template extracting customer number out of StoredCdr; "orig_number": "~*req.Subject", // template extracting origination number out of StoredCdr; "term_number": "~*req.Destination", // template extracting termination number out of StoredCdr; "bill_to_number": "", // template extracting billed to number out of StoredCdr; "zipcode": "", // template extracting billing zip code out of StoredCdr; "plus4": "", // template extracting billing zip code extension out of StoredCdr; "p2pzipcode": "", // template extracting secondary zip code out of StoredCdr; "p2pplus4": "", // template extracting secondary zip code extension out of StoredCdr; "units": "1", // template extracting number of “lines” or unique charges contained within the revenue out of StoredCdr; "unit_type": "00", // template extracting number of unique access lines out of StoredCdr; "tax_included": "0", // template extracting tax included in revenue out of StoredCdr; "tax_situs_rule": "04", // template extracting tax situs rule out of StoredCdr; "trans_type_code": "010101", // template extracting transaction type indicator out of StoredCdr; "sales_type_code": "R", // template extracting sales type code out of StoredCdr; "tax_exemption_code_list": "", // template extracting tax exemption code list out of StoredCdr; }, "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": { "out_datadb_type": "redis", "out_datadb_host": "127.0.0.1", "out_datadb_port": "6379", "out_datadb_name": "10", "out_datadb_user": "cgrates", "out_datadb_password": "", "out_datadb_encoding" : "msgpack", "users_filters":[], "out_datadb_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 "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) }, }, "dispatchers":{ // DispatcherS config "enabled": false, // starts DispatcherS service: . "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 API authorization, empty to disable auth functionality: <""|*internal|$rpc_conns_id> "opts": { // // "*dispatchers": [ // { // "Tenant": "*any", // "FilterIDs": [], // "Value": false, // }, // ], }, }, "registrarc":{ "rpc":{ "enabled": false, "registrars_conns": [], "hosts": [], "refresh_interval": "5m", }, "dispatchers":{ "enabled": false, "registrars_conns": [], "hosts": [], "refresh_interval": "5m", }, }, "analyzers":{ // AnalyzerS config "enabled": false, // starts AnalyzerS service: . "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: "listen": "127.0.0.1:5060", // address where to listen for SIP requests "listen_net": "udp", // network to listen on "sessions_conns": ["*internal"], "timezone": "", // timezone of the events if not specified "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 ], }, "templates": { "*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"}, ], "*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": [], }, "actions": { // ActionS config "enabled": false, // starts attribute service: "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> "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": { // AccountS config "enabled": false, // starts service: "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", // data_db type: <*redis|*mongo> "db_host": "", // data_db host address "db_port": 0, // data_db port to reach the database "db_name": "", // data_db database name to connect to "db_user": "", // username to use when connecting to data_db "db_password": "", // password to use when connecting to data_db "opts":{ "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 datadb 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 "mongoQueryTimeout":"10s", // timeout for query when mongo is used "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) } }, "tpes": { "enabled": false, }, }`