Skip to main content

Generic Log Parser

Introduction

The Open iT Generic Log Parser is designed to transform collected raw license usage data stored in CSV-formatted log files with a header line into Open iT standard format suitable for reporting.

Requirements

  • Open iT Core Server version 10.2.560 or later
  • Administrative rights
  • CSV log file that follows the supported format
  • Activated periodic log data collection of license manager(s)

Supported CSV Format

To transform license usage data from CSV files into the Open iT standard data format, the CSV log file must follow the supported file structure, contain required license usage fields, and conform to recognized logging format.

Supported File Structure

The CSV log file should:

  • include a header row that clearly identifies each field
  • use comma as delimiter
  • include rows that contain license usage activity

Supported License Usage Fields

The CSV logs must contain required fields indicating the:

  • user who accessed the license
  • feature or module being used
  • machine or computer where the license was checked out
  • timestamp for license check-in and check-out
  • event type identifying whether the usage record represents a check-in or check-out event (if available)

Supported License Log Formats

The CSV logs must contain records of check-in and check-out events with the following format:

  • Single Event Per Line
    This is a format where each line in the CSV log represents a single event, either a check-out or a check-in of a license usage.

  • Combined Events Per Line
    This is a format where each line in the CSV log contains both the start time (check-out) and the end time (check-in) of a license usage.

  • Inferred Events Per Line
    This is a format where check-in and check-out events are recorded on separate lines, but each line includes both time fields (check-in and check-out time columns).

Configuring Generic Log Parser

note

For supported license managers, the match object is already pre-configured by default. However, if customization is needed, such as when the CSV structure changes, you may follow the configuration steps outlined below.

For Single Event Per Line

The Generic Log Parser processes logs where check-in and check-out events are recorded as separate lines in a CSV file, with each line representing a single event.

Sample Log File Content
Example: CSV Log File Content
Date,Event,Computer,User,Product,Type,Total,Used
2019-08-05 17:48:57,License loaned out,Computer_01,User_01,Product_A,Commercial,Release,5,1
2019-08-05 18:36:46,License returned,Computer_01,User_01,Product_A,Commercial,Release,5,0

In this example:

  • In the first row, at 2019-08-05 17:48:57, the event recorded is License loaned out, indicating that User_01 borrowed a license for Product_A. At this moment, the number of used licenses increased, as shown by the Used = 1 field.

  • In the second row, at 2019-08-05 18:36:46, the event recorded is License returned, meaning that the same user, User_01, returned the license for Product_A. As a result, the number of used licenses decreased, reflected by Used = 0.

To make sure that the parser correctly maps data from your CSV file, align the match object configuration file with the CSV header fields:

  1. Go to the Configuration directory, which is by default in C:\Program Files\OpeniT\Core\Configuration. In this directory, locate and open the matchobject configuration file (.oconf) corresponding to your license manager. For example, if you are configuring the Zoo License Manager, open the file named matchobjects-event-zoo.oconf.

  2. Locate the required-fields node inside the matchobjects section (under the root node).

  3. Update the value fields to match the corresponding CSV headers.

    Example: matchobjects-event-<lm>.oconf
    root
    {
    matchobjects
    {
    ...
    required-fields
    {
    type=string
    value=time
    time
    {
    type=string
    value=<date>
    }
    feature
    {
    type=string
    value=<feature>
    }
    user
    {
    type=string
    value=<user>
    }
    host
    {
    type=string
    value=<machine>
    }
    event_type
    {
    type=string
    value=<event>
    }
    }
    ...
    }
    }

    Where:

    ParameterDescription
    <date>Specifies the timestamp of the event.
    <feature>Specifies the name of the used feature.
    <user>Specifies the name of the user who used the license.
    <machine>Specifies the host machine or computer used to check out the license.
    <event>Specifies the type of event.
    Parameters for Match Object Configuration (Sample License Manager)

    note

    The structure and list of required fields may vary depending on the license manager.

    Example:

    The following is an example of the actual CSV header and a sample log entry generated by the Zoo License Manager, which uses the Single Event Per Line format:

    Example: Zoo License Manager Log File Content
    Date,Event,Computer,User,Product,Type,Total,Used
    14.05.2020 11.43.58,License loaned out,DEVICE001,user01,Rhinoceros 6.0 Commercial,Release,2,1
    14.05.2020 11.50.45,License returned,DEVICE001,user01,Rhinoceros 6.0 Commercial,Release,2,0
    14.05.2020 11.53.54,License loaned out,DEVICE001,user01,Rhinoceros 6.0 Commercial,Release,2,1
    14.05.2020 12:04:35,License returned,DEVICE002,user02,Rhinoceros 5.0 Educational Lab License,Release,60,0
    14.05.2020 12:05:07,License loaned out,DEVICE002,user02,Rhinoceros 5.0 Educational Lab License,Release,60,1

    To parse the CSV log file, the match object configuration should look like this:

    Example: matchobjects-event-zoo.oconf
    root
    {
    matchobjects
    {
    ...
    required-fields
    {
    type=string
    value=time
    time
    {
    type=string
    value=Date
    }
    feature
    {
    type=string
    value=Product
    }
    user
    {
    type=string
    value=User
    }
    host
    {
    type=string
    value=Computer
    }
    event_type
    {
    type=string
    value=Event
    }
    }
    ...
    }
    }

    This configuration example maps the required fields from the CSV log file to Open iT format. Specifically:

    Match Object Required FieldCSV Header FieldDescription
    timeDateThe event timestamp is determined based on the Date header.
    featureProductThe feature used is determined based on the Product header.
    userUserThe user who used the feature is determined based on the User header.
    hostComputerThe machine used in the feature usage is determined based on the Computer header.
    event_typeEventThe type of event is determined based on the Event header.
    Configured Match Objects Summary

  4. Save the .oconf file to apply your changes.

