# Feature Set Mapping

# Introduction

The core aspect of any chargeback/Pay-Per-Use system revolves around normalizing the data to enable comparison between usage and purchasing information.

For certain applications, there is no one-to-one match between the licenses (features) used and the application. Often, several applications can share a license, making it difficult to pinpoint which application used it.

Feature set mapping maps the licenses back to applications (feature sets), primarily considering cost. It aims to identify the cheapest possible combination of feature sets that include all features checked out at any given time.

This is applicable for all data types with featureset classification.

# Feature Set Mapping Guide

The feature set configuration consists of the DEFAULT, GROUP, and UNMAPPED blocks.

Sample featureset.map
DEFAULT
    rules:
	    ignore used_licenses < 1
	    count used_licenses
    general:
	    used_licenses=%count%
	    licenses=%totalcount%
        feature_version=all

GROUP "ANSYS Startup Program - Structural and Fluids Bundle"
	@count=99999
	@cost=6
	general:
		featureset="ANSYS Startup Program - Structural and Fluids Bundle"
	elements:
		feature="anshpc_pack"
		feature="cfd_base"
		feature="cfd_solve_level1"
		feature="cfd_solve_level2"

GROUP "ANSYS CFD Pro"
	@count=99999
	@cost=4
	general:
		featureset="ANSYS CFD Pro"
	elements:
		feature="cfd_base" 
		feature="cfd_solve_level1"

UNMAPPED
    general:
        featureset=unmapped
        used_licenses=1
        licenses=1

# DEFAULT

Use the DEFAULT block to set common attributes, rules, and general assignments. There should be only one DEFAULT block in a featureset.map file and it should be identical to all such files:

DEFAULT
	rules:
	    ignore used_licenses < 1
	    count used_licenses
    general:
	    used_licenses=%count%
	    licenses=%totalcount%
        feature_version=all

As you noticed, the DEFAULT block consists of two sections: rules and general.

Specify the rules as methods with additional details.

DEFAULT
	rules:
	    ignore used_licenses < 1
	    count used_licenses
    general:
	    used_licenses=%count%
	    licenses=%totalcount%
        feature_version=all
Example Description
ignore used_licenses < 1 This rule indicates that any record without actual license use will be ignored. Other available operators are <=, >, >=, ==, and !=.
count used_licenses Since one GROUP may include several instances of a single feature, count is used to specify the record field that holds the feature count.
DEFAULT: Rules

The general sub-block lists a set of assignments of values to record fields. There should be only one assignment of value per line, following the format <name>=<value>.

DEFAULT
	rules:
	    ignore used_licenses < 1
	    count used_licenses
    general:
	    used_licenses=%count%
	    licenses=%totalcount%
        feature_version=all

The record fields are indexed by the following names:

Name Description
used_licenses This specifies the licenses in use.
licenses This specifies the maximum available licenses.
featureset_version This specifies the feature set version.
DEFAULT: General Assignments

A value can either be a fixed value or a variable. Variable names must be enclosed in %.

Example Description
%count% The number of instances of the group in the current combination.
%totalcount% The count value defined for each group (i.e., maximum possible group instances).
DEFAULT: Possible Values for General Assignments

Optionally, you can add the configuration-override sub-block under DEFAULT to override the method used to generate feature sets.

Sample method override
DEFAULT
	rules:
	    ignore used_licenses < 1
	    count used_licenses
    general:
	    used_licenses=%count%
	    licenses=%totalcount%
        feature_version=all
    configuration-override:
        method=complete
Methods Description
complete This method produces optimal results but operates at a slow pace. This approach checks for every possible constellation of groups and then picks the optimal one.
cheapest-first This method produces sub-optimal results but operates at a fast pace. This approach picks the cheapest groups first and fills them up as much as possible.
expensive-first This method produces sub-optimal results. It is not as fast as cheapest-first but has better results. This approach figures out which groups to include (cannot avoid), picks the most expensive first, and then fills it up as much as possible. We're then left with fewer features for the next most expensive group and so on.
auto This automatically selects between complete or expensive-first depending on the data size.
DEFAULT: Possible Values for Method

The expensive-first method comes with a configurable find-largest algorithm that fills up all the groups at the same (high) cost, then picks the one containing the most features. The result is better but can take more time to complete. This is inactive by default.

To enable this functionality, add expensive-first.find-largest=true under configuration-override:

Enable find-largest
DEFAULT
	rules:
	    ignore used_licenses < 1
	    count used_licenses
    general:
	    used_licenses=%count%
	    licenses=%totalcount%
        feature_version=all
    configuration-override:
        expensive-first.find-largest=true

