启动记录器 - 跟踪每次在计算机上启动 JMP 的时间启动记录器JMP 插件,版本 1
由杰夫·帕金森撰写,杰夫·珀金森@jmp.com
每次启动 JMP 时,启动记录器都会创建一个包含系统详细信息的小文本文件。
这些文本文件可用于跟踪 JMP 在给定计算机上启动的次数。
如果系统管理员收集一组计算机中的所有这些文件,则管理员可以跟踪整个组织中的 JMP 启动情况。
Launch Logger 没有用户界面。 它使用 addinload.jsl 收集系统信息并将其写入文本文件。
文本文件存储在由JMP 路径变量USER_APPDATA。 该变量指向的位置取决于 JMP 产品和操作系统。
- Windows (JMP):C:/Users/<用户名>/AppData/Roaming/SAS/JMP/<版本号>/
- Windows (JMP Pro):C:/Users/<用户名>/AppData/Roaming/SAS/JMPPro/<版本号>/
- Macintosh:/Users/<用户名>/Library/Application Support/JMP/<版本号>/
该目录中的文件使用以下模式命名:
主机名_日期_时间。TXT
其中主机名是运行 JMP 的计算机的名称,日期和时间是启动日期和时间。
文本文件中收集的信息是:
位数=> 64 位或 32 位
构建信息=> 构建日期和时间,无论是发布版本还是调试版本,以及以逗号分隔的字符串中的产品名称
日期=> JMP 的启动日期和时间
主持人=> Mac 或 Windows
主机名=> 环境变量 COMPUTERNAME (Windows) 或 HOSTNAME (Mac) 的值
联合管理计划版本=> 正在推出的 JMP 版本
产品名称=> 正在运行的 JMP 产品的名称,Pro 或 Standard
用户名=> 环境变量 USERNAME (Windows) 或 USER (Macintosh) 的值
该文本文件使用一种语法编写,可以轻松地将这些值读回到 JMP 中的关联数组中以聚合日志。
Launch Logger中addinload.jsl的内容是:
info = Associative Array();
info["JMP Version"] = JMP Version();
info["Build Information"] = Build Information();
info["Date"] = Format( Today(), "m/d/y h:m:s" );
info["Host"] = If( Host is( Mac ),
"Mac",
"Windows"
);
info["Bitness"] = If( Host is( Bits32 ),
"32-bit",
"64-bit"
);
info["Username"] = If( Host is( Windows ),
Get Environment Variable( "USERNAME" ),
Get Environment Variable( "USER" )
);
info["Product Name"] = JMP Product Name();
info["Hostname"] = If( Host is( Windows ),
Get Environment Variable( "COMPUTERNAME" ),
Get Environment Variable( "HOSTNAME" )
);
dir = "$USER_APPDATA/JMPLaunchLogger/";
filename = dir || info["Hostname"] || "_" || Format( Today(), "ddMONYYYY" ) || "_" || Char( Hour( Today() ) ) || Char( Minute( Today() ) ) ||
Char( Second( Today() ) ) || ".txt";
If( !Directory Exists( dir ),
dir_create_success = Try( Create Directory( dir ), exception_msg )
);
Save Text File( filename, Char( info ) );
每次启动 JMP 时,启动记录器都会创建一个包含系统详细信息的小文本文件。
这些文本文件可用于跟踪 JMP 在给定计算机上启动的次数。
公用事业回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间好吧,如果加载项不存在,那么它不会记录任何内容也就不足为奇了。 
至于加载项如何消失,您可能需要与 IT 部门联系,看看他们是否正在清理安装加载项的配置文件目录,或者您可能有多个配置文件目录。
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间嗨杰夫,
日志窗口中没有任何内容 (Ctrl+Shift+L)。
目前整个公司只有不到一半的用户登录?
我注意到嵌入脚本的加载项奇怪地从我的电脑中消失了。
重新安装后,我的 JMP 启动现在再次被记录。
知道加载项如何消失吗?
- 菲利普
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间@jpol ,这很奇怪。
首先查看日志窗口,看看启动 JMP 后是否有任何消息。
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间嗨杰夫,
有没有人报告说,随着时间的推移,启动记录器记录的启动次数越来越少?
今天早上我检查了一下,发现当我自己启动 JMP 时没有记录(没有存储文本文件,如之前一样)。 我的活动似乎已经有几周左右没有被记录了。
我的假设是某些 MS 更新包导致了这种情况的发生,但我不能确定。 我还注意到有些用户从未登录。
关于我可以从哪里开始调查有什么建议吗?
此致,
菲利普
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间谢谢杰夫和唐,
这非常有效,作为本地管理员,我可以轻松查看每个用户使用的构建信息和 JMP 版本。
此致,
菲利普
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间@jpol ,
我必须承认你对我的理解有点短。 我认为我将日志信息存储为关联数组很聪明。 它确实作为一种自记录存储格式运行良好,并且允许人们将来向日志添加其他信息,并且大概仍然能够解析混合文件。
然而,您的询问让我意识到将一堆关联数组放入数据表中并不像我希望的那样简单。
谨致谢意@唐麦考马克,这里有一些代码将从日志文件文件夹中创建数据表。
tableFromAAList = Function({inList},{Default Local},
tblRef = New Table("Data from List of AAs");
For(i=1,i<=N Items(inList),i++,
nextKeys = inList[i] << Get Keys;
tblRef << Add Row(1);
For(j=1,j<=N Items(nextKeys),j++,
nextVal = inList[i] << Get Value(nextKeys[j]);
Try(
Column(tblRef,nextKeys[j])[i] = nextVal;
,//ON ERROR
tblRef << New Column(nextKeys[j],Character);
Column(tblRef,nextKeys[j])[i] = nextVal;
);
)
);
tblRef << Delete Columns("Column 1");
);
logfiles = Files In Directory( "./Logs" );
logs = {};
For( i = 1, i <= N Items( logfiles ), i++,
Insert Into( logs, Parse( Load Text File( "./Logs/" || logfiles[i] ) ) )
);
tableFromAAList(logs);
JMP 14 可能会让这变得更容易。
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间嗨杰夫,
我想使用启动记录器插件来监控整个公司启动 JMP 的次数。
我已经成功创建了日志文件。
不幸的是,我不熟悉关联数组,因此发现提取和连接文件相当困难。
您能提供一些提示吗?
谢谢,
菲利普
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间@ashley_prince ,否,这将计算安装该版本的 JMP 的任何版本的启动。
回复:启动记录器 - 跟踪每次在计算机上启动 JMP 的时间嗨杰夫,
这太棒了——谢谢你的分享! 您能否确认这仅计算年度许可证安装的启动次数?
谢谢!