Monitoring MathLM

What Is MonitorLM?
MonitorLM gives information on the total number of licenses available and checked out, the fully qualified domain name and username of those who have them checked out, and so on. MonitorLM can send output to the terminal, open a web browser, or write to a file. The output for MonitorLM is customizable by means of a configuration file. MonitorLM automatically supports IPv4 and IPv6 environments.
Starting MonitorLM
To start MonitorLM, change directory to the location in which MathLM is installed, and type .\monitorlm servername (on Windows) or ./monitorlm servername (on Linux or Mac). The first argument of the monitorlm command specifies the name of the license server running MathLM. If you do not specify a server name explicitly, the local machine name is chosen as the default.
MonitorLM Command-Line Options
The following options are available using the monitorlm command. The syntax for specifying an option is monitorlm servername options.
-file file
specify file to which output should be directed
-format f
specify the format for the output of MonitorLM
-health
check if the server is accessible and healthy
-localtime
specify that all time references are in local time instead of GMT
-template file
specify the template file for the output of MonitorLM
monitorlm command-line options.
If -file is not set, MonitorLM will write to stdout.
If -health is set, all other options are ignored, and the exit code of MonitorLM will indicate the result of the health check (0 for success; 1 for failure).
The three possible output formats in -format are as follows:
text
send output in text format to stdout (default on Linux)
html
send output in HTML format and launch a web browser (default on Windows and Mac)
cgi
send output in HTML format to stdout
-format output formats.
The cgi format is used when MonitorLM is launched directly by a web browser.
This shows what the output of MonitorLM looks like, with -format set to text.
Online help is available at
http://reference.wolfram.com/network

MathLM Version 11.2
MathLM Server hostname.domain.com
Date : Thursday, August 29 2017 14:11:59
    
License Usage Summary:

                            License    Total    Total
Program                        Class    in Use    Authorized
------------------------------------------------------

Mathematica                    A        2        20
MathKernel                    A        4        40


Sub Mathematica                A        0        80
Sub MathKernel                A        0        80

Licenses in Use:

                            License
Program            Version        Class    Username    Hostname            Duration
----------------------------------------------------------------------------
Mathematica        11.1            A        username    client1.domain.com    08:49
Mathematica        11.2            A        username    client2.domain.com    06:33
MathKernel        11.1            A        username    client1.domain.com    08:44
MathKernel        11.2            A        username    client2.domain.com    06:52
MathKernel        11.2            A        username    client2.domain.com    06:52
MathKernel        11.2            A        username    client2.domain.com    06:30
This shows what the output of MonitorLM looks like in a web browser, with -format set to html.

Note that when -format is set to cgi, the output of MonitorLM is sent to stdout in HTML format. This shows what that output looks like when displayed in a web browser.

Customizing the Output of MonitorLM
You can customize the content and format of the output from MonitorLM by editing a template file. This is a plain text file, which can contain the following types of elements.

Predefined Constant Tags

Here are two tables of constant tag names that can be included in the template file along with the numeric values for their possible formats.

Date Constant Tags

The following are Date Constant Tags for MonitorLM.
Tag Name
Possible Values
Description
%CONST_DATE_D#
[1...31]
day of month
%CONST_DATE_W#
1 Numeric [ 1 ... 7 ] 2 Abbreviated [ Sun ... Sat ] 3 Verbose [ Sunday ... Saturday ]
day of week
%CONST_DATE_M#
1 Numeric [ 1 ... 12 ] 2 Abbreviated [ Jan ... Dec ] 3 Verbose [ January ... December ]
month
%CONST_DATE_Y#
1 Two-digit [ 10 ] 2 Four-digit [ 2010 ]
year
%CONST_DATE_T#
1 Twelve-hour [ 10:20:15 ]
time
MonitorLM Date Constant Tags.

Server and Process Constant Tags

