许可证服务器

许可证服务器日志

默认情况下,Squish 许可证服务器将通过平台特定的目的地发送其日志消息。

Linux上的许可证服务器日志

当在Linux上作为systemd服务安装Squish 许可证服务器时,它将通过标准syslog接口写入日志消息,并将它们作为systemd日志的一部分存储。作为管理员,要查看今天的日志消息,请执行journalctl --since today -u squish-license-server.service

示例日志输出

$ journalctl -u squish-license-server.service --since today
-- Logs begin at Tue 2021-08-31 19:17:32 CEST, end at Fri 2022-01-21 12:32:57 CET. --
Jan 21 09:43:18 host systemd[1]: Starting Squish Floating License Server...
Jan 21 09:43:18 host systemd[1]: Started Squish Floating License Server.
Jan 21 09:43:18 host licenseserver[1477]: Searching for license files (*.cfg) in '/etc/squish-license-server/licenses'
Jan 21 09:43:18 host licenseserver[1477]: Starting Squish License Server 7.0.0 on machine id f7ff1122a223344f5544ff00
Jan 21 09:43:18 host licenseserver[1477]: Loading server settings from '/etc/squish-license-server/licenses/my_license.settings.ini'
Jan 21 09:43:18 host licenseserver[1477]: Serving REST API on [0.0.0.0]:47001
Jan 21 09:43:18 host licenseserver[1477]: [my_license] Serving 10 tester and 10 execution licenses on [0.0.0.0]:49345, host:49345

Jan 21 09:43:18 host licenseserver[1477]: Announcing server via SSDP as licenseserver://host:49345
Jan 21 12:12:47 host systemd[1]: squish-license-server.service: Succeeded.

有关过滤、限制或跟踪创建时日志消息的其他方法,请参阅systemd的journalctl手册

macOS上的许可证服务器日志

当在macOS上将Squish 许可证服务器安装为服务时,它将通过标准syslog接口写入日志消息,并将它们作为Apple统一日志系统的一部分存储。要查看今天的日志消息,请以管理员身份执行log show --process licenseserver --style compact --info --last 1d

示例日志输出

$ log show --process licenseserver --style compact --info --last 1d
Filtering the log data using "process BEGINSWITH[cd] "licenseserver""
Skipping debug messages, pass --debug to include.
Timestamp               Ty Process[PID:TID]
2022-01-25 09:35:51.057 I  licenseserver[736:2989] Searching for license files (*.cfg) in '/etc/squish-license-server/licenses'
2022-01-25 09:35:51.058 I  licenseserver[736:2989] [com.apple.CarbonCore:coreservicesdaemon] SCSession SCSession( id=100, this=0x0x7fd9b1508070 option=65538) created, forUID=0 mach_port_t=0x2503.
2022-01-25 09:35:51.058 I  licenseserver[736:2989] [com.apple.CarbonCore:coreservicesdaemon] SCSession SCSession( id=101, this=0x0x7fd9b1508180 option=65538) created, forUID=0 mach_port_t=0x2603.
2022-01-25 09:35:51.058 I  licenseserver[736:2989] [com.apple.CarbonCore:coreservicesdaemon] connectToCoreServicesD Instantiating server (coreservicesd based) SCSession, port=0x2503 serverOptions=0x10002.
2022-01-25 09:35:51.059 I  licenseserver[736:2989] Starting Squish License Server 7.0.0 on machine id f7ff1122a223344f5544ff00
2022-01-25 09:35:51.060 I  licenseserver[736:2989] Saving default server settings to '/etc/squish-license-server/licenses/my_license.settings.ini'
2022-01-25 09:35:51.062 I  licenseserver[736:2989] No listen address/port configured, disabling REST API
2022-01-25 09:35:51.064 I  licenseserver[736:2989] [my_license] Serving 10 tester and 10 execution licenses on [0.0.0.0]:49345, host:49345
2022-01-25 09:35:51.064 I  licenseserver[736:2989] Announcing server via SSDP as licenseserver://host:49345

Windows上的许可证服务器日志

作为Windows服务运行时,Squish 许可证服务器将日志消息写入到C:\ProgramData\Squish License Server\log\squish-license-server.log。日志文件大小将限制为2 MB,并能自动轮换(即重命名),以保留最多5个之前的日志文件。

当前日志文件的文件名始终是squish-license-server.log

第一次轮换发生时

  • squish-license-server.log被重命名为squish-license-server.log.0
  • 创建一个新文件squish-license-server.log并被许可证服务器使用。

