3 Background Processes on the SMS

This chapter provides a description of the programs or executables used by CCS as background processes on the SMS.

Executables are in the /IN/service_packages/CCS/bin directory.

Some executables have accompanying scripts that run the executables after performing certain cleanup functions. All scripts should be in the same directory as the executable.

For more information about the processes and systems that use these programs and executables, see System Overview.

WARNING:

It is a prerequisite for managing these core service functions that the operator is familiar with the basics of Unix process scheduling and management. Specifically, the following Unix commands:
  • init (and inittab)

  • cron (and crontab)

  • ps

  • kill

CHECK_PC_DELETION

This procedure is run once a day through a script /IN/service_packages/CCS/bin/ccs_pc_delete.sh launched through the crontab of the ccs_oper user.

Do a crontab –e as ccs_oper to see the related entry in the crontab or to change the date of occurrence.

This procedure will fully delete any periodic charges that are ready for final deletion. This includes all references to the periodic charge in other tables and also all references to the associated balance type. Deletion of a periodic charge will include any references to the charge by the Subscriber Profile Manager.

Deletion Criteria

A periodic charges that is ready for final deletion has the following criteria:

  • DELETION_DATE is not null and is earlier than (<) sysdate.

acsCompilerDaemon

The acsCompilerDaemon generates the fast-lookup binary compiled control plan data which is then used by the ACS service logic to process calls at running time.

The acsCompilerDaemon runs continuously, polling the database to look for newly written control plans and control plan structures (for example, indicated by database field ACS_CALL PLAN.BUILD = B). It polls the database every “alertTimeout” seconds. Due to the way Oracle reacts to signals, signals are masked during the time the process is both waiting for an alert to occur and the time spent compiling control plans.

You need to configure acsCompilerDaemon for the CCS system to run successfully because CCS runs as an ACS service.

It is run by acs_oper in the acs.conf file.

For more information about ACS, control plans and the acs.conf file, see ACS Technical Guide.

Startup - Nonclustered

In a non clustered environment this task is started automatically by entry acs0 in the inittab, through the /IN/service_packages/ACS/bin/acsComplierDaemonStartup.sh shell script.

You can check if the process is running by using the Unix ps command. We assume that you are familiar with Unix processes and with the Unix commands to manage them.

To check the process, enter:
ps -ef | grep acsCompilerDaemon
Result: If the acsCompilerDaemon is running, you should see output like the following:
acs 23857 23853 49 14:33:20 pts/5 0:00 acsCompilerDaemon

When ACS is installed, the startup inittab entry is added by the install process. The inittab entry waits until Oracle has started and then runs.

Startup - Clustered

In a clustered environment this task is started automatically by the Sun Plex manager. The files required by the Sun Plex manager are located in the /opt/ESERVAcsCompilerDaemon directory.

This is configured by the acsCluster package, and will set up the use of the Sun Plex manager to start, stop, restart and move the failover processes to other nodes as required.

Location

This binary is located on the SMS node.

Parameters

The acsCompilerDaemon does not support any command line parameters; it is completely configured in the acs.conf file. For more information about the acs.conf file, see ACS Technical Guide.

Failure

If the acsCompilerDaemon has failed, then control plans will not be compiled. This can be detected by running the following SQL statement on the SMF database instance:
SELECT ID from ACS_CALL_PLAN where BUILD='B';

Under normal operation, control plans will only remain in the B state for a few seconds at most.

Output

The acsCompilerDaemon writes error messages to the system messages file, and also writes additional output to /IN/service_packages/ACS/tmp/acsCompilerDaemon.log.

ccsBeOrb

The ccsBeOrb interface is responsible for updating and retrieving subscriber account states for other processes. Updates to an account are also made from this ORB interface to the other Voucher and Wallet Server in the pair.

About Configuring CORBA Connections for ccsBeOrb

The CorbaServices section in the eserv.config configuration file on the SMS node defines common connection parameters for CORBA services for ccsBeOrb. The CorbaServices configuration overrides the default and command-line values specified for CORBA listen ports and addresses. If you are using IP version 6 addresses, then you must include the CorbaServices section in the eserv.config file. However, this section is optional if you are using only IP version 4 addresses.

You configure the CorbaServices section of the eserv.config configuration file on the SMS by using the following syntax:
CorbaServices = {
    AddressInIOR = "hostname"
    ccsBeOrbListenPort = port
    OrbListenAddresses = [
        "ip_address1",
        "ip_address2",
]
}

Where:

  • hostname is the hostname or IP address to place in the IOR (Interoperable Object Reference) for the CORBA service.

  • port is the number of the port on which ccsBeOrb will listen. The ccsBeOrbListenPort parameter overrides the port number set by the listenPort parameter.

  • ip_address1,ip_address2 lists the IP addresses on which CORBA services listen for incoming requests. The list of IP addresses in the OrbListenAddresses parameter can include both IP version 6, and IP version 4 addresses. The OrbListenAddresses parameter overrides the IP address set by the listenHost parameter.

For more information about configuring CORBA services, see Service Management System Technical Guide.

Startup - Nonclustered

This task is started by entry ccs3 in the inittab, through the /IN/service_packages/CCS/bin/ccsBeOrbStartup.sh shell script.

You can check if the process is running by using the Unix ps command.

To check the process, enter:
ps -ef | grep ccsBeOrb

Result: The listed process is the compiler process.

ccsBeOrb Start-Up for Operational Implementation

The ccsBeOrb process is started automatically by placing it in the Unix Initialization table, inittab.

To start the compiler manually, enter:
CCS_ROOT/bin/ccsBeORB

Result: Placing the ccsBeOrb startup script in the inittab file ensures that if ccsBeOrb should die, it will be automatically restarted by the operating system within a few seconds.

Startup - Clustered

In a clustered environment this task is started automatically by the Sun Plex manager. The files required by the Sun Plex manager are located in the /opt/ESERVCcsBeOrb directory.

This is configured by the ccsCluster package and will set up the use of the Sun Plex manager to start, stop, restart and move the failover processes to other nodes as required.

Location

This binary is located on the SMS node.

Restart

Under certain circumstances, it is desirable to restart ccsBeOrb in order to pick up some configuration changes with minimal interruption to service. The most likely reasons for this would be:

  • A new ccsBeOrb program has been compiled and linked

  • Configuration file eserv.config has been modified

In this case, you can use ps to determine the process ID of the ccsBeOrb process, and use kill -TERM to terminate the process.

Shutdown

To terminate the ccsBeOrb, use the Unix command ps to identify the process number and terminate it manually. Or, you can use the provided shell script, kill_CCS_be_orb to simplify the task.

Configuration - eserv.config

ccsBeOrb is configured by the ccsBeOrb section of the eserv.config file. The structure of the section is shown below.

Note:

For more information about the configuration for the BeClient provided by the libBeClientIF library, see VWS Technical Guide.
ccsBeOrb = {
    beLocationPlugin = "lib"
    oracleUserPass = "usr/pwd"
    clientName = "name"

    heartbeatPeriod = microsecs
    messageTimeoutSeconds = seconds
    maxOutstandingMessages = int
    reportPeriodSeconds = seconds
    connectionRetryTime = seconds

    plugins = [
        {
            config="confStr",
            library="lib",
            function="str"
        }
        [...]
    ]

    confStr = { 
        plugin configuration
    }

    notEndActions = [
        {type="str", action="[ACK |NACK]"}
        [...]
    ]

    plugin configuration - see plug-in-specific config
    
    stateConversions = {
        A|P|D|F|S|T = "str"[,
        ...]
    }
    voucherStateConversions = {
        A|F|R|C|D|H = "str"[,
        ...]
    }
    namingServer = {
        host = "host",
        port = port,
        name = "str"
        addHostPrefix = true|false
    }
    billingEngines = [
        {
            id = id,
            primary = { ip="ip", port=port },
            secondary = { ip="ip", port=port }
        }
        [...]
    ]
}

eserv.config Parameters

The ccsBeOrb supports the following parameters in the ccsBeOrb section of the eserv.config file.

Note:

This configuration section is also used by the ccsVWARSExpiry service library.

billingEngines

Syntax:
billingEngines = [
    { id = int
     primary = { ip="ip", port=port },
     secondary = { ip="ip", port=port }
    }
    [...]
]
Description: Overrides connection details that beLocationPlugin obtains from the database.
Type: Parameter array.
Optionality: Optional (beLocationPlugin finds connection details if not set).
Allowed: Not Applicable.
Default: Not Applicable.
Notes: Identifies the Voucher and Wallet Servers and assigns their Internet connection details.
Example:
billingEngines = [
    { id = 1,
     primary = { ip="192.0.2.0", port=1500 },
     secondary = { ip="192.0.2.1", port=1500 }
    }
]

id

Syntax: id = int
Description: This unique identifier for this Voucher and Wallet Server configuration.
Type: Integer.
Optionality: Required, if this section is used.
Allowed: Not Applicable.
Default: Not Applicable.
Notes: This parameter is part of the billingEngines parameter array.
Example: id = 1

ip

Syntax: ip = "ip"
Description: The Internet Protocol (IP) address of the Voucher and Wallet Server.
Type: String.
Optionality: Required.
Allowed: IP version 4 (IPv4) addresses, IP version 6 (IPv6) addresses.
Default: None.
Notes:

This parameter is part of either the primary, or the secondary parameter group of the billingEngines parameter array.

You can use the industry standard for omitting zeros when specifying IPv6 addresses.

Examples:
ip = "192.0.2.0"
ip = "2001:db8:0000:1050:0005:0600:300c:326b"
ip = "2001:db8:0:0:0:500:300a:326f"
ip = "2001:db8::c3"

port

Syntax: port = port
Description: The port number associated with the address of the Voucher and Wallet Server.
Type: Integer.
Optionality: Required.
Allowed: Not Applicable.
Default: None.
Notes: This parameter is part of either the primary or secondary parameter group of the billingEngines parameter array.
Example: port = 1500

primary

Syntax: primary = { ip="ip", port=port }
Description: The primary parameter group defines the Internet Protocol (IP) address and associated port number of the primary Voucher and Wallet Server.
Type: Parameter array.
Optionality: Required, if this section is used.
Allowed: Not Applicable.
Default: None.
Notes: This parameter is part of the billingEngines parameter array.
Examples:
primary = { ip="192.0.2.0", port=1500 }
primary = { ip = "2001:db8:0000:1050:0005:0600:300c:326b", port=1500 }
primary = {ip = "2001:db8:0:0:0:500:300a:326f", port=1500 }
primary = { ip = "2001:db8::c3", port=1500 }

secondary

Syntax: secondary = { ip="ip", port=port }
Description: The secondary parameter group defines the Internet Protocol (IP) address and associated port number of the secondary Voucher and Wallet Server.
Type: Array.
Optionality: Required, if this section is used.
Allowed: Not Applicable.
Default: None.
Notes: This parameter is part of the billingEngines parameter array.
Examples:
secondary = { ip="192.0.2.1", port=1500 }
secondary = { ip = "2001:db8:0000:1050:0005:0600:300c:326b", port=1500 ]
secondary = {ip = "2001:db8:0:0:0:500:300a:326f", port=1500 }
secondary = { ip = "2001:db8::c3", port=1500 }

broadcastOptions

Syntax:
broadcastOptions = { 
    aggregateNAckCodes = [config]
}
Description: Name of configuration section for the BeClient Broadcast plug-in libclientBcast.
Type: Parameter array.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes:

libclientBcast is used by a range of processes which connect to the beServer, including:

  • BeClient
  • PIbeClient
  • ccsBeOrb

For more information about libclientBcast, see libclientBcast.

Example:
broadcastOptions = { 
    aggregateNAckCodes = [ ]
}

aggregateNAckCodes

Syntax:
aggregateNAckCodes = [
    "NVOU"
]
Description: When this parameter is set, the BeClient waits for a response from all the VWS pairs in use and filters the responses from the broadcast request using the configured NAck codes.
Type: Parameter array.
Optionality: Not Applicable.
Allowed: NVOU
Default: None.
Notes: When a voucher recharge request is broadcast, this ensures that all the available VWS pairs are checked for the required voucher before a voucher not found message is returned to the requesting process.
Example: Not Applicable.

clientName

Syntax: clientName = "name"
Description: The unique client name of the process.
Type: String.
Optionality: Required.
Allowed: Must be unique.
Default: The host name of the local machine.
Notes:

The server generates clientId from a hash of str.

If more than one client attempts to connect with the same name, then some connections will be lost.

This parameter is used by libBeClientIF.

Example: clientName = "scpClient"

connectionRetryTime

Syntax: connectionRetryTime = seconds
Description: The maximum number of seconds the client process will wait for a connection to succeed before attempting a new connection.
Type: Integer.
Optionality: Required.
Allowed: Not Applicable.
Default: 5
Notes: This parameter is used by libBeClientIF.
Example: connectionRetryTime = 2

heartbeatPeriod

Syntax: heartbeatPeriod = microsecs
Description: The number of microseconds during which a Voucher and Wallet Server heartbeat message must be detected, or the BeClient process will switch to the other VWS in the pair.
Type: Integer.
Optionality: Required.
Allowed:
  • 0: Disable heartbeat detection.
  • positive integer: Heartbeat period.
Default: 3000000.
Notes:

1000000 microseconds = 1 second.

If no heartbeat message is detected during the specified time, client process switches to the other Voucher and Wallet Server in the pair.

This parameter is used by libBeClientIF.

Example: heartbeatPeriod = 10000000

listenHost

Syntax: listenHost = "hostname"
Description: The name of the host or the IP address on which ccsBeOrb will listen for incoming CORBA requests. An empty string implies all addresses.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: If listenHost is not set, then it defaults to the IP address corresponding to the result of the hostname UNIX command. If both an IP version 4 (IPv4) and an IP version 6 (IPv6) address exists for the hostname, then the IPv6 address will be used.
Notes: Not Applicable.
Example: listenHost = ""

listenPort

Syntax: listenPort = port
Description: The number of the port on which ccsBeOrb will listen for incoming CORBA requests.
Type: Integer.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 0
Notes: The default (listenPort = 0) sets a random port.
Example: listenPort = 10024

maxOutstandingMessages

Syntax: maxOutstandingMessages = num
Description: The maximum number of messages allowed to be waiting for a response from the Voucher and Wallet Server.
Type: Integer
Optionality: Required
Allowed: Not Applicable.
Default: If this parameter is not set, the maximum is unlimited.
Notes:

If more than this number of messages are waiting for a response from the Voucher and Wallet Server, the client process assumes the Voucher and Wallet Server is overloaded. In this event, the client process refuses to start new calls but continues to service existing calls.

The messages are queued until the Voucher and Wallet Server has reduced its outstanding load.

This parameter is used by libBeClientIF.

Example: maxOutstandingMessages = 100

mergeWalletsOptions

Syntax:
mergeWalletsOptions = {
        oracleLogin = "name/password"
        mergeBucketExpiryPolicy = "outcome"
        mergeWalletExpiryPolicy = "outcome"
        allowedSourceWalletStates = "states"
        mergeWalletsTriggers = ["MGW "]
}
Description: Configuration for the beClientIF plug-in.
Type: Parameter group
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

allowedSourceWalletStates

Syntax: allowedSourceWalletStates = "str[...]"
Description: The states the source wallet must be in to allow it to be merged with another wallet.
Type: String.
Optionality: Required.
Allowed:
  • P: Pre-use
  • A: Active
  • D: Dormant
  • S: Suspended
  • F: Frozen
  • T: Terminated