warning

Any configuration mismatch will prevent the Generic Log Parser from accurately recognizing the data. Make sure that each value in the match object exactly matches the corresponding header name in your CSV file.

For Combined Events Per Line

The Generic Log Parser processes logs where both check-in and check-out events are recorded within the same line of the CSV file. Each line logs a single license usage event.

Sample Log File Content
Example: CSV Log File Content
Module,User@Computer,Start Time,Exit Time,Duration Time [D-H:M:S],Duration Time [min],Use Mode
Moldex3D-GENERIC SOLUTION-17,User_01@014-0733,2020/04/01-14:44:36,2020/04/01-15:36:40,0-0:52:03,52.07,1
Moldex3D-MFE SOLVER-17,User_01@014-0733,2020/04/01-14:44:36,2020/04/01-15:36:40,0-0:52:03,52.07,1

In this example:

  • In the first row, User_01 on computer 014-0733 started using the Moldex3D-GENERIC SOLUTION-17 module at 2020/04/01-14:44:36 and ended the session at 2020/04/01-15:36:40. The total usage duration was approximately 52 minutes, and the usage mode is indicated by the value 1.

  • Similarly, the second row logs another session for Moldex3D-MFE SOLVER-17 with identical start and end times.

To make sure that the parser correctly maps data from your CSV file, align the match object configuration file with the CSV header fields:

  1. Go to the Configuration directory, which is by default in C:\Program Files\OpeniT\Core\Configuration. In this directory, locate and open the matchobject configuration file (.oconf) corresponding to your license manager. For example, if you are configuring the Moldex3D License Manager, open the file named matchobjects-event-moldex3d.oconf.

  2. Locate the required-fields node inside the matchobjects section (under the root node).

  3. Update the value fields to match the corresponding CSV headers.

    Example: matchobjects-event-<lm>.oconf
    root
    {
    matchobjects
    {
    ...
    required-fields
    {
    type=string
    value=time|duration
    start-time
    {
    type=string
    value=<start_time>
    }
    end-time
    {
    type=string
    value=<exit_time>
    }
    feature
    {
    type=string
    value=<module>
    }
    feature_version
    {
    type=string
    value=<client_version>
    }
    user
    {
    type=string
    value=<user>
    }
    host
    {
    type=string
    value=<machine>
    }
    }
    ...
    }
    }

    Where:

    ParameterDescription
    <start_time>Specifies the start timestamp of the event.
    <exit_time>Specifies the exit timestamp of the event.
    <feature>Specifies the name of the used feature.
    <client_version>Specifies the version of the used licensed feature.
    <user>Specifies the user who used the license.
    <machine>Specifies the host machine or computer used to check out the license.
    Parameters for Match Object Configuration (Sample License Manager)

    note

    The structure and list of required fields may vary depending on the license manager.

    Example:

    The following is an example of the actual CSV header and a sample log entry generated by the Moldex3D License Manager, which uses the Combined Events Per Line format:

    Example: Moldex3D License Manager Log File Content
    Module,User@Computer,Start Time,Exit Time,Duration Time [D-H:M:S],Duration Time [min],Use Mode,Client Version
    Moldex3D-STUDIO-2024,M.P. Jdoe@DESKTOP-WIN123,2025/01/06-15:51:55,2025/01/06-15:52:04,0- 0:00:09,0.15,1,1.15
    Moldex3D-STUDIO-2024,M.P. Jdoe@DESKTOP-WIN123,2025/01/06-15:52:09,2025/01/06-16:19:43,0- 0:27:34,27.57,1,1.15

    To parse the CSV log file, the match object configuration should look like this:

    Example: matchobjects-event-moldex3d.oconf
    root
    {
    matchobjects
    {
    ...
    required-fields
    {
    type=string
    value=time|duration
    start-time
    {
    type=string
    value=Start Time
    }
    end-time
    {
    type=string
    value=Exit Time
    }
    feature
    {
    type=string
    value=Module
    }
    feature_version
    {
    type=string
    value=Client Version
    }
    user
    {
    type=string
    value=User
    }
    host
    {
    type=string
    value=Computer
    }
    }
    ...
    }
    }

    This configuration example maps the required fields from the CSV log file to Open iT format. Specifically:

    Match Object Required FieldCSV Header FieldDescription
    start-timeStart TimeThe start timestamp is determined based on the Start Time header.
    end-timeExit TimeThe end timestamp is determined based on the Exit Time header.
    featureModuleThe feature used is determined based on the Module header.
    feature_versionClient VersionThe version of the used feature is determined based on the Client Version header.
    userUserThe user who used the feature is determined based on the User header.
    hostComputerThe machine used in the feature usage is determined based on the Computer header.
    Configured Match Objects Summary

  4. Save the .oconf file to apply your changes.