The following are Server and Process Constant Tags for MonitorLM.
Tag Name
Description
%CONST_SERVER_IP
MathLM IP address
%CONST_SERVER_HOST
MathLM hostname
%CONST_SERVER_DOMAIN
MathLM domain
%CONST_SERVER_FQDN
MathLM fully qualified domain name
%CONST_SERVER_VERSION
MathLM version
%CONST_CA_FE_AUTHORIZED
number of class A front ends authorized
%CONST_CA_SUB_FE_AUTHORIZED
number of class A sub-front end processes authorized
%CONST_CB_FE_AUTHORIZED
number of class B front ends authorized
%CONST_CB_SUB_FE_AUTHORIZED
number of class B sub-front end processes authorized
%CONST_TOTAL_FE_AUTHORIZED
total number of front ends authorized
%CONST_TOTAL_SUB_FE_AUTHORIZED
total number of sub-front end processes authorized
%CONST_CA_KE_AUTHORIZED
number of class A kernels authorized
%CONST_CA_SUB_KE_AUTHORIZED
number of class A sub-kernels processes authorized
%CONST_CB_KE_AUTHORIZED
number of class B kernels authorized
%CONST_CB_SUB_KE_AUTHORIZED
number of class B sub-kernel processes authorized
%CONST_TOTAL_KE_AUTHORIZED
total number of kernels authorized
%CONST_TOTAL_SUB_KE_AUTHORIZED
total number of sub-kernel processes authorized
%CONST_CA_FE_AVAILABLE
number of class A front ends available
%CONST_CA_SUB_FE_AVAILABLE
number of class A sub-front end processes available
%CONST_CB_FE_AVAILABLE
number of class B front ends available
%CONST_CB_SUB_FE_AVAILABLE
number of class B sub-front end processes available
%CONST_TOTAL_FE_AVAILABLE
total number of front ends available
%CONST_TOTAL_SUB_FE_AVAILABLE
total number of sub-front end processes available
%CONST_CA_KE_AVAILABLE
number of class A kernels available
%CONST_CA_SUB_KE_AVAILABLE
number of class A sub-kernel processes available
%CONST_CB_KE_AVAILABLE
number of class B kernels available
%CONST_CB_SUB_KE_AVAILABLE
number of class B sub-kernels processes available
%CONST_TOTAL_KE_AVAILABLE
total number of kernels available
%CONST_TOTAL_SUB_KE_AVAILABLE
total number of sub-kernel processes available
%CONST_CA_FE_OUT
number of class A front ends in use
%CONST_CA_SUB_FE_OUT
number of class A sub-front end processes in use
%CONST_CB_FE_OUT
number of class B front ends in use
%CONST_CB_SUB_FE_OUT
number of class B sub-front end processes in use
%CONST_TOTAL_FE_OUT
total number of front ends in use
%CONST_TOTAL_SUB_FE_OUT
total number of sub-front end processes in use
%CONST_CA_KE_OUT
number of class A kernels in use
%CONST_CA_SUB_KE_OUT
number of class A sub-kernel processes in use
%CONST_CB_KE_OUT
number of class B kernels in use
%CONST_CB_SUB_KE_OUT
number of class B sub-kernel processes in use
%CONST_TOTAL_KE_OUT
total number of kernels in use
%CONST_TOTAL_SUB_KE_OUT
total number of sub-kernels processes in use
MonitorLM Server and Process Constant Tags.

Customizable Variable Tags