Default: None.
Notes: At least one state must be included, or all merged will be disallowed.
Example: allowedSourceWalletStates = "PA"

oracleLogin

Syntax: oracleLogin = "usr/pwd"
Description: The login details the BeClient should use to log in to the SMF database, when performing merge wallet functions.
Type: String.
Optionality: Optional.
Allowed: Not Applicable.
Default: /
Notes: Not Applicable.
Example: oracleLogin = "smf/smf"

mergeBucketExpiryPolicy

Syntax: mergeBucketExpiryPolicy = "str"
Description: Determines what happens when the source wallet and destination wallet have buckets of the same balance type.
Type: String.
Optionality: Optional (default used if not set).
Allowed:

merge:

Update the bucket in the destination wallet. The updated bucket will have the:

  • combined value of the two buckets, and
  • expiry of whichever bucket has the latest expiry date.

move:

Create a new bucket in the destination wallet. The new bucket will have the same balance type, value and expiry date as the bucket from the source wallet.

Default: merge
Notes: Not Applicable.
Example: mergeBucketExpiryPolicy = "move"

mergeWalletExpiryPolicy

Syntax: mergeWalletExpiryPolicy = "str"
Description: Determines the way expiry dates for merged wallets are managed.
Type: String.
Optionality: Optional.
Allowed:
  • best: The expiry date of the wallet with the most time left is used.
  • ignore: The expiry date of the source wallet is ignored.
Default: best
Notes: Not Applicable.
Example: mergeWalletExpiryPolicy = "best"

mergeWalletsTriggers

Syntax:
mergeWalletsTriggers = [
"str [...]"
]
Description: Wallets of this type starts the merge wallets plug-in.
Type: Array of strings.
Optionality: Required.
Allowed: MGW.
Default: None.
Notes: The Syntax must be typed exactly as shown in the example.
Example: mergeWalletsTriggers = ["MGW "]

messageTimeoutSeconds

Syntax: messageTimeoutSeconds = seconds
Description: The time that the client process will wait for the server to respond to a request.
Type: Integer.
Units: Seconds.
Optionality: Required.
Allowed:
  • 1-604800: Number of seconds to wait.
  • 0: Do not time out.
Default: 2
Notes:

After the specified number of seconds, the client process will generate an exception and discard the message associated with the request.

This parameter is used by libBeClientIF.

Example: messageTimeoutSeconds = 2

namingServer

Syntax:
namingServer = {
    host = "hostName",
    port = portNumber,    
    name = "clientName"
}
Description: Registers with smsNamingServer so that screens can find the ccsBeOrb service.
Type: Parameter group.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

addHostPrefix

Syntax: addHostPrefix = true|false
Description: Whether or not to add the hostname as a prefix to the BeClient name when connecting to the beServer.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed:
  • true: Add the prefix.
  • false: Do not add the prefix.
Default: true.
Notes: Must be set to true.
Example: addHostPrefix = false

host

Syntax: host = "hostName"
Description: The hostname of the machine ccsBeOrb is running on.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: localhost
Notes: The host parameter is part of the namingServer parameter group.
Example: host = "produsms01"

name

Syntax: name = "clientName"
Description: The name of the client.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: ccsBeClientOrb
Notes:

The name parameter is provided for backwards compatibility with old screens.

The name parameter is part of the namingServer parameter group.

Example: name = "ccsBeClientOrb"

port

Syntax: port = portNumber
Description: The number of the port on which the client listens.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 5556
Notes: Not Applicable.
Example: port = 5556

notEndActions

Syntax:
notEndActions = [
    {type="str", action="[ACK|NACK]"}
    [...]
]
Description: The notEndActions parameter array is used to define the messages associated with dialogs that should not have their dialog closes, because the dialog is closed by default. This facilitates failover.
Type: Parameter array.
Optionality: Required.
Allowed: Not Applicable.
Default: None.
Notes:

If the incoming dialog for a call closes and the last response received was of the notEndActions type, the client process sends an ABRT message. The ABRT message allows the VWS to remove the reservation. An example of this situation would be where slee_acs has stopped working.

This parameter is used by libBeClientIF.

For more information about slee_acs, see ACS Technical Guide.

Example:
notEndActions = [
    {type="IR ", action="ACK "}
    {type="SR ", action="ACK "}
    {type="SR ", action="NACK"}
    {type="INER", action="ACK "}
    {type="SNER", action="ACK "}
    {type="SNER", action="NACK"}
]

plugins

Syntax:
plugins = [
    {
        config=""
        library="lib"
        function="str"
    }
    ...
]
Description: Defines any client process plug-ins to run. Also defines the string which maps to their configuration section.
Type: Parameter array.
Optionality: Optional (as plug-ins will not be loaded if they are not configured here, this parameter must include any plug-ins which are needed to supply application functions; for more information about which plug-ins to load, see the BeClient section for the application which provides the BeClient plug-ins).
Allowed: Not Applicable.
Default: Empty (that is, do not load any plug-ins).
Notes:

The libclientBcast plug-in must be placed last in the plug-ins configuration list.

For more information about the libclientBcast plug-in, see VWS Technical Guide.

This parameter is used by libBeClientIF.

Example:
plugins = [
    {
        config="broadcastOptions"
        library="libclientBcast.so"
        function="makeBroadcastPlugin"
    }
]

config

Syntax: config="name"
Description: The name of the configuration section for this plug-in. This corresponds to a configuration section within the plugins section in the eserv.config file.
Type: String.
Optionality: Required (must be present to load the plug-in).
Allowed: Not Applicable.
Default: No default
Notes: Not Applicable.
Example: config="voucherRechargeOptions"

function

Syntax: function="str"
Description: The function the plug-in should perform.
Type: String.
Optionality: Required (must be present to load the plug-in).
Allowed: Not Applicable.
Default: No default
Notes: Not Applicable.
Example: function="makeVoucherRechargePlugin"

library

Syntax: library="lib"
Description: The filename of the plug-in library.
Type: String.
Optionality: Required (must be present to load the plug-in).
Allowed: Not Applicable.
Default: No default
Notes: Not Applicable.
Example: library="libccsClientPlugins.so"

reportPeriodSeconds

Syntax: reportPeriodSeconds = seconds
Description: The number of seconds separating reports of failed messages.
Type: Integer.
Units Seconds.
Optionality: Required.
Allowed: Not Applicable.
Default: 10
Notes:

BeClient issues a failed message report:

  • For timed-out messages
  • For unrequested responses
  • For new calls rejected because of congestion
  • For messages with invalid Voucher and Wallet Server identifiers
  • If new and subsequent requests fail because both Voucher and Wallet Servers have stopped working

VWS heartbeat detection must be enabled for the parameter to work. Set reportPeriodSeconds to more than heartbeatPeriod.

This parameter is used by libBeClientIF.

Example: reportPeriodSeconds = 10

stateConversions

Syntax:
stateConversions = {
    A = "ACTV",
    P = "PREU",
    D = "DORM"
    F = "FROZ",
    S = "SUSP",
    T = "TERM"
    H = "RSVD"
}
Description: Converts from ESCHER encoding to a single character and back.
Type: Array
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

voucherRechargeOptions

Syntax:
voucherRechargeOptions = {
    srasActivatesPreuseAccount = true|false
    voucherRechargeTriggers = [
        "VRW
    ]
    sendBadPin = true|false
}
Description: Configures the voucher recharge plug-in.
Type: Array
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

sendBadPin

Syntax: sendBadPin = true|false
Description: Whether or not to increment the Bad PIN count for a failed voucher redeem.
Type: Boolean.
Optionality: Optional.
Allowed:
  • true – Increment Bad PIN count for each failed attempt to recharge a voucher.
  • false – Do not increment Bad PIN count for failed attempts to recharge a voucher.
Default: false.
Notes:

This parameter:

  • applies only to an invalid voucher number or voucher PIN. It does not apply to failed wallet recharges.
  • is part of the voucherRechargeOptions parameter group.
Example: sendBadPin = false

srasActivatesPreuseAccount

Syntax: srasActivatesPreuseAccount = true|false
Description: Sets whether or not alternate subscribers can activate subscriber accounts which are in a pre-use state.
Type: Boolean.
Optionality: Optional.
Allowed:
  • true – A scratch card alternate subscriber can activate a pre-use account.
  • false – A scratch card alternate subscriber cannot activate a pre-use account.
Default: true
Notes:

This parameter is:

  • Not used by ccsBeOrb.
  • Part of the voucherRechargeOptions parameter group.
Example: srasActivatesPreuseAccount = false

voucherRechargeTriggers

Syntax:
voucherRechargeTriggers = [
    "VRW "
]
Description: This message triggers the voucher recharge plug-in.
Type: Array.
Optionality: Required.
Allowed: VRW.
Default: None.
Notes: This parameter array is part of the voucherRechargeOptions parameter group.
Example: Not Applicable.

voucherServerCacheLifetime

Syntax: voucherServerCacheLifetime = seconds
Description: Time in seconds to hold items in the voucher server ID cache.
Type: Integer.
Optionality: Optional.
Allowed: Any positive decimal integer.
Default: 600 (seconds).
Notes: Not Applicable.
Example: voucherServerCacheLifetime = 600

voucherServerCacheCleanupInterval

Syntax: voucherServerCacheCleanupInterval = seconds
Description: Time in seconds between purges of the voucher server id cache.
Type: Integer.
Optionality: Optional.
Allowed: Any positive decimal integer.
Default: 60 (seconds)
Notes: Not Applicable.
Example: voucherServerCacheCleanupInterval = 60

voucherTypeRechargeOptions

Syntax:
voucherTypeRechargeOptions = {
    srasActivatesPreuseAccount = true|false
    voucherTypeRechargeTriggers = ["VTR "]
}
Description: Configures the voucher type recharge plug-in.
Type: Parameter group.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

srasActivatesPreuseAccount

Syntax: srasActivatesPreuseAccount = true|false
Description: Sets whether or not alternate subscribers can activate subscriber accounts which are in a pre-use state.
Type: Boolean.
Optionality: Optional.
Allowed:
  • true – A scratch card alternate subscriber can activate a pre-use account.
  • false – A scratch card alternate subscriber cannot activate a pre-use account.
Default: true.
Notes:

This parameter is:

  • Not used by ccsBeOrb.
  • Part of the voucherRechargeOptions parameter group.
Example: srasActivatesPreuseAccount = false

voucherTypeRechargeTriggers

Syntax:
voucherTypeRechargeTriggers = [
    str [...]"
]
Description: Starts the voucher type recharge plug-in.
Type: Array.
Optionality: Required.
Allowed: VRW.
Default: None.
Notes: This parameter array is part of the voucherTypeRechargeOptions parameter group.
Example: voucherTypeRechargeTriggers = ["VTR "]

voucherStateConversions

Syntax:
voucherStateConversions = {
    str = "ESCHER"[,
    ...]
}
Description: Converts from ESCHER encoding to a single character and back.
Type: Array.
Optionality: Required.
Allowed:
  • A = "ACTV" (Active)
  • F = "FRZN" (Frozen)
  • R = "RDMD" (Redeemed)
  • C = "CRTD" (Created)
  • D = "DLTD" (Deleted)
  • H = "RSVD" (Held)
Default: None.
Notes: Not Applicable.
Example:
voucherStateConversions = {
    A = "ACTV",
    F = "FRZN",
    R = "RDMD",
    C = "CRTD"
    D = "DLTD"
    H = "RSVD"
}
Voucher and Wallet Plug-Ins

There are four plug-ins which provide functionality for the PIbeClient:

  • Voucher recharge (VRW)

  • Voucher type recharge (VTR)

  • Merge wallets (MGW)

  • Broadcast Plug-In

Note:

The broadcast plug-in configuration must be placed last in the plugins configuration section.

Each plug-in can have a configuration section. The name of this subsection will match the string provided for the config parameter in the plugins subsection.

Example: The Voucher Recharge plug-in has config set to voucherRechargeOptions. So, the configuration section for this plug-in is:
voucherRechargeOptions = {
    ...
}
Broadcast Plug-In

The Broadcast PIbeClient plug-in overrides the beLocationPlugin that would normally load connection details from the database.

The plugins section must include the following configuration to load this plug-in.
{
    config="",
    library="libccsClientPlugins.so",
    function="makeBroadcastPlugin" 
}

Note:

  • This plug-in must be the last in the plugins subsection.

  • This plug-in has no configuration.

  • The broadcast plug-in is required by the VRW and VTR plug-ins.

Example eserv.config

Here is an example ccsBeOrb section of the CCS section of the eserv.config.

Usage:
ccsBeOrb = {
    listenHost = ""
    listenPort = 10024
    clientName = "usmsprod01-ccsBeOrb"
    heartbeatPeriod = 10000000
    maxOutstandingMessages = 100
    connectionRetryTime = 2
    requestTimeoutSeconds = 0 
    plugins = [
        { # Voucher recharge (VRW) plugin
        config="voucherRechargeOptions",
        library="libccsClientPlugins.so",
        function="makeVoucherRechargePlugin"
        }
        { # Voucher Type recharge (VTR) plugin
        config="voucherTypeRechargeOptions",
        library="libccsClientPlugins.so"
        function"makeVoucherTypeRechargePlugin"
        }

        { # Merge Wallets plugin
        config="mergeWalletsOptions",
        library="libccsClientPlugins.so",
        function="makeMergeWalletsPlugin"
        }
        { # Broadcast plugin needed by VRW
        config="broadcastOptions", 
        library="libclientBcast.so",
        function="makeBroadcastPlugin"
        }
    ]

    broadcastOptions = { 
        aggregateNAckCodes = [
            "NVOU"
        ]
    }

    voucherRechargeOptions = {
        srasActivatesPreuseAccount = false
        voucherRechargeTriggers = [
            "VRW "
        ]
        voucherServerCacheLifetime = 600
        voucherServerCacheCleanupInterval = 60
        sendBadPin = false
    }

    voucherTypeRechargeOptions = {
        srasActivatesPreuseAccount=false
        voucherTypeRechargeTriggers = ["VTR "]
    }

    mergeWalletsOptions = {
        oracleLogin = "/"
        mergeBucketExpiryPolicy = "merge"
        mergeWalletExpiryPolicy = "best"
        allowedSourceWalletStates = "PADS"
        mergeWalletsTriggers = ["MGW "]
    }

    notEndActions = [
        {type="IR ", action="ACK "}
        {type="SR ", action="ACK "}
        {type="SR ", action="NACK"}
        {type="INER", action="ACK "}
        {type="SNER", action="ACK "}
        {type="SNER", action="NACK"}
    ]
    stateConversions = {
        A = "ACTV",
        P = "PREU",
        D = "DORM"
        F = "FROZ",
        S = "SUSP",
        T = "TERM"
    }
    voucherStateConversions = {
        A = "ACTV",
        F = "FRZN",
        R = "RDMD"
        C = "CRTD"
        D = "DLTD"
        H = "RSVD"
    }
    namingServer = {
        host = "usmsprod01",
        port = 5556,
        name = "ccsBeClientOrb"
    }
    billingEngines = [
        { id = 1,
         primary = { ip="190.0.2.0", port=1500 },
         secondary = { ip="190.0.2.1", port=1500 }
        }
    ]
}

Failure

If the ccsBeORB fails, updates to accounts will fail.

Output

The ccsBeORB writes error messages to the system messages file, and also writes additional output to /IN/service_packages/CCS/tmp/ccsBeOrb.log.