In this CSV log format, there is no explicit event type field recorded. To properly distinguish the check-in and check-out events, configure the start-end-event_type in the match object configuration file:

  1. Go to the Configuration directory, which is by default in C:\Program Files\OpeniT\Core\Configuration. In this directory, locate and open the matchobject configuration file (.oconf) corresponding to your license manager. For example, if you are configuring the Moldex3D License Manager, open the file named matchobjects-event-moldex3d.oconf.

  2. Locate the start-end-event_type node inside the matchobjects section (under the root node).

  3. Update the value of start-event-type and end-event-type to match the check-in and check-out.

    Example: matchobjects-event-<lm>.oconf
    start-end-event_type
    {
    description=This object defines event types.
    match1
    {
    start-event_type
    {
    type=string
    value=<start_time>
    }
    end-event_type
    {
    type=string
    value=<exit_time>
    }
    }
    }

    Where:

    ParameterDescription
    <start_time>Specifies the check-out time field in the CSV header.
    <exit_time>Specifies the check-in time field in the CSV header.
    Parameters for Match Object Configuration - start-end-event_type (Sample License Manager)

    Example:

    The following is an example of the actual CSV header and a sample log entry generated by the Moldex3D License Manager, which produces CSV logs without an event type header:

    Example: Moldex3D License Manager Log File Content
    Module,User@Computer,Start Time,Exit Time,Duration Time [D-H:M:S],Duration Time [min],Use Mode,Client Version
    Moldex3D-STUDIO-2024,M.P. Jdoe@DESKTOP-WIN123,2025/01/06-15:51:55,2025/01/06-15:52:04,0- 0:00:09,0.15,1,1.15
    Moldex3D-STUDIO-2024,M.P. Jdoe@DESKTOP-WIN123,2025/01/06-15:52:09,2025/01/06-16:19:43,0- 0:27:34,27.57,1,1.15

    Since the CSV log file contains a header named Start Time and Exit Time, the configuration should look like this:

    Example: matchobjects-event-moldex3d.oconf
    root
    {
    matchobjects
    {
    start-end-event_type
    {
    description=This object defines event types.
    match1
    {
    start-event_type
    {
    type=string
    value=Start Time
    }
    end-event_type
    {
    type=string
    value=Exit Time
    }
    }
    }
    ...
    }
    ...
    }

    In this example, the Start Time corresponds to start-event_type, representing when the license session began (check-out), and Exit Time corresponds to end-event_type, representing when the license session ended (check-in).

  4. Save the .oconf file to apply your changes.