4次轮换后的文件名

  • squish-license-server.log
  • squish-license-server.log.0
  • squish-license-server.log.1
  • squish-license-server.log.2
  • squish-license-server.log.3

在这种情况下,squish-license-server.log.3是最旧的日志文件。

下一次轮换发生时

  • squish-license-server.log.3被删除。
  • squish-license-server.log.2被重命名为squish-license-server.log.3
  • squish-license-server.log.1被重命名为squish-license-server.log.2
  • squish-license-server.log.0被重命名为squish-license-server.log.1
  • squish-license-server.log被重命名为squish-license-server.log.0
  • 创建一个新文件squish-license-server.log并被许可证服务器使用。

示例日志文件内容

2022-01-31T13:33:25 Searching for license files (*.cfg) in 'C:\ProgramData\Squish License Server\licenses'
2022-01-31T13:33:25 Starting Squish License Server 7.0.0 Alpha on machine id f7ff1122a223344f5544ff00
2022-01-31T13:33:25 Saving default server settings to 'C:\ProgramData\Squish License Server\licenses\my_license.settings.ini'
2022-01-31T13:33:25 No listen address/port configured, disabling REST API
2022-01-31T13:33:25 [my_license] Serving 10 tester and 10 execution licenses on [0.0.0.0]:49345, host:49345
2022-01-31T13:33:25 Announcing server via SSDP as licenseserver://host:49345

配置

Squish 许可证服务器期望一个或多个以.cfg结尾的许可证文件。默认情况下,它在以下目录中搜索许可证文件

  • Linux和macOS: /etc/squish-license-server/licenses/
  • Windows: C:\ProgramData\Squish License Server\licenses\

此外,将从与许可证文件同名的文件中读取许可证的设置,该文件位于上述目录中,但以.settings.ini结尾而不是.cfg。如果该文件不存在,则服务器将以默认值创建它,用作编辑模板。可以通过编辑设置文件(然后重启服务器)来修改以下设置组

[License]
LeaseTime=0
AllowExecutionsToUseTesterLicenses=true

LeaseTime 表示连接客户端(如 squishide)可以使用许可证的最大时间(以秒为单位)。默认值 0(或空值)表示客户端持有许可证的时间没有限制。将此设置为目标超过 太长时间 的许可证会自动断开客户端连接。这也限定了自动化 Squish 测试执行的允许最大时间,因为许可证的丢失将导致脚本执行中断。

AllowExecutionsToUseTesterLicenses 控制在-execution 许可证限制到达时,执行能否获取测试许可证。如果设置为 false,即使有可用的测试许可证,Squish 许可证服务器 也不会让执行使用测试许可证。

[REST]
AnonymousReadAccess=true
ListenAddress=
ListenPort=
ReadAccessTokens=

AnonymousReadAccess 控制是否允许对 REST API 的无认证 HTTP GET 请求。如果设置为 false,您还需要在 REST/ReadAccessTokens 中添加一个或多个令牌,才能使用REST API。

ListenAddress 是接受 REST API 请求的 IP 地址。如果为空,REST API 将在所有网络接口上可用。

ListenPort 是接受 REST API 请求的 TCP 端口号。如果为空(或无效值),REST API将被禁用。要启用 REST API,在此设置一个未使用的 TCP 端口号(1 - 65535)。

ReadAccessTokens 是用于对 REST API 进行认证的 HTTP GET 请求的令牌列表,以逗号分隔。令牌没有明确定义格式,但不能包含空格,我们建议使用ASCII字符,以便客户端在HTTP请求中轻松提供它们。

[SSDP]
AnnouncementHostName=
AnnouncementPort=
Enabled=true

AnnouncementHostName 是用于整个网络 SSDP 通告的(DNS)主机名。如果客户端应连接到与系统本地主机名不同的主机名,请更改此值。

AnnouncementPort 是网络级 SSDP 通告中使用的 TCP 端口号。如果为空(或值无效),将使用许可证配置中的 TCP 端口号。当某些形式的重定向或隧道需要客户端连接到与服务器实际监听的端口号不同的端口号(1 - 65535)时,请更改此值。

Enabled 是启用/禁用 SSDP 通告的开关。默认值为 true。如果设置为 false,则 SSDP 通告将被禁用。

REST API

Squish 许可证服务器 通过基于 HTTP 的 REST API 支持查询有关自身、连接的客户端以及许可证使用统计信息。此功能默认情况下是禁用的,可以通过在设置文件中设置有效的 TCP 端口号来启用,请参阅 REST/ListenPort