ccsCB10HRNAES

The ccsCB10HRNAES library is available only if you have purchased the Voucher Management license. For more information about this library, see Voucher Manager Technical Guide.

ccsCB10HRNSHA

The ccsCB10HRNSHA library is available only if you have purchased the Voucher Management license. For more information about this library, see Voucher Manager Technical Guide.

ccsCDRFileGenerator

ccsCDRFileGenerator takes EDRs created through the CCS UI and writes them to a flat file equivalent. This file of EDRs is then get loaded into CCS_BE_CDR by ccsCDRLoader.

Startup - Nonclustered

This task is started by entry ccs7 in the inittab, through the /IN/service_packages/CCS/bin/ccsCDRFileGeneratorStartup.sh shell script.

Startup - Clustered

In a clustered environment this task is started automatically by the Sun Plex manager. The files required by the Sun Plex manager are located in the /opt/ESERVCcsCDRFileGenerator directory.

This is configured by the ccsCluster package, and will set up the use of the Sun Plex manager to start, stop, restart and move the failover processes to other nodes as required.

Parameters

The ccsCDRFileGenerator section includes the following parameters from the CCS section of eserv.config:

Usage:
ccsCDRFileGenerator = {
    OutputDirectory = "/IN/service_packages/CCS/logs/CDR"
    BaseName = "ccsCDRFileGenerator"
    OracleUsernamePassword = "smf/smf"
    SleepDuration = 60
    BillingEngineID = 0
    SCPID = 0
}

The available parameters are:

BaseName

Syntax: BaseName = "name"
Description: Base name of the output files
Type: String
Optionality: Mandatory
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

BillingEngineID

Syntax: BillingEngineID = id
Description: Billing Engine ID.
Type: Integer
Optionality: Optional (default used if not set)
Allowed: Not Applicable.
Default: 0
Notes: This should not match any actually installed BEID.
Example: Not Applicable.

OracleUsernamePassword

Syntax: OracleUsernamePassword = "usr/pwd"
Description: Username and password used to connect to SMF database.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/"
Notes: Not Applicable.
Example: Not Applicable.

OutputDirectory

Syntax: OutputDirectory = "dir"
Description: Directory name where ccsCDRFileGenerator will write output files.
Type: String.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: None
Notes: Not Applicable.
Example: Not Applicable.

SCPID

Syntax: SCPID = id
Description: ID of the SLC.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 0
Notes: Not Applicable.
Example: Not Applicable.

SleepDuration

Syntax: SleepDuration = secs
Description: The number of seconds ccsCDRFileGenerator will pause before generating a new file.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 60
Notes: Not Applicable.
Example: Not Applicable.

TempOutputDirectory

Syntax: TempOutputDirectory = "dir"
Description: The directory where the temporary files will be generated.
Type: String.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

Failure

If ccsCDRFileGenerator fails, any EDRs generated through the CCS UI will fail.

Output

The ccsCDRFileGenerator writes error messages to the system messages file, and also writes additional output to /IN/service_packages/CCS/tmp/ccsCDRFileGenerator.log.

ccsCDRLoader

The EDR loader (ccsCDRLoader) process periodically scans its input directory for EDR files. To the information it finds in these files, the process adds extra information derived from its plug-in libraries. It then writes the lot to the CCS_BE_CDR table in the database.

Some customers want to retain event data records outside the Convergent Charging Controller system. The FileWriterCDRLoaderPlugin therefore rewrites each EDR so that it contains the same information as the database. Rewritten EDRs are placed in an output directory. See overview Diagram.

Reprocessing Failed EDRs

If a CDR loader plug-in fails to process a particular EDR, then the ccsCDRLoader process carries out the following actions:

  1. Save the EDR to a file for reprocessing. Any processing changes prior to the plug-in that failed are retained.
  2. Add a special FAILED_PLUGIN tag holding the name of the plug-in which failed to the EDR.
  3. Report the plug-in error in the log file.

When reprocessing EDRs, the ccsCdrLoader carries out the following actions:

  1. If it finds an EDR that contains the FAILED_PLUGIN tag, then it iterates through the plug-in list until it finds the plug-in held in the FAILED_PLUGIN tag.
  2. ccsCDRLoader then processes the EDR starting from the failed plug-in.

Note:

You configure the location and maximum size of files that contain the failed EDRs by setting the errDir and maxPluginFailFileSize parameters in eserv.config.

Oracle Configuration

ccsCDRLoader requires an SMF entry in the Oracle file tnsnames.ora. The entry should be in the following format:

SMF =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP) (HOST = hostname) (PORT = 1521))
    (CONNECT_DATA = (SID = SMF)))

Where

hostname is the host name of the SMS machine.

If required, this entry may be modified depending on the individual platform and connection requirements.

Note:

For more information about configuring tnsnames.ora, see Oracle Net8 Admin Guide.

Startup - Nonclustered

In a non clustered installation the ccsCDRLoader is started by an entry in the inittab, through the /IN/service_packages/CCS/bin/ccsCDRLoaderStartup.sh shell script.

Multiple Loaders

To allow multiple instances of the CDRLoader to run in parallel, two environment variables can be specified in the startup script for each CDRLoader to override the eserv.config parameters, for example:

Script 1:

/IN/service_packages/CCS/.profile-sms
CCSCDRLOADER_INDIR=/IN/service_packages/CCS/tmp/CDR1/CDR-in
export CCSCDRLOADER_INDIR
CCSCDRLOADER_OUTDIR=/IN/service_packages/CCS/tmp/CDR1/CDR-store
export CCSCDRLOADER_OUTDIR
exec /IN/service_packages/CCS/bin/ccsCDRLoader

Script 2:

/IN/service_packages/CCS/.profile-sms
CCSCDRLOADER_INDIR=/IN/service_packages/CCS/tmp/CDR2/CDR-in
export CCSCDRLOADER_INDIR
CCSCDRLOADER_OUTDIR=/IN/service_packages/CCS/tmp/CDR2/CDR-store
export CCSCDRLOADER_OUTDIR
exec /IN/service_packages/CCS/bin/ccsCDRLoader

Note:

To define a TZ that the NOTICE messages by ccsCDRLoader are logged in, add DEBUG_TZ environment variable in the ccsCDRLoaderStartupStartup.sh script before the exec statement. For example: export DEBUG_TZ=Asia/Kolkata.

Startup - Clustered

In a clustered environment the ccsCDRLoader is started automatically by the Sun Plex manager. The files required by the Sun Plex manager are located in the /opt/ESERVCcsCDRLoader directory.

This is configured by the ccsCluster package at installation, and will set up the use of the Sun Plex manager to start, stop, restart and move the failover processes to other nodes as required.

ccsCDRLoader Command Line Parameters

The ccsCDRLoader process supports the following optional command line parameters:

ccsCDRLoader [--input_tz timeZone] [--vwars_range vwars_num[-vwars_num]] [--serverID ID] [--inDir dir] [--outDir dir]

Where:

  • [--input_tz timeZone] specifies the time zone in which date fields will be present in the incoming CDR/EDR.

    Timezome specified should be a UNIX time zone name. Applicable TZ conversion will be from input_tz value to FileWriterCDRLoaderPlugin.cdrTimeZone (eserv.config).

    Note:

    • No timezone conversion will happen if input_tz is not specified.
    • If input_tz and FileWriterCDRLoaderPlugin.cdrTimeZone (eserv.config) values are same, then no conversion will take place.

    Example syntax: ccsCDRLoader --input_tz GMT

  • --vwars_range vwars_num[-vwars_num] specifies the beVWARS number or number range for which EDR files will be processed. You must specify non-negative numbers for the vwars_num values.

    The EDR filenames must include the string "beVWARS-" followed by a beVWARS number within the specified range. EDR files with filenames that do not include this string are skipped. In addition, EDRs that are generated by the ccsCDRFileGenerator process will be matched only if the ccsCDRFileGenerator output filename contains the "beVWARS-" string. You configure the ccsCDRFileGenerator output filename to include this string by setting its BaseName parameter.

    Example syntax: ccsCDRLoader --vwars_range 0-2

  • --serverID ID (string) specifies the unique server ID for the input files that will be processed by this instance of ccsCDRLoader. ccsCDRLoader matches the server ID against any part of the EDR input filename, and not just the hostname of the server that generated the EDR file.

    Example syntax: ccsCDRLoader --serverID vws01

  • --inDir dir specifies the path and directory location of the input files. This value overrides the input directory configured for ccsCDRLoader in the eserv.config configuration file.

    Example syntax: ccsCDRLoader --inDir /IN/service_packages/CCS/logs/CDR-in

  • --outDir dir specifies the path and directory location of the output files. This value overrides the output directory configured for ccsCDRLoader in the eserv.config configuration file.

    Example syntax: ccsCDRLoader --outDir /IN/service_packages/CCS/logs/CDR-store/vws-0-2

ccsCDRLoader Plug-In Libraries

The ccsCDRLoader can be extended by installing plug-in libraries. This section lists the ccsCDRLoader plug-in libraries that are available as a standard. Other plug-in libraries may also be installed as required.

The plug-ins are included in the pluginLibs array.

AcsCustIdPlugin

This plug-in library checks the EDR for the presence of the ACS_CUST_ID tag. If it is not present, the plug-in looks up ACS_CUST_ID in the ACS_ACCT table on the VWS, using the ACCT_ID tag from the EDR to identify the correct record in the table.

This function is contained within the libAcsCustIdPlugin.so library, and is used if this library is referenced within the pluginLibs array.

Note:

This plug-in library does not accept any parameters.
AcctHistPlugin

This plug-in library updates the CCS_ACCT_HIST_INFO table with account details, such as expiry date, when processing relevant EDRs.

This function is contained within the libAcctHistPlugin.so library.

See AcctHistPlugin Parameters for configuration details.

CDRStoreDBPlugin

This plug-in library updates the CCS_BE_CDR table with EDR details.

This function is contained within the libCDRStoreDBPlugin.so.

Note:

This plug-in library does not accept any parameters.
CreditCardDetailsPlugin

This plug-in library, for CC_Recharge EDRs (type 9), updates the CCS_CREDIT_CARD_DETAILS table with the last recharge date.

This function is contained within the libCreditCardDetailsPlugin.so library.

Note:

This plug-in library does not accept any parameters.
FileWriterCDRLoaderPlugin

The plug-in has two functions:

  • FileWriterCDRLoaderPlugin rewrites each EDR file with the same information that CDRStoreDBPlugin writes to the database.

    After the EDR loader process reads an EDR file, other EDR loader plug-in libraries may add extra information. All of this information is then written to the database. Some customers want to extract event data records from the Oracle system and retain them elsewhere. The FileWriterCDRLoaderPlugin therefore rewrites each EDR so that it contains the same information as the database. Rewritten EDRs are placed in an output directory.

  • Optionally, FileWriterCDRLoaderPlugin converts time events recorded in the EDR source files to the equivalent time in a configured time zone. It uses the converted time events when it rewrites the EDRs.

    The Oracle system manages all time events as if they occurred in the Coordinated Universal Time (UTC) zone. When an EDR file is rewritten, you can have FileWriterCDRLoaderPlugin use a different time zone. To do that you set up FileWriterCDRLoaderPlugin's cdrTimeZone configuration parameter. If cdrTimeZone is not configured or is configured incorrectly, time events will be written for the UTC time zone.

MsisdnCDRLoaderPlugin

This plug-in is optionally loaded based on the presence of the libMsisdnCDRLoaderPlugin.so in the pluginLibs configuration array.

The purpose of this plug-in is to look up the MSISDN (CLI) corresponding to the ACCT_REF_ID in the EDR tag. For type 3 (expiration) EDRs, if the ACCT_REF_ID is '0' then the ACCT_ID field will be used to look up the MSISDN instead.

MsisdnCDRLoaderPlugin is configured in the MsisdnCDRLoader section of eserv.config.

RechargeSMSPlugin

This plug-in library sends notifications to subscribers after a recharge, for the following EDR types:

  • Recharge
  • Freeform Recharge
  • CC Recharge
  • Voucher Freeform Recharge

This function is contained within the libRechargeSMSPlugin.so library.

See RechargeSMSPlugin Parameters for configuration details.

VoucherRedeemFailPlugin

This plug-in is optionally loaded based on the presence of the libVoucherRedeemFailPlugin.so in the pluginLibs configuration array.

The purpose of this plug-in is to trap and report on all non successful EDR type 15 records.

VoucherRedeemFailPlugin is configured in the VoucherRedeemFail section of eserv.config.

Part of the reporting is the inclusion of the MSISDN, which is only available when the libMsisdnCDRLoaderPlugin.so is loaded. To ensure this, eserv.config must have the libMsisdnCDRLoaderPlugin.so plug-in entry before this libVoucherRedeemFailPlugin.so plug-in entry on the pluginLibs array.

VoucherRedeemPlugin

This plug-in library, for recharge EDRs, updates the CCS_VOUCHER_REFERENCE table with the account reference id and redemption date.

This function is contained within the libVoucherRedeemPlugin.so library and is only required if the Voucher Management module is installed.

This plug-in library is configured in the voucherRedeemPlugin section of eserv.config.

CDR Loader Plug-in Parameters

The ccsCDRLoader process, and its plug-ins, are configured by the parameters in the ccsCDRLoader section of the eserv.config file.

CDR Loader Configuration Example

The following configuration shows example configuration for the ccsCDRLoader process in the eserv.config file.

ccsCDRLoader = {
    inDir = "/IN/service_packages/CCS/logs/CDR-in"
    inDirType = "HASH"
    outDir = "/IN/service_packages/CCS/logs/CDR-store"
    outDirType = "HASH"
    outDirExpectedFiles = 65536
    outDirBucketSize = 128
    readAheadNumFiles = 25
    cdrBufferSize = 4096
    scanInterval = 1
    statisticsInterval = 60
    loadZeroLenthCalls = true
    dbUserPass = "/"
    suffixToIgnore = ".tmp"
    commitInterval = 500
    filePocessing = "DELETE"
    maxPluginFailFileSize = 5000
    errDir = "/IN/service_packages/CCS/logs/CDR-err"
    pluginLibs = [
        "libAcsCustIdPlugin.so"
        "libVoucherRedeemPlugin.so"
        "libAcctHistPlugin.so"
        "libCreditCardDetailsPlugin.so"
        "libCDRStoreDBPlugin.so"
        "libFileWriterCDRLoaderPlugin.so"
        "libResetWaitForRechargePlugin.so"
        "libMsisdnCDRLoaderPlugin.so"
        "libVoucherRedeemFailPlugin.so"
    ]

    VoucherRedeemFail = {
        tempReportDirectory = "/IN/service_packages/CCS/tmp"
        archiveDirectory = "/IN/service_packages/CCS/logs/voucherRedeemFail"
        maxEDRs = 2000
        maxOpenDuration = 300
    }

    voucherRedeemPlugin = {
        useVoucherRedeemCDR = true
        additionalCdrTypes = [95,96]
    }

    AcctHistPlugin = {
        prodTypeSwapEventClass = "Product Type"
        prodTypeSwapEventName = "Product Type Swap"
        reasonChangeConfig = "/IN/service_packages/CCS/etc/changeReason.conf"
            acsCustomerIdData = [
                {
                    acsCustomerId = 1
                    promoCascade = "NE Test Promo Cascade"
                }
            ]
    }

    FileWriterCDRLoaderPlugin = {
        cdrTimeZone = "EST"
        ccsCDRFieldsTZ = [
            "RECORD_DATE"
            "TCS"
            "TCE"
            "ACTIVATION_DATE"
        ]
    }
}