warning

Any configuration mismatch will prevent the Generic Log Parser from accurately recognizing the data. Make sure that each value in the match object exactly matches the corresponding header name in your CSV file.

For Inferred Events Per Line

The Generic Log Parser processes logs where check-in and check-out events are recorded on separate lines, with each line containing both time fields (check-in and check-out time). It infers the event type based on which field is populated:

  • If only the check-in time is present and the check-out time is empty, the parser identifies the line as a check-in event.
  • If only the check-out time is present and the check-in time is empty, the parser identifies the line as a check-out event.
Sample Log File Content
Example: CSV Log File Content
License Code,User Name,Machine Name,Lease End,Activated,Status,Deactivated,Computer ID,VM,VM Lease End
License_123ABC,User_jdoe,DesktopWin_123,2023-01-05 13:07:47,2023-01-05 13:07:47,ACTIVATED,,ComputerID_01,HyperV,8
License_123ABC,User_jdoe,DesktopWin_123,2023-01-05 21:07:47,,DEACTIVATED,2023-01-05 15:41:12,ComputerID_01,HyperV,8

In this example:

  • The first row shows that the Activated field, which serves as the check-out time, is populated with a timestamp 2023-01-05 13:07:47, while the Deactivated field (the check-in time) is empty. This indicates a check-out event, meaning the license was activated at that time and is still active.

  • The second row shows that the Activated field is empty. Still, the Deactivated field contains a timestamp 2023-01-05 15:41:12. This represents a check-in event, meaning the license was deactivated or returned at that specific time.

To make sure that the parser correctly maps data from your CSV file, align the match object configuration file with the CSV header fields:

  1. Go to the Configuration directory, which is by default in C:\Program Files\OpeniT\Core\Configuration. In this directory, locate and open the matchobject configuration file (.oconf) corresponding to your license manager. For example, if you are configuring the iConstruct License Manager, open the file named matchobjects-event-iconstruct.oconf.

    warning

    The matchobjects-event-iconstruct.oconf file is for illustration purposes only and does not exist in the Configuration directory.

  2. Locate the required-fields node inside the matchobjects section (under the root node).

  3. Update the value fields to match the corresponding CSV headers.

    Example: matchobjects-event-<lm>.oconf
    root
    {
    matchobjects
    {
    ...
    required-fields
    {
    type=string
    value=time
    checkout_time
    {
    type=string
    value=<activated_time>
    }
    checkin_time
    {
    type=string
    value=<deactivated_time>
    }
    user
    {
    type=string
    value=<user>
    }
    host
    {
    type=string
    value=<machine>
    }
    event_type
    {
    type=string
    value=<event_type>
    }
    feature
    {
    type=string
    value=<feature>
    }
    }
    ...
    }
    }

    Where:

    ParameterDescription
    <activated_time>Specifies the checkout timestamp.
    <deactivated_time>Specifies the check-in timestamp.
    <user>Specifies the user who used the license.
    <machine>Specifies the host machine or computer used to check out the license.
    <event_type>Specifies the type of event.
    <feature>Specifies the feature name.
    Parameters for Match Object Configuration (Sample License Manager)

    note

    The structure and list of required fields may vary depending on the license manager.

    Example:

    The following is an example of the actual CSV header and a sample log entry generated by the iConstruct License Manager, which uses the Inferred Events Per Line format:

    Example: iConstruct License Manager Log File Content
    License Code,User Name,Machine Name,Lease End,Activated,Status,Deactivated,Computer ID,VM,VM Lease End
    License_987ZYX,User_jdoe,DesktopWin_123,2023-01-05 13:07:47,2023-01-05 13:07:47,ACTIVATED,,ComputerID_01,HyperV,8
    License_654WVU,User_jdoe,DesktopWin_123,2023-01-05 21:07:47,,DEACTIVATED,2023-01-05 15:41:12,ComputerID_01,HyperV,8

    To parse the CSV log file, the match object configuration should look like this:

    Example: matchobjects-event-<lm>.oconf
    root
    {
    matchobjects
    {
    ...
    required-fields
    {
    type=string
    value=time
    checkout_time
    {
    type=string
    value=Activated
    }
    checkin_time
    {
    type=string
    value=Deactivated
    }
    user
    {
    type=string
    value=User Name
    }
    host
    {
    type=string
    value=Machine Name
    }
    event_type
    {
    type=string
    value=Status
    }
    feature
    {
    type=string
    value=License Code
    }
    }
    ...
    }
    }

    This configuration example maps the required fields from the CSV log file to Open iT format. Specifically:

    Match Object Required FieldCSV Header FieldDescription
    checkout_timeActivatedThe check-out timestamp is determined based on the Activated header.
    checkin_timeDeactivatedThe check-in timestamp is determined based on the Deactivated header.
    userUser NameThe user who used the feature is determined based on the User Name header.
    hostMachine NameThe machine used in the feature usage is determined based on the Machine Name header.
    event_typeStatusThe type of event is determined based on the Status header.
    featureLicense CodeThe feature used is determined based on the License Code header.
    Configured Match Objects Summary

  4. Save the .oconf file to apply your changes.