客户端需要能够发出 HTTP 请求(目前限于 GET 请求),无论是成功还是错误,都会接收到 JSON 格式的回复。默认情况下,请求不需要任何形式的身份验证。管理员可以配置服务器要求基于 HTTP Bearer 令牌的身份验证,请参阅 REST/ReadAccessTokens

本文件在命令行示例中使用命令行工具 curljq 创建 HTTP 请求并格式化结果 JSON 输出。

目前有以下 API 端点可用

/v1/clients

返回连接的客户端数组。客户端对象可以包含以下属性

  • clientAddress:连接客户端的 IP 地址。
  • clientPort:连接的服务器端端口号。
  • grantTime:向此客户端授予许可证时的时间的 ISO 时间戳。如果客户端尚未收到许可证,则为空。
  • licenseType:由客户端请求的许可类型。可能的值包括 executiontester,或者为空字符串,表示客户端尚未请求许可证。
  • machineId:已连接客户端的内部标识符。
  • requestTime:客户端请求许可证的时间。如果客户端尚未请求许可证,则为空字符串。

Example curl request

curl -s "http://localhost:47001/v1/clients" | jq

Example JSON response

[
  {
    "clientAddress": "::ffff:127.0.0.1",
    "clientPort": 44198,
    "grantTime": "2022-01-05T11:34:37.732Z",
    "licenseType": "tester",
    "machineId": "{5544eebb-1234-4a00-abcd-7a7a7aff99d2}",
    "requestTime": "2022-01-05T11:34:37.732Z"
  }
]

/v1/serverinfo

返回一个对象,包含分配给客户端的许可证信息。以下属性可能存在:

  • customerNumber:拥有许可证的客户的内部编号。
  • editions:许可证支持的软件版本数组。
  • expirationDate:服务许可证将失效的 ISO 日期。在此日期之后连接的客户端将不再接收许可证!
  • issueDate:服务许可证分发给客户的 ISO 日期。
  • machineId:运行服务器的计算机的内部标识符。
  • port:服务器在之上接受许可证请求的 TCP 端口号。

Example curl request

curl -s "http://localhost:47001/v1/serverinfo" | jq

Example JSON response

{
  "customerNumber": 12345,
  "editions": [
    "Squish/Qt"
  ],
  "expirationDate": "2023-01-23",
  "issueDate": "2021-01-22",
  "machineId": "ca3ff112233001122abcdabcd",
  "port": 49345
}

/v1/statistics

返回一个对象,包含有关客户端和他们等待许可证时间的统计信息。目前,在服务器重启期间不保持统计信息,但未来版本可能会更改。

  • activeLicenses:计算每种许可证类型的可用许可证数量。包含一个 executiontester 子对象,以下属性如下:
    • current:HTTP 请求时的活跃使用许可证数量。
    • max:最大活动许可证数量(由许可证配置文件确定)。
    • peak:自上次重置统计信息以来最大活动许可证数量。
  • waitingQueue:计算等待未使用许可证的客户端数量。包含一个 executiontester 子对象,每个对象具有以下属性:
    • current:HTTP 请求时等待许可证的客户端数量。
    • peak:自上次重置统计信息以来等待许可证的客户端的最高数量。
  • waitingTimeInMs:客户端等待未使用许可证的持续时间。包含一个 executiontester 子对象,每个对象具有以下属性:
    • current:目前最长等待客户端的等待时间(以毫秒计)。
    • peak:自上次重置统计信息以来等待未使用许可证的最长时间。

这些统计信息可用作确定测试员和执行座位的数量是否足够所有用户的方式。特别是峰值值可以告知何时需要更多座位,以便不使用户或自动化测试等待空闲许可证。

Example curl request

curl -s http://localhost:47001/v1/statistics | jq

Example JSON response

{
  "activeLicenses": {
    "execution": {
      "current": 0,
      "max": 10,
      "peak": 0
    },
    "tester": {
      "current": 1,
      "max": 2,
      "peak": 1
    }
  },
  "waitingQueue": {
    "execution": {
      "current": 0,
      "peak": 0
    },
    "tester": {
      "current": 0,
      "peak": 1
    }
  },
  "waitingTimeInMs": {
    "execution": {
      "current": 0,
      "peak": 0
    },
    "tester": {
      "current": 0,
      "peak": 16637
    }
  }
}

©2024 The Qt Company Ltd. 本文档中的内容版权归其各自所有者。
提供的文档受 GNU 自由文档许可第 1.3 版 的条款约束,由自由软件基金会发布。
Qt 和相关徽标是芬兰及其他国家/地区的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。