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 to ntls.

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
      }
    ]
  }
}