CDR Loader Parameters

The ccsCDRLoader process supports the following parameters in the ccsCDRLoader section of the eserv.config file:

cdrBufferSize

Syntax: cdrBufferSize = int
Description: The size of the cache used by ccsCDRLoader and FileWriterCDRLoaderPlugin.
Type: Integer.
Units: Kilobyte.
Optionality: Optional.
Allowed: Not Applicable.
Default: 2048
Notes:

If you set readAheadNumFiles to be greater than 0 (zero), then set cdrBufferSize to a value that is large enough to cache input files by using the following formula:

cdrBufferSize = ((average_busy_period_input_file_size multiplied by readAheadNumFiles) plus buffer)

For example; if the average input file is 180 kilobytes and readAheadNumFiles is set to 20, then cdrBufferSize should be set to 4096. (cdrBufferSize = ((180 * 20) + 500) = 4100K)

Example: cdrBufferSize = 4096

commitInterval

Syntax: commitInterval = num
Description: The number of EDRs to process before writing them to the database.
Type: Integer
Optionality: Optional
Allowed: Not Applicable.
Default: 200
Notes: Not Applicable.
Example: commitInterval = 200

dbUserPass

Syntax: dbUserPass = "name/password"
Description: Contains the user name and password required to log on to the database.
Type: String.
Optionality: Optional.
Allowed: Not Applicable.
Default: "/"
Notes: Not Applicable.
Example: dbUserPass = "/"

errDir

Syntax: errDir = "dir"
Description: The path for the directory where the files containing EDRs which have failed due to a plug-in problem will be moved.
Type: String.
Optionality: Optional (default used if not set).
Allowed: The directory path for an existing directory.
Default: "/IN/service_packages/CCS/logs/CDR"
Notes: Not Applicable.
Example: errDir = "/IN/service_packages/CCS/logs/CDR-err"

fileProcessing

Syntax: fileProcessing = "type"
Description: Determines the file process.
Type: String.
Optionality: Optional.
Allowed:
  • DELETE: Time zone conversion is enabled.
  • MOVE: Time zone conversion is disabled.
Default: "MOVE".
Notes: The time conversion feature of FileWriterCDRLoaderPlugin is affected by the fileProcessing parameter.
Example: fileProcessing = "DELETE"

inDir

Syntax: inDir = "dir"
Description: The directory from which EDRs are read.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/logs/CDR/in"
Notes: Not Applicable.
Example: inDir = "/IN/service_packages/CCS/logs/CDR-in"

inDirType

Syntax: inDirType = "storeType"
Description: Determines whether the input directory will be treated as a flat file store or a hash file store.
Type: String.
Optionality: Optional.
Allowed:
  • FLAT: Sub-directories are not searched.
  • HASH: All files, including those in sub-directories, are processed.
Default: "FLAT".
Notes: Can be set to HASH even if the directory is a flat file store, but not the other way around.
Example: inDirType = "FLAT"

loadZeroLengthCalls

Syntax: loadZeroLengthCalls = true|false
Description: Defines whether zero-duration calls will be processed or skipped.
Type: Boolean.
Optionality: Optional.
Allowed:
  • true: Zero-duration calls are processed.
  • false: Zero-duration calls are skipped.
Default: true
Notes: Not Applicable.
Example: loadZeroLengthCalls = true

maxPluginFailFileSize

Syntax: maxPluginFailFileSize = size
Description: The maximum size in KBs for files containing EDRs that have failed to process due to a plug-in problem. When a file containing failed EDRs reaches the maximum size, it is zipped and archived.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: A numeric value.
Default: 0 (zero).
Notes: If the default is used then the file will not be archived.
Example: maxPluginFailFileSize = 5000

pluginLibs

Syntax:
pluginLibs = [
    "1stLibrary"
    "2ndLibrary"
    …
    …
    …
    "nthLibrary"
]
Description: List of plug-in libraries to load.
Type: Parameter array.
Optionality: Optional.
Allowed: Not Applicable.
Default:
pluginLibs = [
]
Notes: Not Applicable.
Example:
pluginLibs = [
    "libAcsCustIdPlugin.so"
    "libVoucherRedeemPlugin.so"
    "libAcctHistPlugin.so"
    "libCreditCardDetailsPlugin.so"
    "libCDRStoreDBPlugin.so"
    "libFileWriterCDRLoaderPlugin.so"
]

outDir

Syntax: outDir = "dir"
Description: The directory to which EDRs are moved after they have been processed.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/logs/CDR/out"
Notes: Not Applicable.
Example: outDir = "/IN/service_packages/CCS/logs/CDR-store"

outDirBucketSize

Syntax: outDirBucketSize = filesPerLeaf
Description: The number of files per leaf directory when the output directory contains the number of files specified by the outDirExpectedFiles parameter.
Type: Integer.
Optionality: Optional.
Allowed: Not Applicable.
Default: 10
Notes: This parameter is ignored if outDirType = "FLAT".
Example: outDirBucketSize = 128

outDirExpectedFiles

Syntax: outDirExpectedFiles = numberOfFiles
Description: The number of EDR files expected in the directory defined by the outDir parameter.
Type: Integer.
Optionality: Optional.
Allowed: Not Applicable.
Default: outDirExpectedFiles = 100000
Notes: If outDirType = "FLAT", this parameter is ignored.
Example: outDirExpectedFiles = 65536

outDirType

Syntax: outDirType = "storeType"
Description: Sets the structure of the output directory defined by the outDir parameter.
Type: String.
Optionality: Optional.
Allowed: May be either FLAT or HASH.
Default: "FLAT"
Notes: Not Applicable.
Example: outDirType = "FLAT"

readAheadNumFiles

Syntax: readAheadNumFiles = int
Description: Sets the maximum number of EDR input files to load into cache per scanInterval. When set to 0 (zero), the ccsCDRLoader queues all the EDR input files in the inDir directory for processing. The processed files are moved to the outDir directory only after ccsCDRLoader has finished loading all of them.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: 0 or a positive integer.
Default: 0
Notes: When you set readAheadNumFiles to a value that is greater than zero, then the recommended value for the scanInterval parameter is 1 (one). This ensures timely processing of the input files.
Example: readAheadNumFiles = 25

scanInterval

Syntax: scanInterval = secs
Description: The number of seconds between scans of the directory specified in the inDir parameter.
Type: Integer.
Units: Seconds.
Optionality: Optional.
Allowed: Not Applicable.
Default: 600
Notes:
  • If the time taken to process the EDR input files is longer than the number of seconds specified for scanInterval, then the next scan occurs after processing has finished.
  • If you expect the queue of EDR input files to be large, then to prevent input file backlogs, set scanInterval to a low value; for example, 1.
Example: scanInterval = 1

statisticsInterval

Syntax: statisticsInterval = seconds
Description: The number of seconds between statistical output.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: Defaults to the value set for the scanInterval parameter.
Notes:

When set to:

  • Less than or equal to scanInterval, statistics are output on every scan
  • Greater than scanInterval, statistics are output following the next scan after statisticsInterval has expired
Example: statisticsInterval = 60

suffixToIgnore

Syntax: suffixToIgnore = "suffix"
Description: The suffix of files in the CDR in directory that should be ignored.
Type: String.
Optionality: Optional.
Allowed: Not Applicable.
Default: ".tmp"
Notes: For CDR files larger than the internal buffer size, ensures ccsCDRLoader is prevented from processing temporary files until the whole source CDR file has been processed.
Example: suffixToIgnore = ".tmp"

voucherRedeemPlugin

Syntax:
voucherRedeemPlugin = {
     useVoucherRedeemCDR = true|false
     additionalCdrTypes = [cdr_type]
}
Description: The configuration for VoucherRedeemPlugin plug-in.
Type: Not Applicable.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example:
voucherRedeemPlugin = {
     useVoucherRedeemCDR = true
     additionalCdrTypes = [95,96]
}

additionalCdrTypes

Syntax: additionalCdrTypes = [cdr_type]
Description: Allows additional CDR types to be added to the REDEEMED_DATE column of the BE_VOUCHER table.
Type: Array.
Optionality: Optional.
Allowed: A CDR type greater than 66 as per MAX value in ccsCDR.txt.
Default: Empty.
Notes: Not Applicable.
Example: additionalCdrTypes = [95,96]

useVoucherRedeemCDR

Syntax: useVoucherRedeemCDR = true|false
Description: Indicates that the Voucher Redeem CDR should be used instead of the Recharge CDR.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: false.
Notes: Needed for split billing environments.
Example: voucherRedeemCDR = true

VoucherRedeemFail

Syntax:
VoucherRedeemFail = {
     parameters
}
Description: Configuration for the VoucherRedeemFailPlugin plug-in.
Type: Not Applicable.
Optionality: Optional (defaults used if not present).
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

archiveDirectory

Syntax: archiveDirectory = "dir"
Description: The location of the redeemed fail EDR file.
Type: String.
Optionality: Optional (Default: used if not set).
Allowed: Not Applicable.
Default "/IN/service_packages/CCS/logs/voucherRedeemFail"
Notes: This directory and tempReportDirectory (on page 2) should be in the same file system otherwise archiving will fail.
Example: archiveDirectory = "/IN/service_packages/CCS/logs/voucherRedeemFail"

maxEDRs

Syntax: maxEDRs = num
Description: The maximum number of EDR records in the file.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 2000
Notes: Not Applicable.
Example: maxEDRs = 3000

maxOpenDuration

Syntax: maxOpenDuration = seconds
Description: The maximum amount of time in seconds the report file will be kept open.
Type: Integer
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 300
Notes: Not Applicable.
Example: maxOpenDuration = 500

tempReportDirectory

Syntax: tempReportDirectory = "dir"
Description: The directory where temporary report with failed voucher redeem records is stored.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/tmp"
Notes: This directory and archiveDirectory should be in the same file system otherwise archiving will fail.
Example: tempReportDirectory = "/IN/service_packages/CCS/tmp"

AcctHistPlugin

Syntax:
AcctHistPlugin = {
     parameters
}
Description: Configures the account history plug-in.
Type: Parameter group.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example:
AcctHistPlugin = {
    prodTypeSwapEventClass = "Product Type"
    prodTypeSwapEventName = "Product Type Swap"
    reasonChangeConfig = "/IN/service_packages/CCS/
    etc/changeReason.conf"
    acsCustomerIdData = [
    {
    acsCustomerId = 1
    promoCascade = "NE Test Promo Cascade"
    }
    ]
}

acsCustomerIdData

Syntax:
acsCustomerIdData = [
    {
        acsCustomerId = 1stIdentifier
        promoCascade = "1stName"
    }
    {
        acsCustomerId = 2ndIdentifier
        promoCascade = "2ndName"
    }
    …
    …
    …
    {
        acsCustomerId = nthIdentifier
        promoCascade = "nthName"
    }
]
Description: Lists data specific to each ACS customer ID.
Type: Parameter array.
Optionality: Optional
Allowed: Not Applicable.
Default: None.
Notes: This parameter array is part of the AcctHistPlugin parameter group.
Example: Not Applicable.

acsCustomerId

Syntax: acsCustomerId = identifier
Description: The number identifying the customer to whom this set of balances applies.
Type: Integer.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: None.
Notes: This parameter is part of the acsCustomerIdData parameter array.
Example: acsCustomerId = 1

promoCascade

Syntax: promoCascade = "name"
Description: The name of the promotional cascade that is saved in the CASCADE field of the EDR.
Type: String.
Optionality: Mandatory.
Allowed: This value must match an entry name in the Balance Type Cascades list, see Charging Control Services User's Guide, Balance Type Cascades topic.
Default: None.
Notes: This parameter is part of the acsCustomerIdData parameter array.
Example: promoCascade = "NE Test Promo Cascade"

prodTypeSwapEventClass

Syntax: prodTypeSwapEventClass = "class"
Description: The content of the EVENT_CLASS field of product type swap EDRs.
Type: String.
Optionality: Optional.
Allowed: Not Applicable.
Default: "Product Type"
Notes: This parameter is part of the AcctHistPlugin parameter group.
Example: prodTypeSwapEventClass = "Product Type"

prodTypeSwapEventName

Syntax: prodTypeSwapEventName = "name"
Description: The content of the EVENT_NAME field of product type swap EDRs.
Type: String.
Optionality: Optional.
Allowed: Not Applicable.
Default: "Product Type Swap"
Notes: This parameter is part of the AcctHistPlugin parameter group.
Example: prodTypeSwapEventName = "Product Type Swap"

reasonChangeConfig

Syntax: reasonChangeConfig = "dir"
Description: The path to, and name of, the reason change configuration file.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes:
  • changeReason.conf lists available state changes and reasons for the changes. Information listed in is arranged in the following format:

    OldState;NewState;Reason

    For example:

    A;D;Active to Dormant

    D;A;Dormant to Active

    P;A;Active from Pre-Use

    The maximum reason length is 24 characters. If a longer reason is specified it will be truncated.

  • This parameter is part of the AcctHistPlugin parameter group.
Example:
reasonChangeConfig = "/IN/service_packages/
CCS/etc/changeReason.conf"

RechargeSMSPlugin

Syntax:
RechargeSMSPlugin = {
    parameters
}
Description: Configuration for the recharge SMS plug-in.
Type: Parameter group.
Optionality: Optional.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

smsFifoName

Syntax: smsFifoName = "dir"
Description: The path to and the name of the FIFO file to which SMS requests are written.
Type: String.
Optionality: Optional.
Allowed: Not Applicable.
Default: "/tmp/ccsSSMRequest.fifo"
Notes: This parameter is part of the RechargeSMSPlugin parameter array.
Example: smsFifoName = "/tmp/ccsSSMRequest.fifo"

smsQueueSize

Syntax: smsQueueSize = num
Description: The maximum number of short messages to buffer.
Type: Integer.
Optionality: Optional.
Allowed: Not Applicable.
Default: 1000
Notes: This parameter is part of the RechargeSMSPlugin parameter array.
Example: smsQueueSize = 1000

smsTTL

Syntax: smsTTL = seconds
Description: The maximum time that messages will be buffered.
Type: Integer.
Units: Seconds.
Optionality: Optional.
Allowed: Not Applicable.
Default: 600
Notes: This parameter is part of the RechargeSMSPlugin parameter array.
Example: smsTTL = 600

FileWriterCDRLoaderPlugin

Syntax:
FileWriterCDRLoaderPlugin = {
    cdrTimeZone = "zone"
    ccsCDRFieldsTZ = [
    "1stTag"
    "2ndTag"
    .
    .
    .
    "nthTag"
    ]
}
Description: Configuration for the file writer plug-in.
Type: Parameter group.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

ccsCDRFieldsTZ

Syntax:
ccsCDRFieldsTZ = [
    "1stTag"
    "2ndTag"
    .
    .
    .
    "nthTag"
]
Description: The time event field in the EDR file that will be converted to the time zone defined by the cdrTimeZone parameter.
Type: Array
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: This parameter is part of the FileWriterCDRLoaderPlugin parameter group.
Example:
ccsCDRFieldsTZ = [
    "RECORD DATE"
    "TCS"
    "TCE"
    "ACTIVATION DATE"
    "NEW_ACCT_EXPIRY"
    "NEW_BALANCE_EXPIRES"
    "OLD_ACCT_EXPIRY"
    "OLD_BALANCE_EXPIRES"
]

cdrTimeZone

