.. _ntls: Troubleshoot Licensing and ``findface-ntls`` ==================================================== When troubleshooting licensing and ``findface-ntls`` (see :ref:`licensing-principles`), 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 :ref:`licensing ` information and ``findface-ntls`` status, execute on the ``findface-ntls`` host console: .. code:: 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 to ``ntls``. .. rubric:: Response example .. code:: { "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. .. code:: curl http://localhost:3185/v1/usage-report.json -s | jq .. rubric:: Response example .. code:: { "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 } ] } }