License Reporter Tool
Overview
For environments with strict security requirements or "air-gapped" configurations where a direct outbound connection to the licensing service is restricted, Capacity Private Cloud provides a specialized synchronization utility.
This tool facilitates the manual exchange of utilization data between the local cluster and the Capacity licensing endpoint (https://licensing.lumenvox.com). It acts as a secure intermediary, allowing administrators to inspect all JSON payloads for security auditing before they are transmitted or ingested.
Connectivity & Access
If your security policy prevents the cluster from communicating over port 443, please contact Capacity Support to obtain the latest version of this utility.
Command Line Parameters
Run the tool without any parameters to see usage information. The following parameters are needed to run correctly:
- reportingApiUri
- deploymentId
- operatorId
- authString
- responseJson
- operation
Operation is an important parameter, and can be one of the following 3 values:
operation: report
Requires the following additional parameters:
- deploymentId
- operatorId
This can be called as follows:
license-reporter-tool -operation "report" -deploymentId "XXXXXX-086f-42f0-a728-d95f39dc2229" -operatorId "XXXXXXX-bddb-4979-8284-531641b16eda" -enableTls=true -reportingApiUri=reporting-api.XXXXXXXX.com:443
and give the following output:
License Usage Report: {"ETRAN_ENUS":{"usage_count":1,"usage_ms":2800}, "ETRAN_ENUS_50":{"usage_count":1,"usage_ms":2800},"INTERACTION_USAGE":{"usage_count":4, "usage_ms":610644},"SESSION_USAGE":{"usage_count":4,"usage_ms":615524}, "TRAN_ENUS":{"usage_count":3,"usage_ms":187618},"VAD":{"usage_count":2,"usage_ms":66900}}
Note: use valid deploymentId and operatorId values when making these calls.
operation: cluster-pull
Requires the following additional parameters:
- deploymentId
- operatorId
- authString - this should be the one assigned to the customer by LumenVox
This can be called as follows:
license-reporter-tool -operation "cluster-pull" -deploymentId "XXXXXXX-086f-42f0-a728-d95f39dc2229" -operatorId "XXXXXXX-bddb-4979-8284-531641b16eda" -authString "XXXXXXXX"-enableTls=true -reportingApiUri=reporting-api.XXXXXXXX.com:443
Note: use correct deploymentId and authString when calling this.
and returns:
## performing LicenseStatusReportPull to get license report to send to cloud from cluster... Use the following curl command (or similar) to report to LumenVox cloud...
curl https://licensing.lumenvox.com -H "x-auth-string: XXXXXXXXX" \ -H "Content-Type: application/json" \ -d "{\"cluster_guid\":\"XXXXXXXXXX-904e-4ef4-af51-390c5e1b7a15\", \"instance_uuid\":\"91347bef-96fa-4b2d-8e30-4c2aa77f437b\", \"status_id\":\"XXXXXXX-fc38-43a5-a10c-0e7dfd45da47\", \"instance_created\":\"2023-08-29T17:44:27.334937-07:00\",\"installation_type\":\"Undefined\", \"report_timestamp\":\"1693954219\",\"images\":null, \"deployments\":[{\"license_guid\":\"XXXXXXXX-086f-42f0-a728-d95f39dc2229\", \"bio_engine_usage\":null,\"speech_usage\":{\"session_ms\":615524,\"session_audio_ms\":192877, \"license_usage\":{\"ETRAN_ENUS\":{\"usage_count\":1,\"usage_ms\":2800}, \"ETRAN_ENUS_50\":{\"usage_count\":1,\"usage_ms\":2800},\"INTERACTION_USAGE\":{ \"usage_count\":4,\"usage_ms\":610644},\"SESSION_USAGE\":{\"usage_count\":4, \"usage_ms\":615524},\"TRAN_ENUS\":{\"usage_count\":3,\"usage_ms\":187618}, \"VAD\":{\"usage_count\":2,\"usage_ms\":66900}}}}]}"
You can run the curl command line directly as shown on the console to send the report to LumenVox licensing in AWS and see the response, which should look something like this:
{"error":false,"response-message":"Success", "valid-license-guids":["XXXXXXXX-086f-42f0-a728-d95f39dc2229"], "report-signature":"XXXXXXXXXX5c40f307667eec8707f4e7ed152ea62c17d061a639cff79e2d92", "license-status-id":"XXXXXXXX-fc38-43a5-a10c-0e7dfd45da47"}
This can be used in the cluster-push operation described below.
operation: cluster-push
This operation is used to push the response from AWS into the running cluster, to update licensing. Note that the JSON response returned from the previous curl operation's curl request contains several quotes. These either need to be escaped (") or, a simpler solution is to place the JSON inside apostrophes ('...') instead, as shown below:
license-reporter-tool -operation "cluster-push" -deploymentId "XXXXXX-086f-42f0-a728-d95f39dc2229" -operatorId "XXXXXXX-bddb-4979-8284-531641b16eda" -responseJson '{"error":false,"response-message":"Success", "valid-license-guids":["XXXXXXXX-086f-42f0-a728-d95f39dc2229"], "report-signature":"XXXXXXX93d0a33ea93596bf02c6e423d373a1dab7a781bb10d3f0919aa", "license-status-id":"XXXXXX-96c6-4524-8c36-55e5f16e330b"}' -enableTls=true -reportingApiUri=reporting-api.XXXXXXXX.com:443If this response is correctly validated by the license service in the running cluster, licensing will be enabled/refreshed, and you should see a response like this:
## performing LicenseStatusReportResponsePush to send response from cloud into ## cluster's license service... License Status Push Successful
Note: regular synchronization with the cloud licensing service (in AWS) is recommended to ensure correct licensing operation. Ideally this should be performed once daily to prevent unwanted outages.
Reminder Messages
After a set number of days without synchronization, the system will begin logging various messages, with increasing urgency, for the licenses to be synchronized. Failure to perform a regular license synchronization will eventually lead to the licenses becoming unusable, and the system to stop accepting and processing requests.
```shell
{
"level": "WARN",
"time": "2024-03-15T16:35:12.845-0700",
"message": "license synchronization required - please sync now",
"service": "license",
"days since last sync": 35 }
``` There is also a Prometheus metric, from the license service, that shows the number of days since last successful synchronization:
```shell # HELP license_days_since_sync Number of days since last valid license synchronization # TYPE license_days_since_sync gauge license_days_since_sync 35 ```