The following are Customizable Variable Tags for MonitorLM.
Tag Name
Possible Values
Description
%VAR_DATE_AMPM
"A.M." "P.M."
text to use for a.m. and p.m. when displaying time
%VAR_MPROCESS
" Mathematica " "MathKernel" "SubMathematica" "SubMathKernel"
title for Wolfram System processes; the first string in quotes is the front end title, the second is the kernel title, the third is the sub-front end process title, and the fourth is the sub-kernel process title
%VAR_LIC_CLASS
"Class A" "Class B"
labels for each license class
%VAR_CA_AUTHORIZED_HEADER
"Class A Authorized \t Front End \t Kernel"
header for number of authorized class A licenses; use with the predefined constant tags %CONST_CA_FE_AUTHORIZED and %CONST_CA_KE_AUTHORIZED
%VAR_CA_SUB_AUTHORIZED_HEADER
"Class A Authorized \t Front End \t Kernel"
header for number of authorized class A sub-process licenses; use with the predefined constant tags %CONST_CA SUB_FE_AUTHORIZED and %CONST_CA SUB_KE_AUTHORIZED
%VAR_CB_AUTHORIZED_HEADER
"Class B Authorized \t Front End \t Kernel"
header for number of authorized class B licenses; use with the predefined constant tags %CONST_CB_FE_AUTHORIZED and %CONST_CB_KE_AUTHORIZED
%VAR_CB_SUB_AUTHORIZED_HEADER
"Class B Authorized \t Front End \t Kernel"
header for number of authorized class B sub-process licenses; use with the predefined constant tags %CONST_CB_SUB FE_AUTHORIZED and %CONST_CB_SUB KE_AUTHORIZED
%VAR_TOTAL_AUTHORIZED_HEADER
"Total Authorized \t Front End \t Kernel"
header for total number of authorized licenses; use with the predefined constant tags %CONST_TOTAL_FE_AUTHORIZED and %CONST_TOTAL_KE_AUTHORIZED
%VAR_TOTAL_SUB_AUTHORIZED_HEADER
"Total Authorized \t Front End \t Kernel"
header for total number of authorized sub-process licenses; use with the predefined constant tags %CONST_TOTAL_SUB FE_AUTHORIZED and %CONST_TOTAL_SUB KE_AUTHORIZED
%VAR_CA_CHECKEDOUT_HEADER
"Class A Licenses in Use\nUsername \t Hostname \t Program \t Slot # \t Duration"
header for information about class A licenses in use; use with the repeated tag %REP_CA_CHECKOUT_LINE
%VAR_CA_SUB_CHECKEDOUT_HEADER
"Class A Licenses in Use\nUsername \t Hostname \t Program \t Slot # \t Duration"
header for information about class A sub-process licenses in use; use with the repeated tag %REP_CA_CHECKOUT_LINE
%VAR_CB_CHECKEDOUT_HEADER
"Class B Licenses in Use\nUsername \t Hostname \t Program \t Slot # \t Duration"
header for information about class B licenses in use; use with the repeated tag %REP_CB_CHECKOUT_LINE
%VAR_CB_SUB_CHECKEDOUT_HEADER
"Class B Licenses in Use\nUsername \t Hostname \t Program \t Slot # \t Duration"
header for information about class B sub-process licenses in use; use with the repeated tag %REP_CB_SUB_CHECKOUT_LINE
%VAR_CHECKEDOUT_HEADER
"Licenses in Use\nUsername \t Hostname \t Program \t License Class \t Slot # \t Duration"
header for information about all licenses in use; use with the repeated tag %REP_GENERAL_CHECKOUT_LINE
%VAR_SUB_CHECKEDOUT_HEADER
"Licenses in Use\nUsername \t Hostname \t Program \t License Class \t Slot # \t Duration"
header for information about all sub-process licenses in use; use with the repeated tag %REP_GENERAL_SUB CHECKOUT_LINE
MonitorLM Customizable Variable Tags.

Note: The strings provided in this section are examples of possible values, not default settings. To use these tags, you must define them in your template.

Process-Dependent Tags

The following are Process-Dependent Tags for MonitorLM.
Tag Name
Description
%PROC_UID
user ID of Wolfram System process owner
%PROC_USER
username of Wolfram System process owner
%PROC_IP
IP address of machine using Wolfram System process
%PROC_HOST
hostname of machine using Wolfram System process
%PROC_DOMAIN
domain of machine using Wolfram System process
%PROC_FQDN
fully qualified domain name of machine using Wolfram System process
%PROC_SLOTNUM
slot number of Wolfram System process
%PROC_VERSION
version of client
%PROC_DURATION
time client has been running
MonitorLM Process-Dependent Tags.

Repeated Tags