Syntax: cdrTimeZone = "tz"
Description: The time zone for time events written to EDR files.
Type: String.
Optionality: Mandatory.
Allowed: A UNIX time zone name.
Default: Not Applicable.
Notes:
  • You can see UNIX time zone names in the /usr/share/lib/zoneinfo directory. Type ls to see the high-level time zones. To see the sub-zones for say Asia, enter ls Asia/.
  • This parameter is part of the FileWriterCDRLoaderPlugin parameter group.
Example: cdrTimeZone = "Dubai"

MsisdnCDRLoader

Syntax:
MsisdnCDRLoader = {
    parameters
}
Description: Configuration for the msisdn plug-in.
Example:
MsisdnCDRLoader = {
    CopyCliToMsisdn = true
    CopyCliToMsisdnRegExp = "(\\|CDR_TYPE=13\\||\\|SERVICE=WIFI$|\\|SERVICE=WIFI|\\|)"
}

CopyCliToMsisdn

Syntax: CopyCliToMsisdn = true|false
Description: Sets whether or not to copy the CLI value to the MSISDN tag when processing an EDR.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed:
  • true: Copy the CLI value to the MSISDN tag.
  • false: Do not copy the CLI to the MSISDN.
Default: false
Notes: If set to true and copyCLiToMsisdnRegExp is also set, then the CLI will not be copied to the MSISDN if a match is found for the expression defined in the copyCliToMsisdnRegExp parameter.
Example: CopyCliToMsisdn = true

CopyCliToMsisdnRegExp

Syntax: CopyCliToMsisdnRegExp = "(\\|exp\\|)"
Description: Defines the expression to match. When a match occurs the CopyCliToMsisdn parameter is ignored and the EDR processing does not copy the CLI value to the MSISDN tag.
Type: String.
Optionality: Optional.
Allowed: A valid regular expression. Double \\ (escapes) are required.
Default: Not Applicable.
Notes: In the example below, the WIFI service will be matched for type 13 EDRs if the SERVICE tag appears in the middle or the end of the EDR. The CLI copy to MSISDN will not take place.
Example: CopyCliToMsisdnRegExp = "(\\|<CRD_TYPE=13>\\||\\|SERVICE=WIFI$\\|SERVICE=WIFI\\|)"

Failure

If the ccsCDRLoader fails, updates from the EDR files will not be completed. The EDR files will accumulate in the input directory.

Output

The ccsCDRLoader writes error messages to the system messages file, and also writes additional output to /IN/service_packages/CCS/tmp/ccsCDRLoader.log.

ccsCDRTrimDB

The ccsCDRTrimDB process trims excess EDR records from the database. The excess records can be defined by one of the following:

  • Wallet or subscriber ID
  • The size of the cached records

This process modifies the CCS_BE_CDR table in the SMF. It gets the wallet/subscriber ID information from CCS_ACCT_ID. Rows are ordered by ID and RECORD_DATE.

The ccsCDRTrimDB process is not a daemon. It needs to be run manually or by cron.

Startup

The ccsCDRTrimDB process is run in the crontab for ccs_oper. By default, it runs each night. It is scheduled by the /IN/service_packages/CCS/bin/ccsCDRTrimDBStartup.sh shell script.

Usage

ccsCDRTrimDB [-n int] [-c int]
[-h|--help]

Parameters

The ccsCDRTrimDB process supports the following command-line options.

-c

Syntax: -c int
Description:

Sets the size of a buffer that will cache the records to be deleted. Records will be deleted when the:

  • Buffer is full
  • Last record in the table is reached
Type: Integer
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 196
Notes: Not Applicable.
Example: -c 64

-n

Syntax: -n int
Description: The maximum number of EDRs a subscriber can have.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 196
Notes: Not Applicable.
Example: -n 256

-h or --help

Displays the help text file.

Example

This text shows an example of a command line startup for ccsCDRTrimDB.

ccsCDRTrimDB -n 256 -c 64

Note:

This text may also be put in a startup shell script, such as ccsCDRTrimDBStartup.sh.

Failure

If the ccsCDRTrimDB process fails, records will accumulate in the SMF database.

Output

The ccsCDRTrimDB process writes error messages to the system messages file. It also writes additional output to the /IN/service_packages/CCS/tmp/ccsCDRTrimDBStartup.sh.log file.

ccsCDRTrimFiles

The ccsCDRTrimFiles process deletes EDR files that have reached a nominated maximum age.

The ccsCDRTrimFiles process is not a daemon; it needs to be run manually or by cron.

Startup

This task is run in the crontab for ccs_oper. By default it runs each night. It is scheduled by the /IN/service_packages/CCS/bin/ccsCDRTrimFilesStartup.sh shell script:

Usage

ccsCDRTrimFiles [-d dir] [-a age] [-h| --help]

Parameters

The ccsCDRTrimFiles process supports the following command-line options.

-a

Syntax: -a age
Description: Maximum age allowed in days. Files older than this value will be removed.
Type: Not Applicable.
Optionality: Optional (default used if not set).
Allowed Not Applicable.
Default: 1
Notes: Not Applicable.
Example: -a 1

-d

Syntax: -d dir
Description: Directory containing EDR files.
Type: Not Applicable.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: /logs/CDR/indexed
Notes: Not Applicable.
Example: -d /logs/CDR/indexed

-h or --help

Displays the help text file.

Failure

If the ccsCDRTrimFiles process fails, EDRs will collect in the indexed directory.

Output

The ccsCDRTrimFiles process writes error messages to the system messages file. It also writes additional output to the /IN/service_packages/CCS/tmp/ccsCDRTrimFilesStartup.sh.log file.

ccsChangeDaemon

ccsChangeDaemon updates assignment of periodic charges to wallets. On the SMS ccsChangeDaemon handles periodic charge changes when a subscriber:

  • Is associated with a new wallet.
  • Changes product type for a wallet.

The daemon receives its tasks by reading CCS_PC_QUEUE table, which is hosted on the SMS and is replicated to the VWS.

Note:

A ccsSLEEChangeDaemon also runs on the VWS. For more information, see ccsSLEEChangeDaemon.

Startup

On startup, the daemon will check for the -r flag, if it does not find it, it will run in SMS mode.

On a nonclustered SMS environment this task is started automatically by an entry in the inittab, through the /IN/service_packages/CCS/bin/ccsChangeDaemonStartup.sh shell script.

On a clustered SMS, startup is controlled by a failover resource group.

Configuration

ccsChangeDaemon supports parameters from the ccsChangeDaemon parameter group in the eserv.config file on the SMS. It contains parameters arranged in the structure shown in the example below.

ccsChangeDaemon = {
    PollPeriod = seconds
    suppressCcsPcQueueMessage = true | false
    throttle = int
    batchSize = int
    
    beClient = {
        clientName = "name"
        heartbeatPeriod = microsecs
        connectionRetryTime = seconds
        messageTimeoutSeconds = seconds

        billingEngines = [
            { id = int,
            primary = { ip="ip", port=port }, 
            secondary = { ip="ip", port=port } 
            }
        ]
    }
}

eserv.config Parameters

ccsChangeDaemon supports the following parameters from the CCS section of the eserv.config file on SMS.

pollPeriod

Syntax: pollPeriod = seconds
Description: Period in seconds between database reads.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 60
Notes: The CCS_PC_QUEUE table lists all outstanding work for the ccsChangeDaemon.
Example: pollPeriod = 60

ptsUnsubscribeFromPCsForNonApplyPCs

Syntax: ptsUnsubscribeFromPCsForNonApplyPCs = boolean
Description: Controls if periodic charges (PCs) are unsubscribed when the account type is changed and the new account type is allowed the periodic charge, but it doesn't have Apply to existing set. When set to true (the default), and when the account type is changed for a wallet, all periodic charges for the service provider that are not marked as Apply to existing and allowed for the new product type will be unsubscribed from.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: true
Notes: Not Applicable.
Example: ptsUnsubscribeFromPCsForNonApplyPCs = true

throttle

Syntax: throttle = num
Description: The maximum number of Voucher and Wallet Server updates per second.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed:
  • 0: Disable throttling (no limit).
  • positive integer: Update limit.
Default: 1000
Notes: Not Applicable.
Example: throttle = 1000

batchSize

Syntax: batchSize = num
Description: The maximum number of CCS_PC_QUEUE records to be processed every polling period.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 100
Notes: Not Applicable.
Example: batchSize = 200

beClient

Syntax: beClient = [{ config }]
Description: The configuration for the connection to the beServer on the VWS.
Type: Parameter array.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: Not Applicable.
Notes:

This configuration is for the libBeClientIF library which ccsChangeDaemon uses to manage the connection.

For more information about this library, see VWS Technical Guide.

Example: Not Applicable.

billingEngines

Syntax:
billingEngines = [
    { id = id
    primary = { ip="ip", port=port },
    secondary = { ip="ip", port=port }
    }
]
Description:

Overrides connection details that beLocationPlugin obtains from the database.

For more information about the parameters included in the array, see billingEngines configuration for the ccsBeOrb process.

Type: Array.
Optionality: Optional.
Allowed: Not Applicable.
Default: Not Applicable.
Notes:

Identifies the Voucher and Wallet Servers and assigns their Internet connection details.

Include this section to ensure that ccsChangeDaemon only connects to the local domain. If omitted, ccsChangeDaemon will connect to all VWS domains.

Example:
billingEngines = [
    { id = CHANGE_ME,
    primary = { ip="PRIMARY_BE_IP", port=1500 }, 
    secondary = { ip="SECONDARY_BE_IP", port=1500 } 
    }
]

clientName

Syntax: clientName = "name"
Description: The unique client name of the process.
Type: String.
Optionality: Mandatory.
Allowed: Must be unique.
Default: "ccsChangeDaemon"
Notes: If more than one client connects with the same name the BE server will drop the other, therefore name must be unique.
Example: clientName = "be1_ccsSLEEChangeDaemon"

connectionRetryTime

Syntax: connectionRetryTime = seconds
Description: The maximum number of seconds the client process will wait for a connection to succeed before attempting a new connection.
Type: Integer.
Optionality: Required.
Allowed: Not Applicable.
Default: 5
Notes: This parameter is used by libBeClientIF.
Example: connectionRetryTime = 2

heartbeatPeriod

Syntax: heartbeatPeriod = microsecs
Description: The number of microseconds during which a Voucher and Wallet Server heartbeat message must be detected, or the BeClient process will switch to the other VWS in the pair.
Type: Integer.
Optionality: Optional (Default used if not present).
Allowed:
  • 0: Disable heartbeat detection.
  • positive integer: Heartbeat period.
Default: 30000000
Notes: 1000000 microseconds = 1 second.
Example: heartbeatPeriod = 30000000

messageTimeoutSeconds

Syntax: messageTimeoutSeconds = seconds
Description: The time that the client process will wait for the server to respond to a request.
Type: Integer.
Units Seconds.
Optionality: Required.
Allowed:
  • 1-604800: Number of seconds to wait.
  • 0: Do not time out.
Default: 2
Notes:

After the specified number of seconds, the client process will generate an exception and discard the message associated with the request.

This parameter is used by libBeClientIF.

Example: messageTimeoutSeconds = 2

BE eserv.config Parameters

The following parameters are available in the BE section of the eserv.config file.

amPrimary

Syntax: amPrimary = true|false
Description: True if this is the primary VWS in the pair.
Type: Boolean.
Optionality: Optional, default used if not set.
Allowed: Not Applicable.
Default: true
Notes: Not Applicable.
Example: amPrimary = false

beLocationPlugin

Syntax: beLocationPlugin = "lib"
Description: The plug-in library that finds the Voucher and Wallet Server details of the Voucher and Wallet Servers to connect to.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: libGetccsBeLocation.so
Notes: This library must be in the LD_LIBRARY_PATH.
Example: beLocationPlugin = "libGetccsBeLocation.so"

serverId

Syntax: serverId = id
Description: The ID of the VWS pair.
Type: Integer.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 1
Notes: Set to 1 if this is not a VWS.
Example: serverId = 11

Failure

While ccsChangeDaemon is down, periodic charge assignment updates will not be run on the local machine.

This table describes the recovery and failure files used by ccsChangeDaemon to attempt to recover after a failure.

File Details
.failed

These files are written on both the SMS. They have the following naming convention:

.failed.ACSCustomerID.CCS_PC_QUEUE.ID

An entry is written to this file for each wallet update which initially fails. They contain a line for each failure:

SubscriberId|WalletId|PeriodicChargeBalanceTypeId|ProductId|ChangeType|ChangeAction|DomainId|NumberOfBalanceTypes|[|BalanceTypeId|BucketId|BucketValue[|...]]

Each time ccsChangeDaemon adds an entry to this file, it will also raise an Error level alarm. ccsChangeDaemon reads the entries in this file and attempts to reprocess them. Once all the entries in the file have been reprocessed, the ccsChangeDaemon deletes them.

failed

These files are written on the SMS. They have the following naming convention:

failed.ACSCustomerID.CCS_PC_QUEUE.ID

An entry is written to this file every time an entry in the .failed file is re-sent, and fails a second time. This file's first two lines are:

# Periodic Charge Change Daemon: failed updates
# SubscriberId|WalletId|PeriodicChargeBalanceTypeId|
ChangeType|ChangeAction|DomainId|NumberOfBalanceTypes|[|BalanceTypeId|BucketId|BucketValue[|...]]

Then there is an entry for each wallet update which fails a second time:

SubscriberId|WalletId|PeriodicChargeBalanceTypeId|ChangeType|ChangeAction|DomainId|NumberOfBalanceTypes|[|BalanceTypeId|BucketId|BucketValue[|...]]

Each time ccsChangeDaemon writes an entry to this file, it will raise an Error level alarm.

Failure files are left for manual recovery.

Note:

If an operation fails due to a "No Connection" error, ccsChangeDaemon will raise a LOGGED_WARNING and stop processing the row.

Output

ccsChangeDaemon writes recovery and failure logs to /IN/service_packages/CCS/logs/ccsSLEEChangeDaemon/ccsPCChange/.

If one of these files cannot be written to, the ccsChangeDaemon will exit with a critical error (for alarm details, see CCS Alarms Reference Guide).

ccsChangeDaemon writes error messages to the system messages file, and writes additional output to /IN/service_packages/CCS/tmp/ccsChange.log.

ccsExpiryMessageLoader

Sends short messages to subscribers to warn them that their wallet or balance will expire shortly. The list of subscribers is generated by ccsExpiryMessageGenerator on the VWSs and transferred to the SMS.

Startup

This task is run in the crontab for ccs_oper. By default, it runs at 9 am each morning. It is scheduled directly through /IN/service_packages/CCS/bin/ccsExpiryMessageLoader.

Example

ExpiryMessages = {
        walletExpiryPeriod = 15
        numberOfWalletWarnings = 3
        balanceExpiryPeriod = 10
        numberOfBalanceWarnings = 3
        balanceTypes = [ 1, 2 ]
        onlyForLatestBucketExpiry = false
        oracleUsername = ""
        oraclePassword = ""
        generatorFilename = "ccsExpiryMessages"
        generatorFiledir = "/IN/service_packages/CCS/logs/expiryMessageWrite/"
        inputDirectory = "/IN/service_packages/CCS/logs/expiryMessageRead/"
        cmnPushFiles = [
        "-d", "/IN/service_packages/CCS/logs/expiryMessage/"
        "-r", "/IN/service_packages/CCS/logs/expiryMessage/"
        "-h", "SMF_HOST"
        "-p", "2027"
        "-F"
    ]
    pauseTime = 1
    batchSize = 2048
}

