Troubleshoot Licensing and findface-ntls
When troubleshooting licensing and findface-ntls
(see Licensing), the first step is to retrieve the licensing information and findface-ntls
status. You can do so by sending an API request to findface-ntls
. Necessary actions are then to be undertaken, subject to the response content.
Tip
Please do not hesitate to contact our experts on troubleshooting by support@ntechlab.com.
Note
The online licensing is done via the NtechLab Global License Manager license.ntechlab.com
. A stable internet connection and DNS are required.
Get Licenses Information
To retrieve the FindFace licensing information and findface-ntls
status, execute on the findface-ntls
host console:
curl http://localhost:3185/v1/licenses.json -s | jq
The response will be given in JSON. One of the most significant parameters is .licenses[].last_updated
. It indicates in seconds how long ago the local license has been checked for the last time.
Interpret the .licenses[].last_updated
value as follows:
[0, 5] — everything is alright.
(5, 30] — there may be some problems with connection, or with the local drive where the license file is stored.
(30; 120] — almost certainly something bad happened. You should check the
ntls
logs for additional information.(120; ∞) — the licensing source response has been timed out. Take action.
.licenses[].valid.valid == false
: connection with the licensing source was never established.
Another important field is .products
. It describes the available features and resources:
.products[].features
: available features.
.products[].resources
: available resource limits and usage of these resources.
.products[].extra
: miscellaneous license information.
The response also contains the following parameters:
.time
: the current server time, in Unix timestamp format.
.licenses[].expire_date
: license expiration date. Treat this field with respect to.time
.
.licenses[].type
: license type.
.licenses[].license_id
: license ID.
.licenses[].generated
: license generation time.
.licenses[].source
: the path to the license file.
.licenses[].products
: which features and resources each license provides. Basically structure is similar the structure of.products
, but resource usage isn’t reported here.
.licenses[].valid.description
: if.licenses[].valid.valid == false
, then this field contains the reason why the license is not valid.
.services
: an array of FindFace Multi services connected tontls
.
Response example
{
"name": "NTLS",
"time": 1709825691,
"licenses": [
{
"expire_date": 1737208526,
"generated": 1705586179,
"last_updated": 2,
"license_id": "018f4c50e6044f0aa618436ad9450ac0",
"products": {
"multi": {
"extra": {},
"features": {
"sec-external-vms": {
"value": true
},
"sec-genetec": {
"value": true
}
},
"resources": {}
},
"server": {
"extra": {},
"features": {
"body_bags": {
"value": true
},
"body_emben": {
"value": true
},
...
},
"resources": {
"cameras": {
"value": 60
},
"extapi": {
"value": 256
},
"objects_tntapi": {
"value": 200000000
}
}
}
},
"source": "/ntech/license/Test_license_018f4c50e6044f0aa618436ad9450ac0.lic",
"type": "offline",
"valid": {
"description": "",
"valid": true
}
},
{
"expire_date": 0,
"generated": 1581946976,
"last_updated": 1,
"license_id": "017c40d9401742ce9eff8b48d93ded9a",
"products": {},
"source": "/ntech/license/ntech_license_017c40d9401742ce9eff8b48d93ded9a.lic",
"type": "online",
"valid": {
"description": "License is not valid",
"valid": false
}
}
],
"products": {
"multi": {
"features": {
"sec-external-vms": {
"value": true
},
"sec-genetec": {
"value": true
}
},
"resources": {},
"extra": {}
},
"server": {
"features": {
"body_bags": {
"value": true
},
"body_emben": {
"value": true
},
...
},
"resources": {
"cameras": {
"current": 11,
"value": 60
},
"extapi": {
"current": 1,
"value": 256
},
"objects_tntapi": {
"current": 12321,
"value": 200000000
}
},
"extra": {}
}
},
"services": [
{ "name": "video-worker-gpu", "ip": "10.255.233.12:48844" },
{ "name": "findface-extraction-api", "ip": "10.255.233.11:44182" },
{ "name": "FindFace-tarantool", "ip": "10.255.233.13:46444" }
]
}
Get a report
To get a report of the license interval counters, execute on the findface-ntls
host console the command below. It updates once an hour.
curl http://localhost:3185/v1/usage-report.json -s | jq
Response example
{
"b2c4658412f44184a6e34a2a369ce58c": {
"active_limits": {
"counters": {
"server": {
"face_beard": {
"available": 10000,
"used": 3589
}
}
},
"since": "2024-07-17T17:00:00+00:00",
"till": null
},
"by_interval": [
{
"counters": {
"server": {
"body_bags": {
"used": 0
}
}
},
"since": "2024-06-30T17:00:00+00:00",
"till": "2024-07-08T17:00:00+00:00"
},
{
"counters": {
"server": {
"face_age": {
"used": 77
}
}
},
"since": "2024-07-08T17:00:00+00:00",
"till": "2024-07-17T17:00:00+00:00"
},
{
"counters": {
"server": {
"face_beard": {
"used": 3589
}
}
},
"since": "2024-07-17T17:00:00+00:00",
"till": null
}
]
},
"6b5392f68fa84861bb39ce86fa5e42f9": {
"active_limits": {
"counters": {
"server": {
"body_bags": {
"available": 10000,
"used": 1591
},
"face_age": {
"available": 1500,
"used": 28780
},
"face_beard": {
"available": 5,
"used": 30852
},
"face_emotions": {
"available": 100,
"used": 25082
},
"face_gender": {
"available": 10000,
"used": 1135
},
"face_hair": {
"available": 50,
"used": 0
},
"face_liveness": {
"available": 10000,
"used": 184
}
}
},
"since": "2024-09-18T17:00:00+00:00",
"till": "2025-07-16T17:00:00+00:00"
},
"by_interval": [
{
"counters": {
"server": {
"body_action_base": {
"used": 0
},
"car_categories": {
"used": 0
},
"face_beard": {
"used": 0
}
}
},
"since": "2024-04-24T17:00:00+00:00",
"till": "2024-04-25T17:00:00+00:00"
},
{
"counters": {
"server": {
"body_action_base": {
"used": 0
},
"body_bags": {
"used": 0
},
"car_categories": {
"used": 0
},
"face_age": {
"used": 0
}
}
},
"since": "2024-04-25T17:00:00+00:00",
"till": "2024-04-26T17:00:00+00:00"
},
{
"counters": {
"server": {
"car_description": {
"used": 477785
},
"face_emotions": {
"used": 1843574
},
"face_liveness": {
"used": 0
},
"garbage_types": {
"used": 0
}
}
},
"since": "2024-04-26T17:00:00+00:00",
"till": "2024-09-18T17:00:00+00:00"
},
{
"counters": {
"server": {
"body_bags": {
"used": 1591
},
"face_age": {
"used": 28780
},
"face_beard": {
"used": 30852
},
"face_emotions": {
"used": 25082
},
"face_gender": {
"used": 1135
},
"face_hair": {
"used": 0
},
"face_liveness": {
"used": 184
}
}
},
"since": "2024-09-18T17:00:00+00:00",
"till": "2025-07-16T17:00:00+00:00"
},
{
"counters": {
"server": {
"all_attrs": {
"used": 0
},
"body_action_car": {
"used": 0
},
"body_bags": {
"used": 0
},
"body_other_attrs": {
"used": 0
},
"car_description": {
"used": 0
},
"car_license_plate": {
"used": 0
},
"car_license_plate_visibility": {
"used": 0
},
"car_orientation": {
"used": 0
},
"car_other_attrs": {
"used": 0
},
"car_weight_types": {
"used": 0
},
"face_age": {
"used": 0
},
"face_beard": {
"used": 0
},
"face_emotions": {
"used": 0
},
"face_eyes_attrs": {
"used": 0
},
"face_eyes_openness": {
"used": 0
},
"face_gender": {
"used": 0
},
"face_glasses": {
"used": 0
},
"face_hair": {
"used": 0
},
"face_headpose": {
"used": 0
},
"face_highlight": {
"used": 0
},
"face_liveness": {
"used": 0
},
"face_mouth_attrs": {
"used": 0
},
"garbage_types": {
"used": 0
}
}
},
"since": "2025-07-16T17:00:00+00:00",
"till": null
}
]
}
}