cachedb_mongodb Module
     __________________________________________________________

   Table of Contents

   1. Admin Guide

        1.1. Overview
        1.2. Advantages
        1.3. Limitations
        1.4. Dependencies

              1.4.1. OpenSIPS Modules
              1.4.2. External Libraries or Applications

        1.5. Exported Parameters

              1.5.1. cachedb_url (string)
              1.5.2. exec_threshold (int)
              1.5.3. compat_mode_2.4 (int)
              1.5.4. compat_mode_3.0 (int)

        1.6. Exported Functions
        1.7. Raw Query Syntax

   2. Contributors

        2.1. By Commit Statistics
        2.2. By Commit Activity

   3. Documentation

        3.1. Contributors

   List of Tables

   2.1. Top contributors by DevScore^(1), authored commits^(2) and
          lines added/removed^(3)

   2.2. Most recently active contributors^(1) to this module

   List of Examples

   1.1. Runtime requirements for "cachedb_mongodb"
   1.2. Compilation requirements for "cachedb_mongodb"
   1.3. Set cachedb_url parameter
   1.4. Reference MongoDB connections
   1.5. Set exec_threshold parameter
   1.6. Setting the compat_mode_2.4 parameter
   1.7. Setting the compat_mode_3.0 parameter
   1.8. MongoDB Raw Insert
   1.9. MongoDB Raw Update

Chapter 1. Admin Guide

1.1. Overview

   This module is an implementation of a cache system designed to
   work with MongoDB servers. It implements the Key-Value
   interface exposed by the OpenSIPS core.

   The underlying client library is compatible with any of the
   following MongoDB server versions: 2.4, 2.6, 3.0, 3.2 and 3.4,
   as stated in the MongoDB documentation.

1.2. Advantages

     * memory costs are no longer on the server
     * many servers can be used inside a cluster, so the memory is
       virtually unlimited
     * the cache is 100% persistent. A restart of OpenSIPS server
       will not affect the DB. The MongoDB is also persistent so
       it can also be restarted without loss of information.
     * MongoDB is an open-source project so it can be used to
       exchange data with various other applications
     * By creating a MongoDB Cluster, multiple OpenSIPS instances
       can easily share key-value information
     * This module also implements the CacheDB Raw query
       capability, thus you can run whatever query that the
       MongoDB back-end supports, taking full advatange of it.

1.3. Limitations

     * keys (in key:value pairs) may not contain spaces or control
       characters

1.4. Dependencies

1.4.1. OpenSIPS Modules

   None.

1.4.2. External Libraries or Applications

   The following packages must be installed before running
   OpenSIPS with this module loaded:

   Example 1.1. Runtime requirements for "cachedb_mongodb"
# Debian / Ubuntu
sudo apt-get install libjson-c2 libmongoc-1.0

# Red Hat / CentOS
sudo yum install json-c mongo-c-driver

   The following packages are required in order to compile this
   module:

   Example 1.2. Compilation requirements for "cachedb_mongodb"
# Debian / Ubuntu
sudo apt-get install libjson-c-dev libmongoc-dev libbson-dev

# Red Hat / CentOS
sudo yum install json-c-devel mongo-c-driver-devel

1.5. Exported Parameters

1.5.1. cachedb_url (string)

   The URLs of the server groups that OpenSIPS will connect to in
   order to allow the cache_store(), cache_fetch(), etc. functions
   to be used from the OpenSIPS script. It can be set more than
   one time. The prefix part of the URL will be the identifier
   that will be used from the script.

   The URL syntax is identical to the one used by MongoDB,
   including connect string options. For more info, please refer
   to the official MongoDB connect string documentation.

   Example 1.3. Set cachedb_url parameter
...
# Connect to a single mongod instance
modparam("cachedb_mongodb", "cachedb_url",
         "mongodb://localhost:27017/opensipsDB.dialog")