Note:

This section is also used by ccsExpiryMessageGenerator.

Parameters

The ccsExpiryMessageLoader supports the following parameters from the CCS section of eserv.config.

balanceExpiryPeriod

Syntax: balanceExpiryPeriod = days
Description:

Number of days before a Balance expires.

Before the Balance expires, three expiry warning messages are sent, each at different times.

The first message is sent balanceExpiryPeriod days before the wallet expires.

The second and third messages are sent at two-thirds and one-third of balanceExpiryPeriod, respectively.

Type: Not Applicable.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 10
Notes: This parameter is optional. If it is omitted, no messages will be sent.
Example: balanceExpiryPeriod = 10

balanceTypes = [ ]

Syntax: balanceTypes = [num]
Description:

Specifies the balance types that should have expiry warning messages.

When a new ACS customer is added, any balance types requiring expiry notifications should be added here.

Type: Array
Optionality: Optional
Allowed: Not Applicable.
Default: No messages are sent.
Notes: Balance types are not split up for different ACS customers even though balance type identifiers belong to ACS customers.
Example: balanceTypes = [ 1, 2 ]

batchSize

Syntax: batchSize = num
Description: The number of lines read from a file before a pause.
Type: Not Applicable.
Optionality: Optional
Allowed: Not Applicable.
Default: 2048
Notes:

If it is not used:

  • Pauses will occur only between files
  • Throttling will not occur
Example: batchSize = 2048

cmnPushFiles = [ ]

For the eserv.config on the VWS, use the cmnPushFiles configuration to transfer files to the SMS. There they will be ready for processing by ccsExpiryMessageLoader. Include the -F option to detect the file in use. See cmnPushFiles for all parameters.

Note:

These directories must match those set by the generatorFiledir parameter.

generatorFiledir

Syntax: generatorFiledir = "dir"
Description: Directory for newly created expiry message files.
Type: String.
Optionality: Optional (Default used if not specified).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/logs/expiryMessage/"
Notes: This value required on both SMS and VWS machines. This value may be different on the two machines as long as cmnPushFiles has been configured to send and receive the appropriate directories.
Example: generatorFiledir = "/IN/service_packages/CCS/logs/expiryMessageWrite/"

generatorFilename

Syntax: generatorFilename = "filename"
Description: Prefix for the file read by ccsExpiryMessageLoader.
Type: Not Applicable.
Optionality: Optional.
Allowed: Not Applicable.
Default: "ccsExpiryMessages"
Notes: This parameter must be the same as that for the VWSs as the ccsExpiryMessageGenerator writes to this directory.
Example: generatorFilename = "ccsExpiryMessages"

inputDirectory

Syntax: inputDirectory = "dir"
Description: Directory for newly created expiry message files.
Type: String.
Optionality: Optional (Default used if not specified).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/logs/expiryMessage/"
Notes: This value required on both SMS and VWS machines. This value may be different on the two machines as long as cmnPushFiles has been configured to send and receive the appropriate directories.
Example: inputDirectory = "/IN/service_packages/CCS/logs/expiryMessageRead/"

numberOfBalanceWarnings

Syntax: numberOfBalanceWarnings = num
Description: The number of pending balance expiry messages to be sent. The messages will be equally spaced during the period set by the walletExpiryPeriod parameter.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: 1,2, 3
Default: 3
Notes: Not Applicable.
Example: numberOfBalanceWarnings = 3

numberOfWalletWarnings

Syntax: numberOfWalletWarnings = num
Description: The number of pending wallet expiry messages to be sent. The messages will be equally spaced during the period set by the walletExpiryPeriod parameter.
Type: Integer
Optionality: Optional (default used if not set).
Allowed: 1, 2, 3
Default: 3
Notes: Not Applicable.
Example: numberOfWalletWarnings = 3

onlyForLatestBucketExpiry

Syntax: onlyForLatestBucketExpiry = true|false
Description: Whether to send expiry messages for all buckets that are going to expire or just the last bucket to expire.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed:
  • true - only send notifications for the latest bucket to expire for the configured balance types, or
  • false - send notifications for all expiring buckets.
Default: false.
Notes: Does not include buckets with no expiry date.
Example: onlyForLatestBucketExpiry = true

oraclePassword

Syntax: oraclePassword = "password"
Description: Oracle password.
Type: Not Applicable.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: ""
Notes: Required on VWS.
Example: Not Applicable.

oracleUsername

Syntax: oracleUsername = "name"
Description: Oracle user name.
Type: Not Applicable.
Optionality: Mandatory
Allowed: Not Applicable.
Default: ""
Notes: Required on VWS.
Example: Not Applicable.

pauseTime

Syntax: pauseTime = time
Description: The time separating the loading of individual files.
Type: Not Applicable.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 1
Notes: Optionally, if batchSize is also set, pauseTime defines the time between batches from an individual file.
Example: pauseTime = 1

walletExpiryPeriod

Syntax: walletExpiryPeriod = days
Description:

Number of days before the wallet expires.

Before the wallet expires, three expiry warning messages are sent, each at different times.

The first message is sent walletExpiryPeriod days before the wallet expires.

The second and third messages are sent at two-thirds and one-third of walletExpiryPeriod, respectively.

Type: Not Applicable.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 15
Note: This parameter is optional. If it is omitted, no messages will be sent.
Example: walletExpiryPeriod = 15

Failure

If ccsExpiryMessageLoader fails, no notifications will be sent.

Output

The ccsExpiryMessageLoader writes error messages to the system messages file, and also writes additional output to the /IN/service_packages/CCS/tmp/ccsExpiryMessageLoader.log file.

ccsExternalProcedureDaemon

ccsExternalProcedureDaemon is used to call CB10 C code from within a database trigger when adding a new ACS customer.

Startup - Nonclustered

In a nonclustered environment this task is started automatically by entry cc11 in the inittab, by the /IN/service_packages/CCS/bin/ccsExternalProcedureDaemon.sh shell script.

Startup - Clustered

In a clustered environment this task is started automatically by the Sun Plex manager and runs on one half of the cluster. It uses the CcsExternalProcedureDaemon failover resource to fail over to other nodes as required. The files required by the Sun Plex manager are located in the /opt/ESERVCcsExternalProcedureDaemon directory.

Location

The binary for the ccsExternalProcedureDaemon process is located at /IN/service_packages/CCS/bin/ccsExternalProcedureDaemon on the SMS.

Configuration

The ccsExternalProcedureDaemon does not require any specific configuration and it does not support any command line parameters.

Failure

If the ccsExternalProcedureDaemon fails, then the CCS_CB10_CONFIG table will not be updated when you add an ACS customer.

Output

The ccsExternalProcedureDaemon writes error messages to the system messages file and writes additional output to /IN/service_packages/CCS/tmp/ccsExternalProcedureDaemon.log.

ccsLegacyPIN

ccsLegacyPIN plug-in library is used by ccsAccount, see About ccsAccount for more details and the ccsVoucher_CCS3 voucher tool to encrypt the PINs using the DES authentication rule. For more information about authentication rules, see Security libraries. ccsLegacyPIN library is not available for new voucher batches.

Note:

The ccs3Encryption plug-in is a symbolic link to the ccsLegacyPIN plug-in, but in the ccs3Encryption mode it uses different parameters.

Startup

ccsLegacyPIN is used by ccsVoucher_CCS3 as necessary. No startup configuration is required for this library to be used.

Configuration

ccsLegacyPIN has no specific configuration. It does accept some parameters from ccsVoucher_CCS3 for voucher encryption which are configured in the CCS Voucher Management and Service Management screens.

ccsPeriodicCCRecharge

Run periodic credit card recharges on the SMS.

  • Periodic credit card recharges are stored in the CCS_CC_RECHARGE_PENDING table in the SMF db.
  • Can remove rows from the pending queue if the rows are:
    • No longer pending
    • Past configurable age limit

Startup

This task is run in the crontab for ccs_oper. By default it runs on the second day of each month. It is scheduled directly through /IN/service_packages/CCS/bin/ccsPeriodicCCRecharge.

Example

ccsPeriodicCCRecharge = {
    numRowsPerCommit = 100
    oracleUserAndPassword = "/"
    purgeOldEntriesAge = 0
    purgePendingRows = false
}

Parameters

ccsPeriodicCCRecharge supports the following parameters from the CCS.ccsPeriodicCCRecharge section of eserv.config.

numRowsPerCommit

Syntax: numRowsPerCommit = num
Description: Number of rows to insert before commit.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 100
Notes: Not Applicable.
Example: numRowsPerCommit = 500

oracleUserAndPassword

Syntax: oracleUserAndPassword = "usr/pwd"
Description: Overrides userid and password for the Oracle SMF database connection set in oracleUserAndPassword.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/"
Notes: Not Applicable.
Example: Not Applicable.

purgeOldEntriesAge

Syntax: purgeOldEntriesAge = days
Description: Number of days before a row will be removed from CCS_CC_RECHARGE_PENDING.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 0 (off)
Notes: Entries with both pending and verified states will be removed.
Example: purgeOldEntriesAge = 14

purgePendingRows

Syntax: purgePendingRows = true|false
Description: Whether or not to purge rows that are pending recharge from the CCS_CC_RECHARGE_PENDING table in SMF.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed:
  • true: Purge rows that are pending recharge.
  • false: Do not purge rows that are pending recharge.
Default: false
Notes: Only effective when purgeOldEntriesAge has a value greater than 0.
Example: purgePendingRows = true

Failure

If ccsPeriodicCCRecharge fails, automatic credit card recharges will fail.

Note:

Individual recharges through the PI will not be affected.

Output

The ccsPeriodicCCRecharge writes error messages to the system messages file. It also writes additional output to /IN/service_packages/CCS/tmp/ccsPeriodicCCRecharge.log.

ccsPeriodicCharge

ccsPeriodicCharge applies periodic charges defined for wallets. The following types of periodic charge are supported:

  • Credit
  • Debit
  • Voucher type recharge

ccsPeriodicCharge sends notifications to the subscriber informing them whether or not the charge was successful.

Note:

This process only applies to periodic charges which were configured in CCS 3.1.4 or earlier.

Startup

ccsPeriodicCharge runs in either a solo mode or a parent and children mode.

The ccsPeriodicCharge solo process is run in the crontab for ccs_oper. By default it runs on an hourly basis. ccsPeriodicCharge is started automatically with the ccsPeriodicCharge command.

If the Daemon field is set to 2 or more in any product type, ccsPeriodicCharge will operate as a parent process, and will start a ccsPeriodicCharge child process for each id in the Daemon fields. The ccsPeriodicCharge parent process will remain active until all child processes have completed.

Note:

If the service takes over an hour to run, it will examine all wallets and scheduling to ensure that the charges for the next hour are applied.

For more information about how product types assign periodic charges to ccsPeriodicCharge daemons, see "Subscriber Management - Product Types", in Charging Control Services User's Guide.

Configuration - eserv.config

ccsPeriodicCharge is also configured by the ccsPeriodicCharge section of the eserv.config file. The structure of the ccsPeriodicCharge section is shown below.

ccsPeriodicCharge = {
    BatchSize = size
    OracleUserAndPassword = "usr/pwd"
    LockFile = "dir"
    profileTagCacheValidityPeriod = int
    BeQueueSize = int

    beLocationPlugin = "lib"
    oracleUserPass = "usr/pwd"
    clientName = "name"
    
    heartbeatPeriod = microsecs
    messageTimeoutSeconds = seconds
    maxOutstandingMessages = int
    reportPeriodSeconds = seconds
    connectionRetryTime = seconds

    plugins = [
        {
            config="confStr",
            library="lib",
            function="str"
        }
    [...]
]

confStr = { 
    plugin configuration
}

notEndActions = [
    {type="str", action="[ACK |NACK]"}
    [...]
]

plugins configuration - see plugin-specific config
}

eserv.config Parameters

ccsPeriodicCharge supports the following parameters from the ccsPeriodicCharge section of eserv.config.

BeQueueSize

Syntax: BeQueueSize = num
Description:: The maximum number of VWS charging requests waiting for a response. If this limit is reached, no requests are sent until the number of outstanding requests drops below this number.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 500
Notes: Not Applicable.
Example: BeQueueSize = 250

clientName

Syntax: clientName = "name"
Description:: The client name for the process.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: ccsPeriodicCharge
Notes:

The server generates clientId from a hash of name.

This parameter is used by libBeClientIF. However, ccsAccount uses a different default.

Example: clientName = "ccsPeriodicCharge"

connectionRetryTime

Syntax: connectionRetryTime = seconds
Description: The maximum number of seconds the client process will wait for a connection to succeed before attempting a new connection.
Type: Integer.
Optionality: Required.
Allowed: Not Applicable.
Default: 5
Notes: This parameter is used by libBeClientIF.
Example: connectionRetryTime = 2

heartbeatPeriod

Syntax: heartbeatPeriod = microsecs
Description: The number of microseconds during which a Voucher and Wallet Server heartbeat message must be detected, or the BeClient process will switch to the other VWS in the pair.
Type: Integer.
Optionality: Required.
Allowed:
  • 0: Disable heartbeat detection.
  • positive integer: Heartbeat period.
Default: 3000000
Notes:

1000000 microseconds = 1 second.

If no heartbeat message is detected during the specified time, client process switches to the other Voucher and Wallet Server in the pair.

This parameter is used by libBeClientIF.

Example: heartbeatPeriod = 10000000

LockFile

Syntax: LockFile = "dir"
Description: The location of the lock file used to prevent multiple instances of the ccsPeriodicCharge process.
Type: String
Optionality: Optional (default used if not set)
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/logs/.ccsPeriodicCharge"
Notes: If ccsPeriodicCharge is running in parent and child mode, only the parent process will use the lock file.
Example: LockFile = "/IN/service_packages/CCS/logs/.ccsPeriodicCharge"

maxOutstandingMessages

Syntax: maxOutstandingMessages = num
Description: The maximum number of messages allowed to be waiting for a response from the Voucher and Wallet Server.
Type: Integer.
Optionality: Required.
Allowed: Not Applicable.
Default: If this parameter is not set, the maximum is unlimited.
Notes:

If more than this number of messages are waiting for a response from the Voucher and Wallet Server, the client process assumes the Voucher and Wallet Server is overloaded. In this event, the client process refuses to start new calls but continues to service existing calls.

The messages are queued until the Voucher and Wallet Server has reduced its outstanding load.

This parameter is used by libBeClientIF.

Example: maxOutstandingMessages = 100

messageTimeoutSeconds

Syntax: messageTimeoutSeconds = seconds
Description: The time that the client process will wait for the server to respond to a request.
Type: Integer.
Units Seconds.
Optionality: Required.
Allowed:
  • 1-604800: Number of seconds to wait.
  • 0: Do not time out.
Default: 2
Notes:

After the specified number of seconds, the client process will generate an exception and discard the message associated with the request.

This parameter is used by libBeClientIF.

Example: messageTimeoutSeconds = 2

notEndActions

Syntax:
notEndActions = [
    {type="str", action="[ACK|NACK]"}
    [...]
]
Description: The notEndActions parameter array is used to define the messages associated with dialogs that should not have their dialog closes, because the dialog is closed by default. This facilitates failover.
Type: Parameter array.
Optionality: Required.
Allowed: Not Applicable.
Default: Not Applicable.
Notes:

