Module ocs
This library module implements the public API for the
ocs application.
Copyright © 2016 - 2026 SigScale Global Inc.
This library module implements the public API for the
ocs application.
aka_cred() = #aka_cred{k = binary(), opc = binary(), dif = integer()}
bucket_attributes() = #{bucket_type := normal | session, from_bucket => [bucket_source()], reservations => reservations()}
bucket_source() = #{id := string(), amount := pos_integer(), unit_size := pos_integer(), unit_price := pos_integer(), expire := pos_integer() | undefined}
bucket_status() = active | expired | suspended
eap_method() = pwd | ttls | aka | akap
match() = {exact, term()} | {notexact, term()} | {lt, term()} | {lte, term()} | {gt, term()} | {gte, term()} | {like, [term()]}
offer_status() = in_study | in_design | in_test | active | rejected | launched | retired | obsolete
password() = [50..57 | 97..104 | 106..107 | 109..110 | 112..116 | 119..122]
pla_ref() = #pla_ref{id = string() | undefined | '_', href = string() | undefined | '_', name = string() | undefined | '_', class_type = string() | undefined | '_', base_type = string() | undefined | '_', schema = string() | undefined | '_', ref_type = string() | undefined | '_'}
product_price_type() = recurring | one_time | usage | tariff | pla_ref()
product_status() = created | pending_active | aborted | cancelled | active | suspended | pending_terminate | terminated
quantity() = #quantity{amount = integer(), units = atom() | string()}
range() = #range{lower = quantity(), upper = quantity()}
rate() = #rate{numerator = quantity(), denominator = quantity()}
recur_period() = hourly | daily | weekly | monthly | yearly
reservation() = #{ts := pos_integer(), debit := non_neg_integer(), reserve := non_neg_integer(), service_id => non_neg_integer(), charging_key => non_neg_integer()}
reservations() = #{SesssionID::list() => reservation()}
resource() = #resource{id = string() | undefined | '$1' | '_', href = string() | undefined | '_', name = string() | undefined | '_' | '$2', description = string() | undefined | '_', category = string() | undefined | '_', class_type = string() | undefined | '_', base_type = string() | undefined | '_', schema = string() | undefined | '_', state = string() | undefined | '_', substate = string() | undefined | '_', version = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', last_modified = {TS::pos_integer(), N::pos_integer()} | undefined | '_', related = [resource_rel()] | '_', specification = specification_ref() | undefined | '_', characteristic = [resource_char()] | '_'}
resource_char() = #resource_char{name = string() | undefined | '_', class_type = string() | undefined | '_', schema = string() | undefined | '_', value = term() | undefined | '_'}
resource_rel() = #resource_rel{id = string() | undefined | '_', href = string() | undefined | '_', name = string() | undefined | '$4' | '_', type = string() | undefined | '_', referred_type = string() | undefined | '_'}
service_status() = feasibilityChecked | designed | reserved | active | inactive | terminated
specification_ref() = #specification_ref{id = string() | undefined | '_' | '$3', href = string() | undefined | '_', name = string() | undefined | '_', version = string() | undefined | '_'}
| add_client/2 | Create an entry in the client table. |
| add_client/3 | Equivalent to add_client(Address,
3799,
radius,
Secret,
PasswordRequired).
|
| add_client/5 | Equivalent to add_client(Address,
Port,
Protocol,
Secret,
PasswordRequired,
true).
|
| add_client/6 | Create an entry in the client table. |
| find_client/1 | Find a client by IP address. |
| update_client/2 | Update a client password. |
| update_client/3 | Update client port and protocol. |
| get_clients/0 | Get all clients. |
| delete_client/1 | Delete an entry from the client table. |
| get_products/0 | |
| query_product/4 | Query product. |
| add_product/2 | Equivalent to add_product(Offer,
ServiceRefs,
undefined,
undefined,
[]).
|
| add_product/3 | Equivalent to add_product(Offer,
ServiceRefs,
undefined,
undefined,
Characteristics).
|
| add_product/5 | Add a product inventory subscription instance. |
| update_product/1 | Update an existing Product. |
| find_product/1 | Look up entry in product table. |
| delete_product/1 | Delete an entry from product table. |
| add_service/2 | Equivalent to add_service(Identity,
Password,
undefined,
[],
true,
false).
|
| add_service/3 | Equivalent to add_service(Identity,
Password,
ProductRef,
[],
true,
false).
|
| add_service/4 | Equivalent to add_service(Identity,
Password,
ProductRef,
Chars,
[],
true,
false).
|
| add_service/5 | Equivalent to add_service(Identity,
Password,
ProductRef,
Chars,
Attributes,
true,
false).
|
| add_service/8 | Create an entry in the service table. |
| update_service/1 | Update an existing Service. |
| add_bucket/2 | Add a new bucket to bucket table or update exsiting bucket. |
| find_bucket/1 | Look up an entry in the bucket table. |
| get_buckets/0 | Get all buckets. |
| get_buckets/1 | Get all buckets for given product reference. |
| query_bucket/3 | Query bucket. |
| delete_bucket/1 | Delete entry in the bucket table. |
| adjustment/1 | Applying balance adjustment. |
| log_adjustment/7* | Log an adjustment in the ABMF log. |
| find_service/1 | Look up an entry in the service table. |
| get_services/0 | Get all entries in the service table. |
| query_service/3 | Query services. |
| delete_service/1 | Delete an entry in the service table. |
| add_offer/1 | Add a new entry in offer table. |
| find_offer/1 | Find offer by product id. |
| get_offers/0 | Get all entries in the offer table. |
| delete_offer/1 | Delete an entry from the offer table. |
| query_offer/7 | Query offer entires. |
| add_resource/1 | Create a new Resource. |
| update_resource/1 | Update an existing Resource. |
| get_resources/0 | List all entries in the resource table. |
| get_resource/1 | Get a Resource by identifier. |
| delete_resource/1 | Delete a Resource. |
| query_resource/5 | Query resources. |
| generate_password/0 | Equivalent to generate_password(12).
|
| generate_identity/0 | Equivalent to generate_identity(7).
|
| start/4 | Equivalent to start(Type, Address, Port, []).
|
| start/5 | Start a RADIUS/DIAMETER request handler. |
| stop/3 | Stop a RADIUS/DIAMETER request handler. |
| get_acct/1 | Get RADIUS/DIAMETER acct request handlers. |
| get_auth/1 | Get RADIUS/DIAMETER auth request handlers. |
| add_user/3 | Add an HTTP user. |
| list_users/0 | List HTTP users. |
| get_user/1 | Get an HTTP user record. |
| delete_user/1 | Delete an existing HTTP user. |
| query_users/3 | Query the user table. |
| statistics/1 | Get system statistics. |
| clean_services/1 | Clean the service table. |
| clean_buckets/0 | Clean the bucket table. |
| clean_buckets/1 | Clean the bucket table. |
| clean_reservations/1 | Clean reservations held in balance buckets. |
| clean_reservations/2 | Clean reservations held in balance buckets. |
| parse_bucket/1 | Replace reservations field of bucket with attributes. |
| subscription/4 | Apply one time and recurring charges. |
| charge/3* | Charge Amount to Buckets. |
| credit/3* | Credit Amount on Buckets. |
| end_period/2 | Calculate end of period. |
add_client(Address, Secret) -> Result
- Address = inet:ip_address()
- Secret = string() | binary()
- Result = {ok, #client{address = inet:ip_address() | undefined | '_', identifier = binary() | '_', port = inet:port_number() | undefined | '_', protocol = radius | diameter | undefined | '_', secret = binary() | undefined | '_', password_required = boolean() | '_', trusted = boolean() | '_', last_modified = tuple() | undefined | '_'}}
Equivalent to add_client(Address, 3799, radius, Secret, true).
Create an entry in the client table.
add_client(Address, Secret, PasswordRequired) -> Result
- Address = inet:ip_address()
- Secret = string() | binary()
- PasswordRequired = boolean()
- Result = {ok, #client{address = inet:ip_address() | undefined | '_', identifier = binary() | '_', port = inet:port_number() | undefined | '_', protocol = radius | diameter | undefined | '_', secret = binary() | undefined | '_', password_required = boolean() | '_', trusted = boolean() | '_', last_modified = tuple() | undefined | '_'}}
Equivalent to add_client(Address,
3799,
radius,
Secret,
PasswordRequired).
add_client(Address, Port, Protocol, Secret, PasswordRequired) -> Result
- Address = inet:ip_address()
- Port = inet:port_number() | undefined
- Protocol = atom() | undefined
- Secret = string() | binary() | undefined
- PasswordRequired = boolean()
- Result = {ok, #client{address = inet:ip_address() | undefined | '_', identifier = binary() | '_', port = inet:port_number() | undefined | '_', protocol = radius | diameter | undefined | '_', secret = binary() | undefined | '_', password_required = boolean() | '_', trusted = boolean() | '_', last_modified = tuple() | undefined | '_'}}
Equivalent to add_client(Address,
Port,
Protocol,
Secret,
PasswordRequired,
true).
add_client(Address, Port, Protocol, Secret, PasswordRequired, Trusted) -> Result
- Address = inet:ip_address()
- Port = inet:port_number() | undefined
- Protocol = atom() | undefined
- Secret = string() | binary() | undefined
- PasswordRequired = boolean()
- Trusted = boolean()
- Result = {ok, #client{address = inet:ip_address() | undefined | '_', identifier = binary() | '_', port = inet:port_number() | undefined | '_', protocol = radius | diameter | undefined | '_', secret = binary() | undefined | '_', password_required = boolean() | '_', trusted = boolean() | '_', last_modified = tuple() | undefined | '_'}}
Create an entry in the client table.
find_client(Address) -> Result
- Address = inet:ip_address()
- Result = {ok, #client{address = inet:ip_address() | undefined | '_', identifier = binary() | '_', port = inet:port_number() | undefined | '_', protocol = radius | diameter | undefined | '_', secret = binary() | undefined | '_', password_required = boolean() | '_', trusted = boolean() | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = not_found | term()
Find a client by IP address.
update_client(Address, Password) -> Result
- Address = string() | inet:ip_address()
- Password = string() | binary()
- Result = ok | {error, Reason}
- Reason = not_found | term()
Update a client password.
update_client(Address, Port, Protocol) -> Result
Update client port and protocol.
get_clients() -> Result
- Result = [#client{address = inet:ip_address() | undefined | '_', identifier = binary() | '_', port = inet:port_number() | undefined | '_', protocol = radius | diameter | undefined | '_', secret = binary() | undefined | '_', password_required = boolean() | '_', trusted = boolean() | '_', last_modified = tuple() | undefined | '_'}] | {error, Reason}
- Reason = term()
Get all clients.
delete_client(Client) -> ok
Delete an entry from the client table.
query_product(Cont, MatchId, MatchOffer, MatchService) -> Result
- Cont = start | any()
- MatchId = Match
- MatchOffer = Match
- MatchService = Match
- Match = {exact, string()} | {like, string()} | '_'
- Result = {Cont1, [#product{id = string() | undefined | '_' | '$1', name = string() | undefined | '_' | '$2', start_date = pos_integer() | undefined | '_' | '$4', end_date = pos_integer() | undefined | '_' | '$5', status = product_status() | undefined | '_', product = string() | undefined | '_' | '$3', characteristics = [{Name::string(), Value::term()}] | '_', payment = [{Price::string(), DueDate::pos_integer()}] | '_', balance = [BucketRef::term()] | '_', service = [ServiceRef::binary()] | '_', last_modified = tuple() | undefined | '_'}]} | {error, Reason}
- Cont1 = eof | any()
- Reason = term()
Query product
add_product(Offer, ServiceRefs) -> Result
- Offer = string()
- ServiceRefs = [ServiceRef]
- Result = {ok, #product{id = string() | undefined | '_' | '$1', name = string() | undefined | '_' | '$2', start_date = pos_integer() | undefined | '_' | '$4', end_date = pos_integer() | undefined | '_' | '$5', status = product_status() | undefined | '_', product = string() | undefined | '_' | '$3', characteristics = [{Name::string(), Value::term()}] | '_', payment = [{Price::string(), DueDate::pos_integer()}] | '_', balance = [BucketRef::term()] | '_', service = [ServiceRef::binary()] | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- ServiceRef = binary()
- Reason = service_not_found | service_has_product | offer_not_found | term()
Equivalent to add_product(Offer,
ServiceRefs,
undefined,
undefined,
[]).
add_product(Offer, ServiceRefs, Characteristics) -> Result
- Offer = string()
- ServiceRefs = [ServiceRef]
- Characteristics = [tuple()]
- ServiceRef = binary()
- Result = {ok, #product{id = string() | undefined | '_' | '$1', name = string() | undefined | '_' | '$2', start_date = pos_integer() | undefined | '_' | '$4', end_date = pos_integer() | undefined | '_' | '$5', status = product_status() | undefined | '_', product = string() | undefined | '_' | '$3', characteristics = [{Name::string(), Value::term()}] | '_', payment = [{Price::string(), DueDate::pos_integer()}] | '_', balance = [BucketRef::term()] | '_', service = [ServiceRef::binary()] | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = service_not_found | service_has_product | offer_not_found | term()
Equivalent to add_product(Offer,
ServiceRefs,
undefined,
undefined,
Characteristics).
add_product(OfferId, ServiceRefs, StartDate, EndDate, Characteristics) -> Result
- OfferId = string()
- ServiceRefs = [ServiceRef]
- StartDate = undefined | pos_integer()
- EndDate = undefined | pos_integer()
- Characteristics = [tuple()]
- ServiceRef = binary()
- Result = {ok, #product{id = string() | undefined | '_' | '$1', name = string() | undefined | '_' | '$2', start_date = pos_integer() | undefined | '_' | '$4', end_date = pos_integer() | undefined | '_' | '$5', status = product_status() | undefined | '_', product = string() | undefined | '_' | '$3', characteristics = [{Name::string(), Value::term()}] | '_', payment = [{Price::string(), DueDate::pos_integer()}] | '_', balance = [BucketRef::term()] | '_', service = [ServiceRef::binary()] | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = service_not_found | service_has_product | offer_not_found | term()
Add a product inventory subscription instance.
update_product(Product) -> Result
- Result = {ok, Product} | {error, Reason}
- Reason = not_found | stale | term()
Update an existing Product.
find_product(ProductRef) -> Result
- ProductRef = string()
- Result = {ok, Product} | {error, Reason}
- Product = #product{id = string() | undefined | '_' | '$1', name = string() | undefined | '_' | '$2', start_date = pos_integer() | undefined | '_' | '$4', end_date = pos_integer() | undefined | '_' | '$5', status = product_status() | undefined | '_', product = string() | undefined | '_' | '$3', characteristics = [{Name::string(), Value::term()}] | '_', payment = [{Price::string(), DueDate::pos_integer()}] | '_', balance = [BucketRef::term()] | '_', service = [ServiceRef::binary()] | '_', last_modified = tuple() | undefined | '_'}
- Reason = not_found | term()
Look up entry in product table
delete_product(ProductRef) -> Result
- ProductRef = string()
- Result = ok
Delete an entry from product table
add_service(Identity, Password) -> Result
- Identity = string() | binary() | undefined
- Password = string() | binary() | aka_cred() | undefined
- Result = {ok, #service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = term()
Equivalent to add_service(Identity,
Password,
undefined,
[],
true,
false).
add_service(Identity, Password, ProductRef) -> Result
- Identity = string() | binary() | undefined
- Password = string() | binary() | aka_cred() | undefined
- ProductRef = string() | undefined
- Result = {ok, #service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = term()
Equivalent to add_service(Identity,
Password,
ProductRef,
[],
true,
false).
add_service(Identity, Password, ProductRef, Chars) -> Result
- Identity = string() | binary() | undefined
- Password = string() | binary() | aka_cred() | undefined
- ProductRef = string() | undefined
- Chars = [tuple()]
- Result = {ok, #service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = term()
Equivalent to add_service(Identity,
Password,
ProductRef,
Chars,
[],
true,
false).
add_service(Identity, Password, ProductRef, Chars, Attributes) -> Result
- Identity = string() | binary() | undefined
- Password = string() | binary() | aka_cred() | undefined
- ProductRef = string() | undefined
- Chars = [tuple()]
- Attributes = radius_attributes:attributes() | binary()
- Result = {ok, #service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = term()
Equivalent to add_service(Identity,
Password,
ProductRef,
Chars,
Attributes,
true,
false).
add_service(Identity, Password, State, ProductRef, Chars, Attributes, EnabledStatus, MultiSessions) -> Result
- Identity = string() | binary() | undefined
- Password = string() | binary() | aka_cred() | undefined
- State = atom() | string() | undefined
- ProductRef = string() | undefined
- Chars = [tuple()] | undefined
- Attributes = radius_attributes:attributes() | binary()
- EnabledStatus = boolean() | undefined
- MultiSessions = boolean() | undefined
- Result = {ok, #service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = term()
Create an entry in the service table.
Authentication will be done using Password. An optional list of
RADIUS Attributes, to be returned in an AccessRequest response,
may be provided. These attributes will overide any default values.
ProductRef key for product inventory reference,
Enabled status and MultiSessions status may be provided.
update_service(Service) -> Result
- Result = {ok, Service} | {error, Reason}
- Reason = not_found | stale | term()
Update an existing Service.
add_bucket(ProductRef, Bucket) -> Result
- ProductRef = string()
- Bucket = #bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}
- Result = {ok, BucketBefore, BucketAfter} | {error, Reason}
- BucketBefore = #bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}
- BucketAfter = #bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}
- Reason = term()
Add a new bucket to bucket table or update exsiting bucket
find_bucket(BucketId) -> Result
- BucketId = term()
- Result = {ok, Bucket} | {error, Reason}
- Bucket = #bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}
- Reason = not_found | term()
Look up an entry in the bucket table.
get_buckets() -> Result
- Result = Buckets | {error, Reason}
- Buckets = [#bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}]
- Reason = term()
Get all buckets.
get_buckets(ProdRef) -> Result
- ProdRef = string()
- Result = [#bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}] | {error, Reason}
- Reason = product_not_found
Get all buckets for given product reference.
query_bucket(Cont, MatchId, MatchProduct) -> Result
- Cont = start | any()
- MatchId = Match
- MatchProduct = Match
- Match = {exact, string()} | {like, string()} | '_'
- Result = {Cont1, [#bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}]} | {error, Reason}
- Cont1 = eof | any()
- Reason = term()
Query bucket
delete_bucket(BucketId) -> ok
Delete entry in the bucket table.
adjustment(Adjustment) -> Result
- Adjustment = #adjustment{id = string() | undefined | '_' | '$1', type = string() | undefined | '_', description = string() | undefined | '_', reason = string() | undefined | '_', amount = integer() | undefined | '_', units = octets | cents | seconds | messages | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', product = (ProdRef::term() | '_'), service = (ServiceRef::term() | '_'), bucket = (BucketRef::term() | '_')}
- Result = ok | {error, Reason}
- Reason = not_found | term()
Applying balance adjustment.
log_adjustment(AmountAfter, DeleteRefs, BucketRefs, Units, ProductRef, Amount, AmountBefore) -> Result
- AmountAfter = integer() | undefined
- DeleteRefs = list()
- BucketRefs = list()
- Units = cents | seconds | octets | messages
- ProductRef = [string()]
- Amount = integer()
- AmountBefore = integer() | undefined
- Result = ok | {error, Reason}
- Reason = term()
Log an adjustment in the ABMF log.
find_service(Identity) -> Result
- Identity = string() | binary()
- Result = {ok, #service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = not_found | term()
Look up an entry in the service table.
get_services() -> Result
- Result = [#service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}] | {error, Reason}
- Reason = term()
Get all entries in the service table.
query_service(Cont, MatchId, MatchProduct) -> Result
- Cont = start | any()
- MatchId = Match
- MatchProduct = Match
- Match = {exact, string()} | {like, string()} | '_'
- Result = {Cont1, [#service{name = binary() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', state = service_status() | undefined | '_', password = binary() | aka_cred() | undefined | '_', attributes = [tuple()] | undefined | '_', product = (ProductRef::string() | undefined | '_'), enabled = boolean() | '_', disconnect = boolean() | '_', session_attributes = [{TS::pos_integer(), Attributes::[tuple()]}] | '_', characteristics = [{Name::string(), Value::term()}] | '_', multisession = boolean() | '_', last_modified = tuple() | undefined | '_'}]} | {error, Reason}
- Cont1 = eof | any()
- Reason = term()
Query services
delete_service(Identity) -> ok
- Identity = string() | binary()
Delete an entry in the service table.
add_offer(Offer) -> Result
- Offer = #offer{name = string() | undefined | '_' | '$1' | '$3', description = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = offer_status() | '_' | undefined | '_', specification = string() | undefined | '_', bundle = [#bundled_po{name = string() | undefined, status = offer_status() | undefined, lower_limit = non_neg_integer() | undefined, upper_limit = non_neg_integer() | undefined, default = non_neg_integer() | undefined}] | '_', price = [#price{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined, char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}], alteration = #alteration{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined} | undefined}] | '_', char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}] | '_', last_modified = tuple() | undefined | '_'}
- Result = {ok, #offer{name = string() | undefined | '_' | '$1' | '$3', description = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = offer_status() | '_' | undefined | '_', specification = string() | undefined | '_', bundle = [#bundled_po{name = string() | undefined, status = offer_status() | undefined, lower_limit = non_neg_integer() | undefined, upper_limit = non_neg_integer() | undefined, default = non_neg_integer() | undefined}] | '_', price = [#price{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined, char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}], alteration = #alteration{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined} | undefined}] | '_', char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}] | '_', last_modified = tuple() | undefined | '_'}} | {error, Reason}
- Reason = validation_failed | term()
Add a new entry in offer table.
find_offer(OfferID) -> Result
- OfferID = string()
- Result = {ok, Offer} | {error, Reason}
- Offer = #offer{name = string() | undefined | '_' | '$1' | '$3', description = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = offer_status() | '_' | undefined | '_', specification = string() | undefined | '_', bundle = [#bundled_po{name = string() | undefined, status = offer_status() | undefined, lower_limit = non_neg_integer() | undefined, upper_limit = non_neg_integer() | undefined, default = non_neg_integer() | undefined}] | '_', price = [#price{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined, char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}], alteration = #alteration{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined} | undefined}] | '_', char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}] | '_', last_modified = tuple() | undefined | '_'}
- Reason = term()
Find offer by product id
get_offers() -> Result
- Result = [#offer{name = string() | undefined | '_' | '$1' | '$3', description = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = offer_status() | '_' | undefined | '_', specification = string() | undefined | '_', bundle = [#bundled_po{name = string() | undefined, status = offer_status() | undefined, lower_limit = non_neg_integer() | undefined, upper_limit = non_neg_integer() | undefined, default = non_neg_integer() | undefined}] | '_', price = [#price{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined, char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}], alteration = #alteration{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined} | undefined}] | '_', char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}] | '_', last_modified = tuple() | undefined | '_'}] | {error, Reason}
- Reason = term()
Get all entries in the offer table.
delete_offer(OfferID) -> Result
- OfferID = string()
- Result = ok
Delete an entry from the offer table.
query_offer(Cont, Name, Description, Status, SDT, EDT, Price) -> Result
- Cont = start | any()
- Name = Match
- Description = Match
- Status = Match
- SDT = Match
- EDT = Match
- Price = Match
- Match = {exact, string()} | {notexact, string()} | {like, string()} | '_'
- Result = {Cont1, [#offer{name = string() | undefined | '_' | '$1' | '$3', description = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = offer_status() | '_' | undefined | '_', specification = string() | undefined | '_', bundle = [#bundled_po{name = string() | undefined, status = offer_status() | undefined, lower_limit = non_neg_integer() | undefined, upper_limit = non_neg_integer() | undefined, default = non_neg_integer() | undefined}] | '_', price = [#price{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined, char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}], alteration = #alteration{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined} | undefined}] | '_', char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}] | '_', last_modified = tuple() | undefined | '_'}]} | {error, Reason}
- Cont1 = eof | any()
- Reason = term()
Query offer entires
add_resource(Resource) -> Result
- Result = {ok, Resource} | {error, Reason}
- Reason = table_not_found | table_exists | missing_char | term()
Create a new Resource.
update_resource(Resource) -> Result
- Result = {ok, Resource} | {error, Reason}
- Reason = not_found | not_allowed | stale | missing_char | term()
Update an existing Resource.
get_resources() -> Result
- Result = [#resource{id = string() | undefined | '$1' | '_', href = string() | undefined | '_', name = string() | undefined | '_' | '$2', description = string() | undefined | '_', category = string() | undefined | '_', class_type = string() | undefined | '_', base_type = string() | undefined | '_', schema = string() | undefined | '_', state = string() | undefined | '_', substate = string() | undefined | '_', version = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', last_modified = {TS::pos_integer(), N::pos_integer()} | undefined | '_', related = [resource_rel()] | '_', specification = specification_ref() | undefined | '_', characteristic = [resource_char()] | '_'}] | {error, Reason}
- Reason = term()
List all entries in the resource table.
get_resource(ResourceID) -> Result
- ResourceID = string()
- Result = {ok, Resource} | {error, Reason}
- Resource = resource()
- Reason = not_found | term()
Get a Resource by identifier.
delete_resource(ResourceID) -> Result
- ResourceID = string()
- Result = ok | {error, Reason}
- Reason = not_found | missing_char | term()
Delete a Resource.
query_resource(Cont, MatchId, MatchName, MatchResSpecId, MatchRelName) -> Result
- Cont = start | any()
- MatchId = match() | [match()] | '_'
- MatchName = match() | [match()] | '_'
- MatchResSpecId = match() | [match()] | '_'
- MatchRelName = match() | [match()] | '_'
- Result = {Cont1, [#resource{id = string() | undefined | '$1' | '_', href = string() | undefined | '_', name = string() | undefined | '_' | '$2', description = string() | undefined | '_', category = string() | undefined | '_', class_type = string() | undefined | '_', base_type = string() | undefined | '_', schema = string() | undefined | '_', state = string() | undefined | '_', substate = string() | undefined | '_', version = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', last_modified = {TS::pos_integer(), N::pos_integer()} | undefined | '_', related = [resource_rel()] | '_', specification = specification_ref() | undefined | '_', characteristic = [resource_char()] | '_'}]} | {error, Reason}
- Cont1 = eof | any()
- Reason = term()
Query resources
Equivalent to generate_password(12).
generate_identity() -> string()
Equivalent to generate_identity(7).
start(Protocol, Type, Address, Port) -> Result
- Protocol = radius | diameter
- Type = auth | acct
- Address = inet:ip_address()
- Port = pos_integer()
- Result = {ok, Pid} | {error, Reason}
- Pid = pid()
- Reason = term()
Equivalent to start(Type, Address, Port, []).
start(Protocol, Type, Address, Port, Options) -> Result
- Protocol = radius | diameter
- Type = auth | acct
- Address = inet:ip_address()
- Port = pos_integer()
- Options = [Option]
- Option = EapOption | SubOption | NrfOption | diameter:service_opt()
- EapOption = {eap_method_prefer, EapType} | {eap_method_order, EapTypes}
- EapType = eap_method()
- EapTypes = [eap_method()]
- SubOption = {sub_id_type, [SubIdType]}
- SubIdType = imsi | msisdn | nai | sip | private
- NrfOption = {nrf_uri, NrfUri} | {rf_class, RfClass}
- NrfUri = uri_string:uri_string()
- RfClass = b | a
- Result = {ok, Pid} | {error, Reason}
- Pid = pid()
- Reason = term()
Start a RADIUS/DIAMETER request handler.
stop(Protocol, Type, Pid) -> Result
- Protocol = radius | diameter
- Type = auth | acct
- Pid = pid()
- Result = ok | {error, Reason}
- Reason = term()
Stop a RADIUS/DIAMETER request handler.
get_acct(Protocol) -> Result
- Protocol = radius | diameter
- Result = [pid()] | {error, Reason}
- Reason = term()
Get RADIUS/DIAMETER acct request handlers.
get_auth(Protocol) -> Result
- Protocol = radius | diameter
- Result = [pid()] | {error, Reason}
- Reason = term()
Get RADIUS/DIAMETER auth request handlers.
add_user(Username, Password, UserData) -> Result
- Username = string()
- Password = string()
- UserData = [{Name, Value}]
- Name = atom()
- Value = term()
- Result = {ok, LastModified} | {error, Reason}
- LastModified = {integer(), integer()}
- Reason = user_exists | term()
Add an HTTP user.
HTTP Basic authentication (RFC7617) is required with
Username and Password used to construct the
Authorization header in requests.
UserData contains addtional properties specific to each user.
list_users() -> Result
- Result = {ok, Users} | {error, Reason}
- Users = [Username]
- Username = string()
- Reason = term()
Equivalent to mod_auth:list_users(Address, Port, Dir).
List HTTP users.
get_user(Username) -> Result
- Username = string()
- Result = {ok, User} | {error, Reason}
- User = #httpd_user{}
- Reason = term()
Equivalent to mod_auth:get_user(Username, Address, Port, Dir).
Get an HTTP user record.
delete_user(Username) -> Result
- Username = string()
- Result = ok | {error, Reason}
- Reason = term()
Delete an existing HTTP user.
query_users(Cont, MatchId, MatchLocale) -> Result
- Cont = start | any()
- MatchId = Match
- MatchLocale = Match
- Match = {exact, string()} | {notexact, string()} | {like, string()}
- Result = {Cont1, [#httpd_user{}]} | {error, Reason}
- Cont1 = eof | any()
- Reason = term()
Query the user table.
statistics(Item) -> Result
- Item = scheduler_utilization
- Result = {ok, {Etag, Interval, Report}} | {error, Reason}
- Etag = string()
- Interval = pos_integer()
- Report = [ItemResult]
- ItemResult = {SchedulerId, Utilization}
- SchedulerId = pos_integer()
- Utilization = non_neg_integer()
- Reason = term()
Get system statistics.
clean_services(Before) -> Result
Clean the service table.
Traverse the service table, removing expired sessions.
The service table entries include a session_attributes
field used to track active sessions. It is a list of
{TS, Attributes} where TS is a timestamp and Attributes
is a list of RADIUS or DIAMETER AVPs uniquely identifying a
session. Instability of the RADIUS/DIAMETER connections may
result in sessions not being removed.
This function lazily traverses the service table, removing
any session timestamped earlier than Before.
clean_buckets() -> Result
- Result = ok | {error, Reason}
- Reason = term()
Clean the bucket table.
Traverse the buckets table, removing expired buckets.
The bucket table entries optionally include an
expiration date and time in the end_date field.
This function lazily traverses the bucket table,
removing expired buckets.
clean_buckets(Before) -> Result
Clean the bucket table.
Traverse the buckets table, removing old buckets.
WARNING: This will permanently delete subscriber balances!
There should be no reason to use this function
in normal operation of the OCS. Expired buckets
are removed as they are encountered during normal
rating operations.
The bucket table entries include a last_modified
field with a timestamp of the last write. The end_date
field may (optionally) contain an expiration date.
This function lazily traverses the bucket table,
removing expired buckets and stale buckets which
have not been modified after Before.
clean_reservations(Before) -> Result
Equivalent to clean_reservations(Before, true).
Clean reservations held in balance buckets.
clean_reservations(Before, Refund) -> Result
Clean reservations held in balance buckets.
Traverse the buckets table, removing old reservations.
The bucket table entries include a reservations
attribute describing credit debits and reserves and
a timestamp of the last transaction.
This function lazily traverses the bucket table,
removing reservations which haven't been updated
since Before.
If Refund is true the unused portion of
reservations to be removed will be returned to
the remaining amount of the bucket.
parse_bucket(Bucket) -> Bucket
- Bucket = #bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}
Replace reservations field of bucket with attributes.
subscription(Product, Offer, Buckets, InitialFlag) -> Result
- Product = #product{id = string() | undefined | '_' | '$1', name = string() | undefined | '_' | '$2', start_date = pos_integer() | undefined | '_' | '$4', end_date = pos_integer() | undefined | '_' | '$5', status = product_status() | undefined | '_', product = string() | undefined | '_' | '$3', characteristics = [{Name::string(), Value::term()}] | '_', payment = [{Price::string(), DueDate::pos_integer()}] | '_', balance = [BucketRef::term()] | '_', service = [ServiceRef::binary()] | '_', last_modified = tuple() | undefined | '_'}
- Offer = #offer{name = string() | undefined | '_' | '$1' | '$3', description = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = offer_status() | '_' | undefined | '_', specification = string() | undefined | '_', bundle = [#bundled_po{name = string() | undefined, status = offer_status() | undefined, lower_limit = non_neg_integer() | undefined, upper_limit = non_neg_integer() | undefined, default = non_neg_integer() | undefined}] | '_', price = [#price{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined, char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}], alteration = #alteration{name = string() | undefined, description = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, type = product_price_type() | undefined, period = recur_period() | undefined, units = cents | octets | seconds | messages | undefined, size = integer() | undefined, amount = integer() | undefined, currency = string() | undefined} | undefined}] | '_', char_value_use = [#char_value_use{name = string() | undefined, description = string() | undefined, type = string() | undefined, min = non_neg_integer() | undefined, max = pos_integer() | undefined, specification = '_' | string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, values = [#char_value{default = boolean() | undefined, units = string() | undefined, start_date = pos_integer() | undefined, end_date = pos_integer() | undefined, value = quantity() | range() | rate() | term() | undefined, from = term() | undefined, to = term() | undefined, type = string() | undefined, interval = open | closed | closed_bottom | closed_top | undefined, regex = {CompiledRegEx::re:mp(), OriginalRegEx::string()} | undefined}]}] | '_', last_modified = tuple() | undefined | '_'}
- Buckets = [#bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}]
- InitialFlag = boolean()
- Result = {Product, Buckets}
Apply one time and recurring charges.
charge(ProdRef, Amount, Buckets) -> Buckets
- ProdRef = string()
- Amount = non_neg_integer()
- Buckets = [#bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}]
Charge Amount to Buckets.
credit(Units, Amount, Buckets) -> Result
- Units = cents | octets | seconds | messages
- Amount = pos_integer()
- Buckets = [#bucket{id = string() | undefined | '_' | '$1', name = string() | undefined | '_', start_date = pos_integer() | undefined | '_', end_date = pos_integer() | undefined | '_', status = bucket_status() | undefined | '_', remain_amount = integer() | '_', attributes = bucket_attributes() | '_', units = octets | cents | seconds | messages | undefined | '_', price = string() | '_', product = [ProdRef::term()] | '_', last_modified = tuple() | undefined | '_'}]
- Result = {RemainAmount, DeleteRefs, Buckets}
- RemainAmount = non_neg_integer()
- DeleteRefs = [string()]
Credit Amount on Buckets.
end_period(StartTime, Period) -> EndTime
- StartTime = non_neg_integer()
- Period = hourly | daily | weekly | monthly | yearly
- EndTime = non_neg_integer()
Calculate end of period.
Generated by EDoc