Configuration
Configuration
The N2C5 application does not have its own database. All configuration for the N2C5 is stored in the “n2c5-{suffix}.xml” configuration file which is part of the underlying Jarvis back-end data access.
In a simple development system, you may have only one configuration file.
/etc/jarvis/n2c5.xml
In a typical production installation, there will often be more than one N2C5 instance in operation. Each will have a separate configuration file, e.g.
/etc/jarvis/n2c5-model.xml
/etc/jarvis/n2c5-test.xml
/etc/jarvis/n2c5-dev.xml
Example Configuration
Here is an example N2C5 configuration file:
<?xml version="1.0" encoding="utf-8"?>
<jarvis>
<app use_placeholders="yes" format="json" debug="no" dump="no" log_format="[%P/%A/%U/%D] %M">
<tracker logins="no" requests="no" errors="no">
<dbfile>/opt/jarvis/tracker/db/tracker.db</dbfile>
</tracker>
<default_libs>
<lib path="/usr/share/n2c5-dev/jarvis/plugin"/>
<lib path="/usr/share/n2c5-dev/jarvis/hook"/>
<lib path="/usr/share/n2c5-dev/jarvis/login"/>
<lib path="/usr/share/n2c5-dev/lib"/>
</default_libs>
<dataset_dir>/usr/share/n2c5-dev/jarvis/datasets</dataset_dir>
<sessiondb store="driver:file;serializer:default;id:md5" expiry="+1M" cookie="N2C5_CGISESSID">
<parameter name="Directory" value="/tmp"/>
</sessiondb>
<!-- This must be a non-SCREENS_USER account. See comments in LoginSMF.pm code. -->
<database name="smf" username="smf" password="s3cur3"
connect="dbi:Oracle:host=10.42.2.151;port=1521;sid=SMF" />
<!-- Custom Login Module for SMF. -->
<login module="LoginSMF">
<parameter name="login_groups" value="*"/>
</login>
<!-- SELECT obj_name FROM iors WHERE obj_name LIKE '%smsTrigDaemon'; -->
<bpl_ior_name>tcl-t-sms02-smsTrigDaemon</bpl_ior_name>
<!-- Site-specific configuration of relevant profile fields. -->
<profiles>
<acct_type>
<group id="credit" name="Credit Card Limits"
collapsible="no" collapsed="no">
<field tag="136" writers="*" name="Daily Limit $"
render="integer" type="long" minval="0" maxlen="4"/>
<field tag="137" writers="*" name="Weekly Limit $"
render="integer" type="long" minval="0" maxlen="4"/>
<field tag="138" writers="*" name="Monthly Limit $"
render="integer" type="long" minval="0" maxlen="4"/>
</group>
</acct_type>
<acct_reference>
<group id="default" name="Base Details"
collapsible="no" collapsed="no">
<field tag="200" writers="*" name="First Name"
render="string" type="string"/>
<field tag="201" writers="*" name="Last Name"
render="string" type="string"/>
<field tag="37" writers="*" name="Language"
render="language" type="long"/>
<field tag="private_secret" writers="*" name="PIN"
render="password" type="string" maxlen="4" regex="^(|[0-9]{4}|\*\*\*\*)$"/>
<field tag="204" name="First Recharge"
render="checkbox" type="byte"/>
</group>
<group id="credit" name="Credit Card Limits"
collapsible="no" collapsed="no">
<field tag="136" writers="*" name="Daily Limit $"
render="integer" type="long" minval="0" maxlen="4"/>
<field tag="137" writers="*" name="Weekly Limit $"
render="integer" type="long" minval="0" maxlen="4"/>
<field tag="138" writers="*" name="Monthly Limit $"
render="integer" type="long" minval="0" maxlen="4"/>
</group>
<group id="announcement" name="Disable Pre-call Announcements"
collapsible="no" collapsed="no">
<field tag="203" writers="*" name="Balance"
render="checkbox" type="byte"/>
<field tag="240" writers="*" name="Time"
render="checkbox" type="byte"/>
</group>
<group id="speed" name="Speed Dials"
collapsible="yes" collapsed="yes">
<field tag="231" writers="*" name="Speed Dial #1"
render="string" regex="^[0-9]*$" maxlen="20" type="string"/>
<field tag="232" writers="*" name="Speed Dial #2"
render="string" regex="^[0-9]*$" maxlen="20" type="string"/>
<field tag="233" writers="*" name="Speed Dial #3"
render="string" regex="^[0-9]*$" maxlen="20" type="string"/>
</group>
<group id="originating" name="Originating Filters"
collapsible="yes" collapsed="yes">
<field tag="210" writers="*" name="Originating Whitelist Active"
render="checkbox" type="byte"/>
<field tag="211" writers="*" name="Originating Whitelist"
render="list" regex="^[0-9]*$" maxlen="20" type="tree"/>
<field tag="212" writers="*" name="Originating Whitelist Exceptions"
render="list" regex="^[0-9]*$" maxlen="20" type="tree"/>
<field tag="213" writers="*" name="Originating Blacklist Active"
render="checkbox" type="byte"/>
<field tag="214" writers="*" name="Originating Blacklist"
render="list" regex="^[0-9]*$" maxlen="20" type="tree"/>
<field tag="215" writers="*" name="Originating Blacklist Exceptions"
render="list" regex="^[0-9]*$" maxlen="20" type="tree"/>
</group>
<group id="info2" collapsible="no" collapsed="no">
<field tag="414" name="Account Sub-Type:" render="span" type="string"/>
</group>
</acct_reference>
</profiles>
<!-- Adjustment limits by SMF template. Amount in "bigs" (i.e. dollars). -->
<adjustment>
<limit>
<group name="ACS_BOSS" amount="200"/>
<group name="CCS Customer Care" amount="10"/>
</limit>
</adjustment>
<!-- Extra configuration for various unit types. -->
<unit_type unit_name="cash">
<!-- Note: Highlight entries need to be in ASCENDING total order. Amount in "smalls". -->
<expenditure balance_name="Total Usage" label="Total Usage" combined="no"/>
<expenditure balance_name="Total Usage" label="Total Value" combined="yes">
<highlight total="10000000" class="grey"/> <!-- $1000 -->
</expenditure>
</unit_type>
<!-- Access is ** on the Page module, since it also serves our login page. -->
<plugin dataset="generate-page" access="**" module="GeneratePage" add_headers="no">
<parameter name="template_dir" value="/usr/share/n2c5-dev/template"/>
<parameter name="dictionary" value="/usr/share/n2c5-dev/etc/dictionary.txt"/>
<parameter name="definitions.edr_filter_functions" value="all,call,activity,credit_card"/>
</plugin>
<plugin dataset="subscriber-info" access="*" module="SubscriberInfo"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="subscriber-profile-update" access="*" module="SubscriberProfileUpdate"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="subscriber-wallet" access="*" module="SubscriberWallet"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="subscriber-wallet-update" access="*" module="SubscriberWalletUpdate"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="subscriber-wallet-recharge" access="*" module="SubscriberWalletRecharge"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="subscriber-bucket-expiry" access="*" module="SubscriberBucketExpiry"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="subscriber-edrs" access="*" module="SubscriberEdrs"
add_headers="yes" mime_type="application/json">
<!-- List of modules in EdrProcess/<module>.pm to invoke the ::process () method -->
<parameter name="process" value="Default,Vodafone"/>
<!-- Do we trim trailing zeros off our littles? If so, how far down to trim. -->
<parameter name="trim_littles" value="2"/>
<!-- How do we format costs?
1. type [default]
Separate values for each balance type (ie. General Cash, Promotional Cash).
<balance type name> <value>[, <balance type name> <value>]
2. unit
Summed values for each balance type unit (ie. cash, SMSs, minutes).
<value>[, <value>]
-->
<parameter name="cost_format" value="unit"/>
</plugin>
<plugin dataset="subscriber-cli-add" access="*" module="SubscriberCliAdd"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="subscriber-cli-delete" access="*" module="SubscriberCliDelete"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="voucher-replace" access="*" module="VoucherReplace"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="voucher-info" access="*" module="VoucherInfo"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="call-report" access="*" module="CallReport"
add_headers="yes" mime_type="application/json">
<parameter name="img_dir" value="/usr/share/n2c5-dev/htdocs/img"/>
</plugin>
<plugin dataset="product-info" access="*" module="ProductInfo"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="product-profile-update" access="*" module="ProductProfileUpdate"
add_headers="yes" mime_type="application/json"/>
<plugin dataset="rate-table-info" access="*" module="RateTableInfo"
add_headers="yes" mime_type="application/json"/>
</app>
</jarvis>
Each configuration parameter is described a subsequent section of this chapter of the Technical Guide.