# Connect to a mongod replica set
modparam("cachedb_mongodb", "cachedb_url",
         "mongodb://10.0.0.10,10.0.0.11:27017/opensipsDB.dialog?replicaS
et=my-set")

# Connect to a mongos instance (routes to a sharded cluster)
modparam("cachedb_mongodb", "cachedb_url",
         "mongodb://localhost/opensipsDB.dialog")

# Example of multiple connections:
#   * to a main mongos, with failover to a backup mongos
#   * to a single mongod
modparam("cachedb_mongodb", "cachedb_url",
         "mongodb:cluster://localhost,10.0.0.10:27017/opensipsDB.dialog"
)
modparam("cachedb_mongodb", "cachedb_url",
         "mongodb://localhost:27017/opensipsDB.userlocation")
...

   Example 1.4. Reference MongoDB connections
...
cache_store("mongodb", "key", "$ru value");
cache_remove("mongodb:cluster", "key");
cache_fetch("mongodb:instance1", "key", $avp(10));
...

1.5.2. exec_threshold (int)

   The maximum number of microseconds that a mongodb query can
   last. Anything above the threshold will trigger a warning
   message to the log

   Default value is “0 ( unlimited - no warnings )”.

   Example 1.5. Set exec_threshold parameter
...
modparam("cachedb_mongodb", "exec_threshold", 100000)
...

1.5.3. compat_mode_2.4 (int)

   Switch the module into compatibility mode for MongoDB 2.4
   servers. Specifically, this allows "insert/update/delete" raw
   queries to not fail, since they were introduced in MongoDB 2.6.
   The module will interpret the raw query JSON, convert it to its
   corresponding command and run it.

   Caveat: only the minimally required raw query options are
   supported in this mode.

   Default value is “0 (disabled)”.

   Example 1.6. Setting the compat_mode_2.4 parameter
...
modparam("cachedb_mongodb", "compat_mode_2.4", 1)
...

1.5.4. compat_mode_3.0 (int)

   Switch the module into compatibility mode for MongoDB 2.6/3.0
   servers. Specifically, this allows "find" raw queries to not
   fail, since they were introduced in MongoDB 3.2. The module
   will interpret the "find" raw query JSON, convert it to its
   corresponding command and run it.

   Caveat: only the minimally required options for "find" raw
   queries are supported in this mode.

   Default value is “0 (disabled)”.

   Example 1.7. Setting the compat_mode_3.0 parameter
...
modparam("cachedb_mongodb", "compat_mode_3.0", 1)
...

1.6. Exported Functions

   The module does not export functions to be used in
   configuration script.

1.7. Raw Query Syntax

   The cachedb_mongodb module supports raw queries, thus taking
   full advantage of the capabilities of the back-end, including
   query-specific options such as read/write preference, timeouts,
   filtering options, etc.

   The query syntax is identical to the mongo cli. Documentation
   for it can be found on the MongoDB website. Query results are
   returned as JSON documents, that one can further process in the
   OpenSIPS script by using the JSON module.

   Some example raw queries:

   Example 1.8. MongoDB Raw Insert
...
cache_raw_query("mongodb:cluster", "{ \
    \"insert\": \"ip_blacklist\", \
    \"documents\": [{ \
        \"username\": \"$fU\", \
        \"ip\": \"$si\", \
        \"attempts\": 1 \
     }]}",
 "$avp(out)");
xlog("INSERT RAW QUERY returned $rc, output: '$avp(out)'\n");
...

   Example 1.9. MongoDB Raw Update
...
cache_raw_query("mongodb:cluster", "{ \
    \"update\": \"ip_blacklist\", \
    \"updates\": [{ \
        \"q\": { \
            \"username\": \"$fU\", \
            \"ip\": \"$si\" \
         }, \
        \"u\": { \
            \"$$inc\": {\"attempts\": 1} \
         } \
      }]}",
 "$avp(out)");
xlog("UPDATE RAW QUERY returned $rc, output: '$avp(out)'\n");
...

Chapter 2. Contributors

2.1. By Commit Statistics

   Table 2.1. Top contributors by DevScore^(1), authored
   commits^(2) and lines added/removed^(3)
     Name DevScore Commits Lines ++ Lines --
   1. Liviu Chircu (@liviuchircu) 152 82 2920 2758
   2. Vlad Paiu (@vladpaiu) 36 10 3018 50
   3. Razvan Crainea (@razvancrainea) 12 10 30 26
   4. Ovidiu Sas (@ovidiusas) 10 8 92 16
   5. Vlad Patrascu (@rvlad-patrascu) 6 4 96 11
   6. Bogdan-Andrei Iancu (@bogdan-iancu) 5 3 3 5
   7. Dan Pascu (@danpascu) 4 2 4 4
   8. Alessio Garzi (@Ozzyboshi) 4 2 2 2
   9. @jalung 3 1 97 56
   10. Maksym Sobolyev (@sobomax) 3 1 2 2

   All remaining contributors: Julián Moreno Patiño, Peter
   Lemenkov (@lemenkov).

   (1) DevScore = author_commits + author_lines_added /
   (project_lines_added / project_commits) + author_lines_deleted
   / (project_lines_deleted / project_commits)

   (2) including any documentation-related commits, excluding
   merge commits. Regarding imported patches/code, we do our best
   to count the work on behalf of the proper owner, as per the
   "fix_authors" and "mod_renames" arrays in
   opensips/doc/build-contrib.sh. If you identify any
   patches/commits which do not get properly attributed to you,
   please submit a pull request which extends "fix_authors" and/or
   "mod_renames".

   (3) ignoring whitespace edits, renamed files and auto-generated
   files

2.2. By Commit Activity

   Table 2.2. Most recently active contributors^(1) to this module
                      Name                   Commit Activity
   1.  Vlad Paiu (@vladpaiu)               Jan 2013 - Aug 2024
   2.  Maksym Sobolyev (@sobomax)          Feb 2023 - Feb 2023
   3.  Liviu Chircu (@liviuchircu)         Mar 2014 - Jul 2021
   4.  Vlad Patrascu (@rvlad-patrascu)     May 2017 - May 2021
   5.  Razvan Crainea (@razvancrainea)     Aug 2015 - Dec 2020
   6.  Bogdan-Andrei Iancu (@bogdan-iancu) Oct 2014 - Mar 2020
   7.  Alessio Garzi (@Ozzyboshi)          Nov 2019 - Dec 2019
   8.  Dan Pascu (@danpascu)               May 2019 - May 2019
   9.  Peter Lemenkov (@lemenkov)          Jun 2018 - Jun 2018
   10. @jalung                             Aug 2017 - Aug 2017

   All remaining contributors: Julián Moreno Patiño, Ovidiu Sas
   (@ovidiusas).

   (1) including any documentation-related commits, excluding
   merge commits

Chapter 3. Documentation

3.1. Contributors

   Last edited by: Liviu Chircu (@liviuchircu), Peter Lemenkov
   (@lemenkov), Julián Moreno Patiño, Vlad Paiu (@vladpaiu).

   Documentation Copyrights:

   Copyright © 2013-2017 www.opensips-solutions.com