The following are Repeated Tags for MonitorLM.
Tag Name
Possible Values
Description
%REP_CA_CHECKOUT_LINE
"%PROC_USER \t %PROC_HOST \t %VAR_MPROCESS \t %PROC_SLOTNUM \t %PROC_DURATION\n"
class A checkout line, specifying the format of each line in the table or block that lists the class A processes in use; corresponds to the customizable variable tag %VAR_CA_CHECKEDOUT_HEADER
%REP_CA_SUB_CHECKOUT_LINE
"%PROC_USER \t %PROC_HOST \t %VAR_MPROCESS \t %PROC_SLOTNUM \t %PROC_DURATION\n"
class A sub-process checkout line, specifying the format of each line in the table or block that lists the class A sub-processes in use; corresponds to the customizable variable tag %VAR_CA_SUB_CHECKEDOUT_HEADER
%REP_CB_CHECKOUT_LINE
"%PROC_USER \t %PROC_HOST \t %VAR_MPROCESS \t %PROC_SLOTNUM \t %PROC_DURATION\n"
class B checkout line, specifying the format of each line in the table or block that lists the class B processes in use; corresponds to the customizable variable tag %VAR_CB_CHECKEDOUT_HEADER
%REP_CB_SUB_CHECKOUT_LINE
"%PROC_USER \t %PROC_HOST \t %VAR_MPROCESS \t %PROC_SLOTNUM \t %PROC_DURATION\n"
class B sub-process checkout line, specifying the format of each line in the table or block that lists the class B sub-processes in use; corresponds to the customizable variable tag %VAR_CB_SUB_CHECKEDOUT_HEADER
%REP_GENERAL_CHECKOUT_LINE
"%PROC_USER \t %PROC_HOST \t %VAR_MPROCESS \t %VAR_LIC_CLASS \t %PROC_SLOTNUM \t %PROC_DURATION\n"
general checkout line, used if you do not want to separate classes; corresponds to the customizable variable tag %VAR_CHECKEDOUT_HEADER
%REP_GENERAL_SUB_CHECKOUT_LINE
"%PROC_USER \t %PROC_HOST \t %VAR_MPROCESS \t %VAR_LIC_CLASS \t %PROC_SLOTNUM \t %PROC_DURATION\n"
general sub-process checkout line, used if you do not want to separate classes; corresponds to the customizable variable tag %VAR_SUB_CHECKEDOUT_HEADER
MonitorLM Repeated Tags.

Note: The strings provided in this section are examples of possible values, not default settings. To use these tags, you must define them in your template.

Note: In the template file, the text wrappers and tags that make up the output to MonitorLM must follow a line containing only the keyword %TEXT with no whitespace before or after it. Definitions for customized variable tags must precede the %TEXT line. If no variable tags are customized, the %TEXT line can be the first line of the file.

Samples and Behavior
Here is a simple text file that shows only the number of processes authorized, available, and in use. This example does not need to define any variable definition tags.
The resulting output has the form shown here.
Here is a slightly more sophisticated example. It is identical to the preceding example except that it also lists the processes in use and customizes variable tags.
The resulting output has the form shown here.
The following example demonstrates HTML output. This is useful, for example, if you want to view the MonitorLM output in a web browser.
%VAR_MPROCESS = "FE" "KE" "SFE" "SKE"
%VAR_TOTAL_CHECKEDOUT_HEADER = "<TR><TD><B>Slot</B></TD> <TD><B>Program</B></TD> <TD><B>User</B></TD> <TD><B>FQDN</B></TD> </TR>\n"
%REP_GENERAL_CHECKOUT_LINE = "<TR> <TD>%PROC_SLOTNUM</TD> <TD>%VAR_MPROCESS</TD> <TD>%PROC_USER</TD> <TD>%PROC_FQDN</TD> </TR>\n"

%TEXT
<HTML>
<HEAD> <TITLE> MathLM Status </TITLE> </HEAD>
<BODY>
<TABLE BORDER=1 CELLPADDING=5>
<TR><TD COLSPAN=2><B>MathLM Server</B></TD> <TD COLSPAN=2><B>%CONST_SERVER_FQDN</B></TD> </TR>
<TR><TD COLSPAN=2>Time/Date</TD> <TD COLSPAN=2>[%CONST_DATE_T2] [%CONST_DATE_M3 %CONST_DATE_D, %CONST_DATE_Y2]</TD> </TR>
<TR><TD COLSPAN=2>Authorized</TD> <TD>%CONST_TOTAL_FE_AUTHORIZED</TD> <TD>%CONST_TOTAL_KE_AUTHORIZED</TD></TR>
<TR><TD COLSPAN=2>Available</TD> <TD>%CONST_TOTAL_FE_AVAILABLE</TD> <TD>%CONST_TOTAL_KE_AVAILABLE</TD></TR>
<TR><TD COLSPAN=2>In Use</TD> <TD>%CONST_TOTAL_FE_OUT</TD> <TD>%CONST_TOTAL_KE_OUT</TD></TR>

%VAR_TOTAL_CHECKEDOUT_HEADER
%REP_GENERAL_CHECKOUT_LINE

</TABLE>
</BODY>
</HTML>
The resulting output has the form shown here.