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
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
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 thatUser_01borrowed a license forProduct_A. At this moment, the number of used licenses increased, as shown by theUsed = 1field. -
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 forProduct_A. As a result, the number of used licenses decreased, reflected byUsed = 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:
-
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 namedmatchobjects-event-zoo.oconf. -
Locate the
required-fieldsnode inside thematchobjectssection (under the root node). -
Update the
valuefields to match the corresponding CSV headers.Example: matchobjects-event-<lm>.oconfroot
{
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:
Parameter Description <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)
noteThe 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 ContentDate,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,1To parse the CSV log file, the match object configuration should look like this:
Example: matchobjects-event-zoo.oconfroot
{
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 Field CSV Header Field Description timeDateThe event timestamp is determined based on the Dateheader.featureProductThe feature used is determined based on the Productheader.userUserThe user who used the feature is determined based on the Userheader.hostComputerThe machine used in the feature usage is determined based on the Computerheader.event_typeEventThe type of event is determined based on the Eventheader.Configured Match Objects Summary
-
Save the
.oconffile to apply your changes.
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
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_01on computer014-0733started using theMoldex3D-GENERIC SOLUTION-17module at2020/04/01-14:44:36and ended the session at2020/04/01-15:36:40. The total usage duration was approximately52minutes, and the usage mode is indicated by the value1. -
Similarly, the second row logs another session for
Moldex3D-MFE SOLVER-17with 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:
-
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 namedmatchobjects-event-moldex3d.oconf. -
Locate the
required-fieldsnode inside thematchobjectssection (under the root node). -
Update the
valuefields to match the corresponding CSV headers.Example: matchobjects-event-<lm>.oconfroot
{
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:
Parameter Description <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)
noteThe 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 ContentModule,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.15To parse the CSV log file, the match object configuration should look like this:
Example: matchobjects-event-moldex3d.oconfroot
{
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 Field CSV Header Field Description start-timeStart TimeThe start timestamp is determined based on the Start Timeheader.end-timeExit TimeThe end timestamp is determined based on the Exit Timeheader.featureModuleThe feature used is determined based on the Moduleheader.feature_versionClient VersionThe version of the used feature is determined based on the Client Versionheader.userUserThe user who used the feature is determined based on the Userheader.hostComputerThe machine used in the feature usage is determined based on the Computerheader.Configured Match Objects Summary
-
Save the
.oconffile 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:
-
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 namedmatchobjects-event-moldex3d.oconf. -
Locate the
start-end-event_typenode inside thematchobjectssection (under the root node). -
Update the
valueofstart-event-typeandend-event-typeto match the check-in and check-out.Example: matchobjects-event-<lm>.oconfstart-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:
Parameter Description <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 ContentModule,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.15Since the CSV log file contains a header named Start Time and Exit Time, the configuration should look like this:
Example: matchobjects-event-moldex3d.oconfroot
{
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 Timecorresponds tostart-event_type, representing when the license session began (check-out), andExit Timecorresponds toend-event_type, representing when the license session ended (check-in). -
Save the
.oconffile to apply your changes.
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
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
Activatedfield, which serves as the check-out time, is populated with a timestamp2023-01-05 13:07:47, while theDeactivatedfield (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
Activatedfield is empty. Still, theDeactivatedfield contains a timestamp2023-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:
-
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 namedmatchobjects-event-iconstruct.oconf.warningThe
matchobjects-event-iconstruct.oconffile is for illustration purposes only and does not exist in the Configuration directory. -
Locate the
required-fieldsnode inside thematchobjectssection (under the root node). -
Update the
valuefields to match the corresponding CSV headers.Example: matchobjects-event-<lm>.oconfroot
{
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:
Parameter Description <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)
noteThe 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 ContentLicense 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,8To parse the CSV log file, the match object configuration should look like this:
Example: matchobjects-event-<lm>.oconfroot
{
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 Field CSV Header Field Description checkout_timeActivatedThe check-out timestamp is determined based on the Activatedheader.checkin_timeDeactivatedThe check-in timestamp is determined based on the Deactivatedheader.userUser NameThe user who used the feature is determined based on the User Nameheader.hostMachine NameThe machine used in the feature usage is determined based on the Machine Nameheader.event_typeStatusThe type of event is determined based on the Statusheader.featureLicense CodeThe feature used is determined based on the License Codeheader.Configured Match Objects Summary
-
Save the
.oconffile to apply your changes.
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:
-
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 namedmatchobjects-event-moldex3d.oconf. -
Locate the
skip-linenode inside thematchobjectssection (under the root node). -
Update the
skip-linenode under thematchobjectssection.Example: matchobjects-event-<lm>.oconfskip-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:
Parameter Description <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
noteEach
match-regexdefines 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 ContentFile=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.15To skip the irrelevant lines, the configuration for
skip-lineshould look like this:Example: matchobjects-event-moldex3d.oconfroot
{
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-regexskips any line that begins withFile=Moldex3DUsageLog, such asFile=Moldex3DUsageLog_20250106.csv,,,,,,. - The second
match-regexskips any line that begins withCreate time, such asCreate time=2025/01/06-00:00:20,,,,,,.
- The first
These lines will be ignored during parsing and excluded from the final output, ensuring only relevant license usage entries are processed.
Be cautious when configuring skip-line rules. Incorrect patterns may unintentionally exclude valid data, resulting in incomplete or inaccurate parsing results.