If the incoming dialog for a call closes and the last response received was of the notEndActions type, the client process sends an ABRT message. The ABRT message allows the VWS to remove the reservation. An example of this situation would be where slee_acs has stopped working.

This parameter is used by libBeClientIF.

For more information about slee_acs, see ACS Technical Guide.

Example:
notEndActions = [
    {type="IR ", action="ACK "}
    {type="SR ", action="ACK "}
    {type="SR ", action="NACK"}
    {type="INER", action="ACK "}
    {type="SNER", action="ACK "}
    {type="SNER", action="NACK"}
]

OracleUserAndPassword

Syntax: oracleUserAndPassword = "usr/pwd"
Description: The user and password combination ccsPeriodicCharge should use to log into the SMF database.
Type: String.
Optionality: Optional.
Allowed: Not Applicable.
Default: "/"
Notes: Overrides CCS.oracleUserAndPassword. For more information about this parameter, see oracleUserAndPassword.
Example: oracleUserAndPassword = "/"

plugins

Syntax:
plugins = [
    {
        config=""
        library="lib"
        function="str"
    }
    ...
]
Description: Defines any client process plug-ins to run. Also defines the string which maps to their configuration section.
Type: Parameter array.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: Not Applicable.
Notes:

The voucherTypeRechargeOptions (VTR) plug-in needs the libclientBcast plug-in to function properly. It must be placed last in the plugins configuration list.

For more information about the libclientBcast plug-in, see VWS Technical Guide.

Example:
plugins = [
    {
        config="voucherTypeRechargeOptions",
        library="libccsClientPlugins.so",
        function="makeVoucherTypeRechargePlugin"
    }
    {
        config="",
        library="libclientBcast.so",
        function="makeBroadcastPlugin" 
    }
]

config

Syntax: config="name"
Description: The name of the configuration section for this plug-in. This corresponds to a configuration section within the plugins section in the eserv.config file.
Type: String.
Optionality: Required (must be present to load the plug-in).
Allowed: Not Applicable.
Default: No default
Notes: Not Applicable.
Example: config="voucherRechargeOptions"

function

Syntax: function="str"
Description: The function the plug-in should perform.
Type: String.
Optionality: Required (must be present to load the plug-in).
Allowed: Not Applicable.
Default: No default
Notes: Not Applicable.
Example: function="makeVoucherRechargePlugin"

library

Syntax: library="lib"
Description: The filename of the plug-in library.
Type: String.
Optionality: Required (must be present to load the plug-in).
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: library="libccsClientPlugins.so"

profileTagCacheValidityPeriod

Syntax: profileTagCacheValidityPeriod = seconds
Description: Timeout value in seconds for the profile tag cache.
Type: Integer.
Optionality: Optional.
Allowed: Any positive decimal integer.
Default: 600
Notes: Not Applicable.
Example: profileTagCacheValidityPeriod = 800

reportPeriodSeconds

Syntax: reportPeriodSeconds = seconds
Description: The number of seconds separating reports of failed messages.
Type: Integer.
Units Seconds.
Optionality: Required.
Allowed: Not Applicable.
Default: 10
Notes:

BeClient issues a failed message report:

  • For timed-out messages.
  • For unrequested responses.
  • For new calls rejected because of congestion.
  • For messages with invalid Voucher and Wallet Server identifiers.
  • If new and subsequent requests fail because both Voucher and Wallet Servers have stopped working.

VWS heartbeat detection must be enabled for the parameter to work. Set reportPeriodSeconds to more than heartbeatPeriod.

This parameter is used by libBeClientIF.

Example: reportPeriodSeconds = 10

Command Line Parameters

ccsPeriodicCharge supports the following command line parameters.

ccsPeriodicCharge [-d] [-l log]

Note:

These parameters can be set in a cronjob entry or startup script, or be set directly at the command line.

-d

Syntax: -d
Description: Display the configuration of ccsPeriodicCharge at start up.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: Do not display configuration at startup.
Notes: Not Applicable.
Example: Not Applicable.

-l

Syntax: -l log
Description: The name of the file to log this child ccsPeriodicCharge daemon's debug output to.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example:

-l ccsPeriodicChargeDebug.log

This configuration will produce a log called ccsPeriodicChargeDebug2.log for a ccsPeriodicCharge daemon with an ID of 2.

Example

This text shows an example ccsPeriodicCharge eserv.config section.

ccsPeriodicCharge = {
    OracleUserAndPassword = "/"
    LockFile = "/IN/service_packages/CCS/logs/.ccsPeriodicCharge"
    clientName = "ccsPeriodicCharge"
    profileTagCacheValidityPeriod = 600
    BeQueueSize = 500

    plugins = [
        {
            # Voucher Type recharge plugin (VTR)
            config="voucherTypeRechargeOptions",
            library="libccsClientPlugins.so",
            function="makeVoucherTypeRechargePlugin"
        }
        {
            # Broadcast plugin needed by VTR
            config="",
            library="libclientBcast.so",
            function="makeBroadcastPlugin" 
        }
    ]
    
    voucherTypeRechargeOptions = {
        srasActivatesPreuseAccount=false
        voucherTypeRechargeTriggers = ["VTR "]
    }

}

Failure

If ccsPeriodicCharge fails, the regular charges that are due will not be applied. However they will be applied retrospectively the next time ccsPeriodicCharge is run.

Output

The ccsPeriodicCharge writes error messages to the system messages file. It also writes additional output to /IN/service_packages/CCS/tmp/ccsPeriodicCharge.log.

ccsProfileDaemon

ccsProfileDaemon performs the following:

  • Processes profile change events
  • Creates requests
  • Sends requests to a third party ASP or customer care management platform

Profile change events are generated through changes to the subscriber's profile (ccs_acct_reference.PROFILE). For example, a profile change event is generated when a subscriber adds a new 'Friends and Family' number or subscribes to a voice mail service.

Startup - Nonclustered

In a nonclustered environment, ccsProfileDaemon is started automatically by entry ccs8 in the inittab, through the /IN/service_packages/CCS/bin/ccsProfileDaemonStartup.sh shell script.

When CCS is installed, the startup inittab entry is added by the install process.

Disabling - ccsProfileDaemon

ccsProfileDaemon performs database cleanup of tables altered by subscriber profile creations and changes.

If you disable the ccsProfileDaemon task in your environment, you must also disable related triggers in your database to prevent your database from malfunctioning due to uncontrolled growth.

To disable the triggers used by ccsProfileDaemon in your database:

  1. Log on the USMS node as the ccs_oper user.
  2. Connect to the database as ccs_admin using SQLPlus.
  3. Run the following SQL statements:
    SQL> alter trigger CCS_ACCT_REFERENCE_BUOPFER disable;
    SQL> alter trigger CCS_ACCT_REFERENCE_BIFER disable;
    
  4. Exit SQLPlus.

Example config Section

ccsProfileDaemon = {
    PollInterval = 500
    LockFileName = "IN/service_packages/CCS/logs/.ccsProfileDaemon-lock"
    DisableConcurrencyLock = false
    AuditDirectory = "/IN/service_packages/CCS/logs/ccsProfileDaemon-logs"
    AuditFields = [1310806, 2829001, 2812014, 1310730]
    AuditFileName = "ccsProfileDaemon"
    AuditType = "IGNORE"
    CdrConcatenation = true
    MaxAgeSeconds = 60
    MaxSizeEntries = 100
    NotificationCacheAgeSeconds = 60
    AdditionalSpFields = [  ]
    PeriodicChargeTagCacheAge = 600
    SpFieldCacheAge = 600
    DateTimeFormat = "YYYY-MM-DDThh:mm:ss"
    allowLegacyServerConnect= true
    allowBugWorkArounds = true
    triggering = {
        DefaultOverrides = {
            CCSNamespace = "http://customer-smp/wsdls/ON/some.wsdl"
            Username = "username"
            Password = "password"
            OperationName = "NotificationRequest"
            ArbitraryParameters = "possible"
        }
        Operations = [
            {
                name = "CCSNotification"
                type = "OSD"
                overrides = {
                    CCSNamespace = "http://eng-prf-zone01-z1/wsdls/ON/CCSNotifications.wsdl"
                    Username = ""
                    Password = ""
                    OperationName = "NotificationRequest"
                }
            }
        ]
        scps = [ "cmxdevscp1:3072", "cmxdevscp2:3072" ]
        osd_scps = [ "cmxdevscp1:3072", "cmxdevscp2:3072" ]
    }
}

eserv.config Parameters

ccsProfileDaemon supports the following parameters from the ccsProfileDaemon section of eserv.config.

AdditionalSpFields

Syntax: AdditionalSpFields = [tagval1,tagval2,,,,tagvalN]
Description: Allows additional profile tags to be added to the ccs_sp_field table array of integers.
Type: Decimal integer for tagval x values.
Optionality: Optional.
Allowed: Any valid profile tag location values in decimal format.
Default: Empty.
Notes: Not Applicable.
Example: AdditionalSpFields = [100,120,140]

allowBugWorkArounds

Syntax: allowBugWorkArounds = true | false
Description: Whether or not ccsProfileDaemon supports bug workarounds to cope with faulty SSL implementations on the ASP.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed:

true – Bug workarounds are supported.

false – Bug workarounds are not supported.

Default: false
Notes: Set this parameter to true only if it is required for ccsProfileDaemon to make successful SSL connections to an ASP.
Example: allowBugWorkArounds = true

allowLegacyServerConnect

Syntax: allowLegacyServerConnect = true | false
Description: Whether or not ccsProfileDaemon allows connections to legacy servers that do not support secure renegotiation.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed:

true – Allows connections to legacy servers that do not support secure renegotiation.

false – Prohibits connections to legacy servers that do not support secure renegotiation.

Default: false
Notes: Set this parameter to true only if it is required for ccsProfileDaemon to make successful SSL connections to an ASP.
Example: allowLegacyServerConnect = true

AuditDirectory

Syntax: AuditDirectory = "dir"
Description: Directory where we will write the audit logs.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: "IN/service_packages/CCS/logs/ccsProfileDaemon-logs"
Notes: Not Applicable.
Example: Not Applicable.

AuditFields

Syntax: AuditFields = [profile tag ID, ...]
Description:

An array of comma-separated profile tag IDs that identify subscriber profile fields that have changed and are being audited. Only values listed in the array will be audited.

The produced EDR has the following format:

USER=<value>|MSISDN=<value>ACS_CUST_ID=<value>|DATE=<value>|TERM_IP_ADDR=<value>|CHANGED_TAGS=<value>

Where the format of CHANGED _TAGS is:

PROFILE_TAG_NAME=<value>:OLD_VALUE=<value>:NEW_VALUE=<value>

Example EDR:

USER=SU|MSISDN=321449000001|ACS_CUST_ID=11||DATE=20131218111933|TERM_IP_ADDR=010167088183|CHANGED_TAGS=PROFILE_TAG_NAME=FD Number:OLD_VALUE='123456789':NEW_VALUE='999888777666', PROFILE_TAG_NAME=Acct Activation Yearly:OLD_VALUE='20131202111824':NEW_VALUE='20131225111824',PROFILE_TAG_NAME=FF List,PROFILE_TAG_NAME=LO Subscription:OLD_VALUE=:NEW_VALUE=True

See CdrConcatenation for additional information.

Type: Array of integers.
Optionality: Optional (default used if not set).
Allowed: Aray of integers.
Default: AuditFields = [ ] (disabled)
Notes: Only the profile tag name will be present for data that cannot be directly printed in an EDR, for example Prefix Tree content. You can view all EDR content through the subscriber screens.
Example: AuditFields = [1310806, 2829001, 2812014]

AuditFileName

Syntax: AuditFileName = "name"
Description: Base file name for the audit log – start and end times will be appended.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: "ccsProfileDaemon"
Notes: Not Applicable.
Example: AuditFileName = "ccsProfileDaemon"

AuditType

Syntax: AuditType = "type"
Description: Type of auditing.
Type: String.
Optionality: Not Applicable.
Allowed:
  • "IGNORE" - regardless of response type, audit logs will not be generated
  • "ERROR" - only create audit log for failure and error responses
  • "ALL" - create audit log for all responses (successful, failure and error)
Default: "IGNORE"
Notes: Not Applicable.
Example: AuditType = "IGNORE"

CdrConcatenation

Syntax: CdrConcatenation = true | false
Description: Specifies whether multiple changes to a profile should be concatenated into the same EDR. See Table 3-* for additional information.
Type: Boolean.
Optionality: Optional (default used if not set).
Allowed: true, false
Default: false
Notes: Not Applicable.
Example: CdrConcatenation = false

DateTimeFormat

Syntax: DateTimeFormat = "dateformat"
Description: Indicates the format for date and time variables that are sent in a DAP notification.
Type: String.
Optionality: Optional (default used if not set).
Allowed:

Only the following formats are accepted:

  • YYYY-MM-DDThh:mm:ss
  • YYYY-MM-DDThh:mm:ssZ
  • -YYYY-MM-DDThh:mm:ss
  • YYYYMMDDhhmmss
Default: YYYYMMDDhhmmss
Notes: Not Applicable.
Example: DateTimeFormat = "YYYY-MM-DDThh:mm:ss"

DisableConcurrencyLock

Syntax: DisableConcurrencyLock = true|false
Description: Whether to disable concurrency locking.
Type: Not Applicable.
Optionality: Not Applicable.
Allowed: true, false
Default: false
Notes: Not Applicable.
Example: DisableConcurrencyLock = false

LockFileName

Syntax: LockFileName = "file"
Description: The lock file name to determine if we have multiple profile daemon processes running on the same SMS node.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: "IN/service_packages/CCS/logs/.ccsProfileDaemon-lock"
Notes: Not Applicable.
Example: Not Applicable.

MaxAgeSeconds

Syntax: MaxAgeSeconds = seconds
Description: Maximum age, in seconds, after which all audit entries will be written to disk.
Type: Integer.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 60
Notes: Not Applicable.
Example: MaxAgeSeconds = 60

MaxSizeEntries

Syntax: MaxSizeEntries = size
Description: Maximum size (number) after which all audit entries will be written to disk.
Type: Integer.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 100
Notes: Not Applicable.
Example: MaxSizeEntries = 100

NotificationCacheAgeSeconds

Syntax: NotificationCacheAgeSeconds = seconds
Description: Maximum age, in seconds, before the notification definitions cache will be reread from the database.
Type: Integer.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 60
Notes: Not Applicable.
Example: NotificationCacheAgeSeconds = 60

PeriodicChargeTagCacheAge

Syntax: PeriodicChargeTagCacheAge = seconds
Description: Timeout value, in seconds, for data in the periodic charge tag cache.
Type: Integer.
Optionality: Optional.
Allowed: Any positive decimal integer value.
Default: 600 (seconds)
Notes: Not Applicable.
Example: PeriodicChargeTagCacheAge = 600

PollInterval

Syntax: PollInterval = milliseconds
Description: How long, in milliseconds, that we should sleep before processing profile change events.
Type: Integer.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: 500
Notes: Not Applicable.
Example: PollInterval = 500

SpFieldCacheAge

Syntax: SpFieldCacheAge = seconds
Description: Timeout value in seconds for data in the SpField tag cache.
Type: Decimal integer.
Optionality: Optional.
Allowed: Any positive decimal integer.
Default: 600
Notes: Not Applicable.
Example: SpFieldCacheAge = 600

triggering

Syntax: triggering = {parameter_list}
Description: The configuration of the individual XmlTcap or OSD operations that can be recieved.
Type: List.
Optionality: Mandatory.
Allowed: Not Applicable.
Default:

For operations that are not configured, these Operations > overrides defaults are applied:

  • CCSNamespace="http://eng-prf-zone01-z1/wsdls/ON/CCSNotifications.wsdl"
  • name = "CCSNotification", type = "OSD"
  • Username = ""
  • Password = ""
Notes: Not Applicable.

DefaultOverrides

Syntax: DefaultOverrides = {global_parameter_list}
Description: The list of global default parameter values for each of the overrides parameters in the individual trigger Operations configured.
Type: List.
Optionality: Mandatory.
Allowed:

Must be all of these:

  • CCSNamespace
  • Username
  • Password
  • OperationName
  • ArbitraryParameters
Default: Not Applicable.
Notes: These parameters are inserted into the Operations > overrides section when the parameter is omitted from the overrides list.
Example:
DefaultOverrides = {
    CCSNamespace = "http://customer-smp/wsdls/ON/some.wsdl"
    Username = "username"
    Password = "password"
    OperationName = "NotificationRequest"
    ArbitraryParameters = "possible"
}

ArbitaryParameters

Syntax: ArbitraryParameters = "value"
Description: Not Applicable.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: None
Notes: Not Applicable.
Example: ArbitraryParameters = "possible"

CCSNamespace

Syntax: CCSNamespace = "namespace"
Description: The name space used for the WSDL request.
Type: String.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: CCSNamespace = "http://customer-smp/wsdls/ON/some.wsdl"

OperationName

Syntax: OperationName = "name"
Description: The name of the OSD request.
Type: String.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: Not Applicable.
Notes: Not Applicable.
Example: OperationName = "NotificationRequest"

Password

Syntax: Password = "password"
Description: The HTTP password to use.
Type: String.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: Not Applicable.
Notes: Not Applicable.
Example: Password = "password"

Username

Syntax: Username = "name"
Description: The HTTP user name to use.
Type: String.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Username = "username"

Operations

Syntax: Operations = [op1],[op2]
Description: Maps of individual operations for the trigger.
Type: Array
Optionality: Mandatory.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example:
Operations = [
    {
        name = "CCSNotification"
        type = "OSD"
        overrides = {
            OperationName = "NotificationRequest"
        }
    }
]

name

Syntax: name = "operation_name"
Description: The name of the operation as received from the VWARS.
Type: String
Optionality: Mandatory
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: name = "CCSNotification"

overrides

Syntax: overrides = {override_list}
Description: Set of override parameters for this operation that are added to/override the values received from the beVWARS.
Type: List.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: The values that are defined by DefaultOverrides for any missing parameter.
Notes:

If all of an operation's overrides parameters values are the same as the DefaultOverrides, it is not necessary to specify this parameter.

For OSD, it is expected to set:

  • CCSNamespace : the namespace used for the wsdl request.
  • Username : the HTTP username to use
  • Password : the HTTP password to use
  • OperationName : The name of the OSD request, that is, "NotificationRequest"

For XmlTcap, it is expected to set:

  • Control_Plan: The control plan to trigger
  • Service_Handle: The service handle to use to do the triggering
Example:
overrides = {
    Username = ""
    Password = ""
    OperationName = "NotificationRequest"
}

type

Syntax: type = "protocol"
Description: The protocol for the operation.
Type: String.
Optionality: Mandatory.
Allowed:
  • OSD
  • XmlTcap
Default: None.
Notes: Not Applicable.
Example: type = "OSD"

scps

Syntax: scps = [SLC1,SLC2]
Description:

An array of xmlTcapInterface SLCs, in the format:

HOSTNAME:PORT

Type: Array.
Optionality: PORT is optional (default used if not set).
Allowed: A list of existing SLC host names and ports.
Default: 3072
Notes: Not Applicable.
Example: scps = [ "cmxdevscp1:3072", "cmxdevscp2:3072" ]

osd_scps

Syntax: osd_scps = [SLC1,SLC2>]
Description:

An array of OSD SLCs, in the format:

HOSTNAME:PORT

Type: Array.
Optionality: PORT is optional (default used if not set).
Allowed: A list of existing SLC host names and ports.
Default: 3072
Notes: Not Applicable.
Example: osd_scps = [ "cmxdevscp1:3072", "cmxdevscp2:3072" ]

osd_scps_custid

Syntax:
osd_scps_custid = [{ host = ["SLC1:port","SLC2:port" ]
                            serviceProvider = customer-id
                   }
                  ]
Description:

An array of combinations of OSD SLCs and service provider in the following format:

host = HOSTNAME:PORT

serviceProvider = ACS customer ID in the database.

If osd_scps_custid is configured, then beServiceTrigger will use the configured SLC and service-provider to match the acs-customer from the plugin request and send request to proper SCP.

Type: Array
Optionality: Optional, If there is no osd_scps_custid section, then osd_scps section will be used.
Allowed: A list of existing SLC host names and ports along with service provider.
Default: Not Applicable.
Notes: To process old events, at-least one entry is mandatory in the above configuration without service provider and that host will be used to process old events.
Example:
osd_scps_custid= [
                   { host = ["SLC4:2211","SLC5:3211" ]
                     serviceProvider = 21
                   }
                   { host = ["SLC5:1024"]
                   }
                 ]

Command Line Parameters

The ccsProfileDaemon accepts the following command line parameters.

Usage:

ccsProfileDaemon [-i | --node_id node_id] [-n | --number number]

Example:

ccsProfileDaemon -i 2 -n 2

-i or --node_id

Syntax: -i | --node_id node_id
Description: The SMS node id that this ccsProfileDaemon instance is running on.
Type: Integer.
Optionality: Not Applicable.
Allowed: Cannot be greater than the number of nodes specified and must be greater than 0.
Default: 1
Notes: This value will be used in conjunction with the number of nodes specified to limit the range of subscriber’s that are processed by a specific ccsProfileDaemon.
Example: -i 2

-n or --number

Syntax:

-n int

--number int

Description: The number of ccsProfileDaemon instances running across all SMS nodes.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Must be greater than ‘0’.
Default: 1
Notes: This value will be used in conjunction with the node id specified to limit the range of subscriber’s that are processed by a specific ccsProfileDaemon.
Examples:

-n 2

--number 2

ccsReports

The ccsReports section specifies the parameters for CCS SMS reports.

Note:

Reports use CCS.oracleUserAndPassword as the Oracle login.

Example

Here is an example of the ccsReports section in the eserv.config file.

ccsReports = {
    accountLogDir = ""
    accountPrefixName = ""
    cdrDir = ""
    cdrPrefix = ""
    voucherLogDir = ""
    voucherPrefixName = "pre"

    VoucherStatus = {
        outputDirectory = "/IN/service_packages/SMS/output/Ccs_Service/Summary/VoucherStatus"
        archiveDirectory = "/IN/service_packages/SMS/output/Ccs_Service/Summary/VoucherStatus/archive"
        archiveAfterDays = 10
        deleteAfterDays = 60
    }
}

Parameters

ccsReports accepts the following parameters.

accountLogDir

Syntax: accountLogDir = "dir"
Description: The account log directory.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

accountPrefixName

Syntax: accountPrefixName = "name"
Description: The account prefix name.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

cdrDir

Syntax: cdrDir = "dir"
Description: The EDR directory.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

cdrPrefix

Syntax: cdrPrefix = "pre"
Description: The EDR prefix.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Not Applicable.
Example: Not Applicable.

voucherLogDir

Syntax: voucherLogDir = "dir"
Description: The voucher log directory.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None
Notes: Not Applicable.
Example: voucherLogDir = "/var/logs/voucher"

voucherPrefixName

Syntax: voucherPrefixName = "pre"
Description: The voucher prefix name.
Type: String.
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None
Notes: Not Applicable.
Example: voucherPrefixName = "voucher_"

VoucherStatus

Syntax:
VoucherStatus = {
    outputDirectory = "dir"
    archiveDirectory = "dir"
    archiveAfterDays = days
    deleteAfterDays = days
}
Description: Configuration for voucher status reports.
Type: Parameter group
Optionality: Not Applicable.
Allowed: Not Applicable.
Default: None.
Notes: Additional configuration for the Voucher Status Report is available in the voucherStatusReport.env file. For more information about this file, see Voucher Status Report Configuration.
Example: Not Applicable.

archiveAfterDays

Syntax: archiveAfterDays = days
Description: How old reports should be before being archived?
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 10
Notes: Not Applicable.
Example: archiveAfterDays = 10

archiveDirectory

Syntax: archiveDirectory = "dir"
Description: Where archived reports are moved to.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/SMS/output/Ccs_Service/Summary/VoucherStatus/archive"
Notes: Not Applicable.
Example: archiveDirectory = "/IN/service_packages/SMS/output/Ccs_Service/Summary/VoucherStatus/archive"

deleteAfterDays

Syntax: deleteAfterDays = days
Description: How many days old reports can be before they are removed by the system.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 60
Notes: Not Applicable.
Example: deleteAfterDays = 60

outputDirectory

Syntax: outputDirectory = "dir"
Description: The location of the voucher status reports.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/SMS/output/Ccs_Service/Summary/VoucherStatus"
Notes: Not Applicable.
Example: outputDirectory = "/IN/service_packages/SMS/output/Ccs_Service/Summary/VoucherStatus"

ccsWalletExpiry

ccsWalletExpiry processes CCS updates to the SMF database from the VWSs. There are two types of update:

  • Expiry requests cause wallets to be set to Terminated in the SMF database.
  • Removal requests cause wallets to be removed from the SMF database.

If ccsWalletExpiry removes all the wallets associated with a subscriber account and will also remove the subscriber account.

Startup

This task is run in the crontab for ccs_oper. By default, it runs every 10 minutes. It is scheduled directly through /IN/service_packages/CCS/bin/ccsWalletExpiry.

Example

An example of a configuration for the ccsWalletExpiry process and cssVWARSExpiry plug-in follows.

ccsVWARSExpiry = {
    expiredPrefix = "expiredWallet"
    expiredDirectory = "/IN/service_packages/CCS/logs/wallet"
    removedDirectory = "/IN/service_packages/CCS/logs/wallet"
    removedPrefix = "removedWallet"

    expiredMsisdnPath="/IN/service_packages/CCS/logs/MSISDNExpiry"
    expiredMsisdnPrefix="MSISDNExpiry"
    expiredMsisdnMaxAge = 120
    cmnPushFiles = [
        "-d", "/IN/service_packages/CCS/logs/wallet"
        "-r", "/IN/service_packages/CCS/logs/wallet"
        "-h", "produsms01"
        "-p", "2027"
        "-F"
    ]
}

Note:

This configuration section is also used by ccsVWARSExpiry on the VWS.

Parameters

ccsWalletExpiry supports the following parameters from the CCS section of eserv.config.

cmnPushFiles = [ ]

Syntax: cmnPushFiles = []
Description: For the eserv.config on the VWS, use the cmnPushFiles configuration to transfer files to the SMS ready for processing by ccsExpiryMessageLoader.
Type: Parameter array.
Optionality: Mandatory.
Allowed: Not Applicable.
Default: Not Applicable.
Notes:

Include the -F option to detect the file in use. See cmnPushFiles for all parameters.

These directories must match the respective directories set in generatorFiledir.

Example: Not Applicable.

expiredDirectory

Syntax: expiredDirectory = "dir"
Description: Defines the location of files listing wallets moving to terminated state.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/logs/wallet"
Notes: The file is generated by ccsVWARSExpiry on the VWS and read by ccsWalletExpiry on the SMS.
Example: expiredDirectory = "/var/CCS/expiredWallets"

expiredMsisdnMaxAge

Syntax: expiredMsisdnMaxAge = seconds
Description: The maximum age of export file in seconds.
Type: Integer.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: 120
Notes: Not Applicable.
Example: expiredMsisdnMaxAge = 180

expiredMsisdnPath

Syntax: expiredMsisdnPath = "dir"
Description: Location for the output file on the SMS for sending to the HLR. The output file is written by the ccsWalletExpiry (cronjob).
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/tmp"
Notes: Not Applicable.
Example: expiredMsisdnPath = "/var/CCS/expiredMsisdns"

expiredMsisdnPrefix

Syntax: expiredMsisdnPrefix = "pre"
Description: Prefix of output file.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "MSISDNExpiry"
Notes: The filename format is: expiredMsisdnPrefixYYYYMMDDHHMMSS.export.
Example: expiredMsisdnPrefix = "prodube01_msisdnsExp"

expiredPrefix

Syntax: expiredPrefix = "prefix"
Description: The prefix of files listing wallets moving to terminated state.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "expiredWallet"
Notes:

The file is generated by ccsVWARSExpiry on the VWS and read by ccsWalletExpiry on the SMS.

The filename format is: expiredPrefix_YYYYMMDDHHMMSSexpiredSuffix

Example: expiredPrefix = "prodube01_termWallets"

removedDirectory

Syntax: removedDirectory = "dir"
Description: Defines the location of files listing wallets being removed.
Type: String.
Optionality: Optional (default used if not set).
Allowed: Not Applicable.
Default: "/IN/service_packages/CCS/logs/wallet"
Notes: The file is generated by ccsVWARSExpiry on the VWS and read by ccsWalletExpiry on the SMS.
Example: removedDirectory = "/var/CCS/removedWallets"

removedPrefix

Syntax: removedPrefix = "prefix"
Description: The prefix of files listing wallets being removed from the system.
Type: String.
Optionality: Optional (default used if not set).
Allowed:
Default: "removedWallet"
Notes:

The file is generated by ccsVWARSExpiry on the VWS and read by ccsWalletExpiry on the SMS.

Whether ccsVWARSExpiry or ccsWalletExpiry removes the wallet depends on logNotRemoveWallet.

The filename format is: removedPrefix_YYYYMMDDHHMMSSremovedSuffix

Example: removedPrefix = "prodube01_removeWallets"

Failure

If ccsWalletExpiry fails, wallet expiry updates from the VWS will fail.

Output

The ccsWalletExpiry writes error messages to the system messages file. It also writes additional output to /IN/service_packages/CCS/tmp/ccsWalletExpiry.log.

libccsCommon

libccsCommon provides common functions to various CCS processes.

Startup

libccsCommon is used by a number of CCS processes. No startup configuration is required for this library to be used.

Configuration

The libccsCommon library supports parameters from the common parameter group in the eserv.config file on all machines. For more information, see "Configuration".

VoucherRedeemFail Files

The VoucherRedeemFail files are used as an aid to fraud detection by providing a list of all redeem failures for post processing by a third party.

All type 15 ("Voucher Redeem") EDRs with a result of anything other than "success" cause a record to be written to the current fail file.

Before being added to, each fail file is archived when the maxEDRs number has been reached, or the file has been open longer than the maxOpenDuration time and there is at least one record in the file

Record Format

The pipe separated file format is follows:

VoucherNumber|MSISDN|RedemptionDate|FailureReason

The field are taken from the type 15 EDR record as follows:

Field EDR Tag
VoucherNumber VOUCHER_NUMBER.
MSISDN MSISDN when MSISDN plug-in is active, otherwise REDEEMING_ACCT_REF.
RedemptionDate RECORD_DATE.
FailureReason RESULT.

Note:

If any information is not available, the corresponding column will be left blank.

File Name Format

The naming convention for the current/temporary file is:

tmp_failed_Voucher_PID_file-open-time.log

The naming convention of the current/temporary file when it is archived for third party processing is:

failed_Voucher_PID_datetime.log'