Here are some reminders when using configuration-override:

  • Since method=expensive-first is the default, there's no need to specify an override for this method.
  • The expensive-first.find-largest entry applies only when method=expensive-first, so there is no point in overriding it when any other method is used.
  • For the above reasons, it's typically unnecessary to specify both entries in a feature set map file. You can either specify a different method or use find-largest with the default method=expensive-first.

# GROUP

GROUP blocks are the definition of each feature set.

GROUP "ANSYS Startup Program - Structural and Fluids Bundle"
	@count=99999
	@cost=6
	general:
		featureset="ANSYS Startup Program - Structural and Fluids Bundle"
	elements:
		feature="anshpc_pack"
		feature="cfd_base"
		feature="cfd_solve_level1"
		feature="cfd_solve_level2"

This is where you define the attributes, such as the count, cost, and validity of the feature set; general details, such as the featureset name; and the elements that lists the individual features, vendor licenses, etc..

Attributes are values defined by a keyword (attribute name), and each keyword is preceded by @.

GROUP "ANSYS Startup Program - Structural and Fluids Bundle"
	@count=99999
	@cost=6
	general:
		featureset="ANSYS Startup Program - Structural and Fluids Bundle"
	elements:
		feature="anshpc_pack"
		feature="cfd_base"
		feature="cfd_solve_level1"
		feature="cfd_solve_level2"
Attribute Description
count This specifies the maximum number of instances allowed for the group.
cost This specifies the cost for the group.
valid_from (e.g., @valid_from=2010-01-01) This specifies that the group cannot be used before this date (if not specified, then the group is valid from any date).
expires (e.g., @expires=2012-01-01) This specifies that the group cannot be used on or after this date (if not specified, then there is no expiration).
GROUP: Possible Attributes

Similar to the DEFAULT block, the general sub-block allows you to list general details about the feature set. Refer to the GROUP: General Assignments table below for the available record fields.

GROUP "ANSYS Startup Program - Structural and Fluids Bundle"
	@count=99999
	@cost=6
	general:
		featureset="ANSYS Startup Program - Structural and Fluids Bundle"
	elements:
		feature="anshpc_pack"
		feature="cfd_base"
		feature="cfd_solve_level1"
		feature="cfd_solve_level2"

The elements sub-block lists the record indices where the value must match to be eligible for the group.

GROUP "ANSYS Startup Program - Structural and Fluids Bundle"
	@count=99999
	@cost=6
	general:
		featureset="ANSYS Startup Program - Structural and Fluids Bundle"
	elements:
		feature="anshpc_pack"
		feature="cfd_base"
		feature="cfd_solve_level1"
		feature="cfd_solve_level2"
Index Description
feature This specifies the license feature name.
feature_version This specifies the feature version.
featureset This specifies the feature set name.
featureset_version This specifies the feature set version.
product This specifies the vendor license name.
package This specifies the license package name.
GROUP: General Assignments

Each line defines a unique value set where all values must match. If a record matches any line, then it is eligible.

Example
elements:
    feature="Concentric Circles" feature_version=3.14
    feature=Squares
    product=Geometry

With the example above, if a record's feature name is Concentric Circles and its version is 3.14, or its feature name is Squares, or its vendor license name is Geometry, then it is eligible for this group.

# UNMAPPED

Any feature eligible for a feature set but is not actually assigned to a set will be assigned to the UNMAPPED set.

Example
UNMAPPED
    general:
        featureset=unmapped
        used_licenses=1
        licenses=1

# Configuring Feature Set Mapping

  1. Open featureset.map in the Configuration directory, which is by default in C:\Program Files\OpeniT\Core\Configuration.

    Notice that it contains instructions on how to edit the file.

  2. Modify the mapping file. Refer to the Feature Set Mapping Guide above.

    Empty lines are allowed — any line beginning with # as the first non-white character is considered a comment.

  3. Save the changes.

  1. Open featureset.map in the etc directory, which is by default in /var/opt/openit/etc.

    Notice that it contains instructions on how to edit the file.

  2. Modify the mapping file. Refer to the Feature Set Mapping Guide above.

    Empty lines are allowed — any line beginning with # as the first non-white character is considered a comment.

  3. Save the changes.

Licpoll2

FlexLog2

Licenseevents

Licenseevents2

# Next Steps?

Proceed with data regeneration after configuring all the necessary mapping files to apply the changes in the real-time and historical reports.

For real-time reports:

   Generating License Status Data  

For historical reports:

   Data Generation  

We value your feedback!

Please take a few minutes to complete our survey and share your thoughts on your recent experience with our documentation.

Take survey

Close