warning

Any configuration mismatch will prevent the Generic Log Parser from accurately recognizing the data. Make sure that each value in the match object exactly matches the corresponding header name in your CSV file.

Configuring Line Skipping

Generic Log Parser can skip unnecessary or irrelevant lines for parsing by configuring the skip-line node in the match object configuration file.

To configure skip-line:

  1. Go to the Configuration directory, which is by default in C:\Program Files\OpeniT\Core\Configuration. In this directory, locate and open the matchobject configuration file (.oconf) corresponding to your license manager. For example, if you are configuring the Moldex3D License Manager, open the file named matchobjects-event-moldex3d.oconf.

  2. Locate the skip-line node inside the matchobjects section (under the root node).

  3. Update the skip-line node under the matchobjects section.

    Example: matchobjects-event-<lm>.oconf
    skip-line
    {
    description=These are used to identify lines that need to be skipped.
    <match_number>
    {
    match-regex
    {
    type=string
    value=<line_pattern_to_skip>
    }
    }
    // Additional matches can be added as match2, match3, etc.
    }

    Where:

    ParameterDescription
    <match_number>Specifies the unique identifier for the match condition. (e.g., match1, match2, etc.)
    <line_pattern_to_skip>Specifies the pattern to skip.
    Parameters for Configuring Match Objects - Skip Line

    note

    Each match-regex defines a regular expression pattern that identifies lines to skip. If a line matches any of the configured patterns, the parser excludes it from further parsing.

    Example:

    The following is an example of the actual CSV header and a sample log entry generated by the Moldex3D License Manager, which produces CSV logs with irrelevant lines for parsing:

    Example: Moldex3D License Manager Log File Content
    File=Moldex3DUsageLog_20250106.csv,,,,,,
    Create time=2025/01/06-00:00:20,,,,,,
    Module,User@Computer,Start Time,Exit Time,Duration Time [D-H:M:S],Duration Time [min],Use Mode,Client Version
    Moldex3D-STUDIO-2024,M.P. Jdoe@DESKTOP-WIN123,2025/01/06-15:51:55,2025/01/06-15:52:04,0- 0:00:09,0.15,1,1.15
    Moldex3D-STUDIO-2024,M.P. Jdoe@DESKTOP-WIN123,2025/01/06-15:52:09,2025/01/06-16:19:43,0- 0:27:34,27.57,1,1.15

    To skip the irrelevant lines, the configuration for skip-line should look like this:

    Example: matchobjects-event-moldex3d.oconf
    root
    {
    matchobjects
    {
    ...
    skip-line
    {
    description=Skip Moldex3D Usage Log and Create time
    match1
    {
    match-regex
    {
    type=string
    value=File=Moldex3DUsageLog.*
    }
    }
    match2
    {
    match-regex
    {
    type=string
    value=Create time.*
    }
    }
    }
    ...
    }
    ...
    }

    In this example:

    • The first match-regex skips any line that begins with File=Moldex3DUsageLog, such as File=Moldex3DUsageLog_20250106.csv,,,,,,.
    • The second match-regex skips any line that begins with Create time, such as Create time=2025/01/06-00:00:20,,,,,,.

These lines will be ignored during parsing and excluded from the final output, ensuring only relevant license usage entries are processed.

warning

Be cautious when configuring skip-line rules. Incorrect patterns may unintentionally exclude valid data, resulting in incomplete or inaccurate parsing results.