Autodesk Monitor is a console application that reads the current status of Flexible License Manager (FlexLM) for the license usage analysis.
FlexLM software is a prominent license management solution that enables software vendors to impose restrictions on the number of software seats available to their customers.
This tool is developed specifically for L-IT GmbH.
How does it work? Autodesk Monitor runs every 15 minutes (from the windows task scheduler), program execution results store into the MSSQL database. On the day end this tool generates a Microsoft Excel report, which contains information about:
- Used license file
- Product names
- Bundles
- Features
- Existing / used seats (licenses)
- Expiry date
- Min / Max / Avg usage
- Errors (if occurred on the status check)
Also, this software may:
- Detect license overuse
- Display usage by locations / hostnames / usernames
The main problem that I run into is how to parse status from the Flexible License Manager. I used lmutil.exe, it works great, but it has one small issue and this is the output:
lmutil - Copyright (c) 1989-2018 Flexera. All Rights Reserved.
Flexible License Manager status on Mon 11/2/2020 14:34
[Detecting lmgrd processes...]
License server status: [email protected]
License file(s) on 10.206.12.112: C:\Autodesk\Network License Manager\lic\de-iph-emeaalic005056BA114A.lic:
10.206.12.112: license server UP (MASTER) v11.16.2
Vendor daemon status (on 10.206.12.112):
adskflex: UP v11.16.2
Feature usage info:
Users of 86829PDCOLL_T_F: (Total of 50 licenses issued; Total of 6 licenses in use)
"86829PDCOLL_T_F" v1.000, vendor: adskflex, expiry: 28-feb-2023
vendor_string: commercial:extendable
floating license
USERNAME PCNAME PCNAME (v1.000) (10.206.12.112/27000 8835), start Mon 9/28 12:58 (linger: 4008249 / 7041600)
USERNAME PCNAME PCNAME (v1.000) (10.206.12.112/27000 7130), start Mon 11/2 12:36
USERNAME PCNAME PCNAME (v1.000) (10.206.12.112/27000 6374), start Mon 11/2 8:31
USERNAME PCNAME PCNAME (v1.000) (10.206.12.112/27000 1993), start Mon 11/2 8:45
USERNAME PCNAME PCNAME (v1.000) (10.206.12.112/27000 4047), start Mon 11/2 11:30
USERNAME PCNAME PCNAME (v1.000) (10.206.12.112/27000 1603), start Mon 11/2 12:10
Users of 72400VLTM_T_F: (Total of 28 licenses issued; Total of 0 licenses in use)
Users of 87391VLTM_2021_0F: (Total of 28 licenses issued; Total of 0 licenses in use)
So I have written a lot of regular extensions for all found cases 🥶.
// Examples:
// 48 RESERVATIONs for GROUP GROUP1 (host3.domain.net / 27002)
// 8 RESERVATIONs for GROUP GROUP2 (host3.domain.net / 27002)
// 8 RESERVATIONs for GROUP GROUP3 (host3.domain.net / 27002)
var groupExpr = new Regex(@"^(\s+|)\d+\s+\w+\s+for\s+.*$", RegexOptions.Multiline);
Used Technologies
- .NET 4.6
- Microsoft Command Line Utils
- Entity Framework
- NPOI
- Bouncy Castle
- SharpZipLib