Skip to main content

Query statistics

This example shows to work with the query stats feature.

Architecture​

The example consists of a single canister called query_stats. It exports the following candid interface:

service : {
"get_query_stats" : () -> (text);
"load" : () -> (nat64) query;
};

The load function just returns a timestamp. It just exists such that there is a query endpoint to call. The get_query_stats is the function that queries the status endpoint and returns the collected query statistics.

Prerequisites​

This example requires an installation of:

  • Install the IC SDK.
  • Clone the example dapp project: git clone https://github.com/dfinity/examples

Step 1: Setup project environment​

Navigate into the folder containing the project's files and start a local instance of the replica with the command:

cd examples/rust/query_stats
dfx start --clean

Step 2: Compile and deploy query_stats canister​

dfx deploy

Step 3: Call the canister's load function a few times to generate query traffic​

dfx canister call query_stats load

Step 4: Observe the following result​

dfx canister call query_stats get_query_stats

Step 5: After a while, the values should become populated​

"Number of calls: 19 - Number of instructions 414_083 - Request payload bytes: 114 - Response payload bytes: 270"

Alternatively, you can use the candid interface to make those calls.

Troubleshooting​

On the local dfx replica, the aggregation epoch is set to 60 seconds. So calling the load function a couple of times should result in values showing up a couple minutes later.

On mainnet, the aggregation epoch is 10 minutes, thus it will up to half an hour before the values appear on mainnet.

Possible next steps​

Query statistics are simple counters that increase. Their raw values are not that useful, you may want to implement some sort of metering system.

One way to go from here is to get the query stats in a regular interval using a timer and compare to the last values, calculating rates.

Resources​

Security considerations and security best practices​

If you base your application on this example, we recommend you familiarize yourself with and adhere to the security best practices for developing on the Internet Computer. This example may not implement all the best practices.