# @ohos.net.statistics (Traffic Management) (System API)
The **statistics** module provides APIs to query real-time or historical traffic statistics by the specified network interface card (NIC) or user ID (UID).
> **NOTE**
> The initial APIs of this module are supported since API version 10. Newly added APIs will be marked with a superscript to indicate their earliest API version.
> This topic describes only system APIs provided by the module. For details about its public APIs, see [@ohos.net.statistics (Traffic Management)](js-apis-net-statistics.md).
## Modules to Import
```js
import { statistics } from '@kit.NetworkKit';
```
## statistics.on('netStatsChange')10+
on(type: 'netStatsChange', callback: Callback\): void
Subscribes to traffic change events.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
**Parameters**
| Name | Type | Mandatory| Description |
| -------- | ------------------------------------------- | ---- | ----------------------------------------------------------------- |
| type | string | Yes | Event type. This field has a fixed value of **netStatsChange**. |
| callback | Callback\<[NetStatsChangeInfo](#netstatschangeinfo11)\> | Yes | Callback invoked when the traffic changes.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
**Example**
```js
import { statistics } from '@kit.NetworkKit';
class IFace {
iface: string = ""
uid?: number = 0
}
statistics.on('netStatsChange', (data: IFace) => {
console.log('on netStatsChange' + JSON.stringify(data));
});
```
## statistics.off('netStatsChange')10+
off(type: 'netStatsChange', callback?: Callback\): void;
Unsubscribes from traffic change events.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
**Parameters**
| Name | Type | Mandatory| Description |
| -------- | ------------------------------------------- | ---- | ----------------------------------------------------------------- |
| type | string | Yes | Event type. This field has a fixed value of **netStatsChange**. |
| callback | Callback\<[NetStatsChangeInfo](#netstatschangeinfo11)\> | No | Callback invoked when the traffic changes.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
**Example**
```js
import { statistics } from '@kit.NetworkKit';
class IFace {
iface: string = ""
uid?: number = 0
}
let callback: (data: IFace) => void = (data: IFace) => {
console.log("on netStatsChange, iFace:" + data.iface + " uid: " + data.uid);
}
statistics.on('netStatsChange', callback);
// You can pass the callback of the on method to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks.
statistics.off('netStatsChange', callback);
statistics.off('netStatsChange');
```
## statistics.getTrafficStatsByIface10+
getTrafficStatsByIface(ifaceInfo: IfaceInfo, callback: AsyncCallback\): void;
Obtains the historical traffic statistics of the specified NIC. This API uses an asynchronous callback to return the result.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
**Parameters**
| Name | Type | Mandatory| Description |
| --------- | ----------------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
| ifaceInfo | [IfaceInfo](#ifaceinfo10) | Yes | NIC information. For details, see [IfaceInfo](#ifaceinfo10). |
| callback | AsyncCallback\<[NetStatsInfo](#netstatsinfo10)> | Yes | Callback used to return the result. If the operation is successful, **error** is **undefined** and **statsInfo** is the historical traffic statistics of the NIC. Otherwise, **error** is an error object.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100001 | Invalid parameter value. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
| 2103017 | Failed to read the database. |
**Example**
```js
import { BusinessError } from '@kit.BasicServicesKit';
import { statistics } from '@kit.NetworkKit';
let iFaceInfo: statistics.IfaceInfo | null = null;
if (iFaceInfo) {
statistics.getTrafficStatsByIface(iFaceInfo as statistics.IfaceInfo, (error: BusinessError, statsInfo: statistics.NetStatsInfo) => {
console.log(JSON.stringify(error));
console.log(
"getTrafficStatsByIface bytes of received = " +
JSON.stringify(statsInfo.rxBytes)
);
console.log(
"getTrafficStatsByIface bytes of sent = " +
JSON.stringify(statsInfo.txBytes)
);
console.log(
"getTrafficStatsByIface packets of received = " +
JSON.stringify(statsInfo.rxPackets)
);
console.log(
"getTrafficStatsByIface packets of sent = " +
JSON.stringify(statsInfo.txPackets)
);
});
}
```
## statistics.getTrafficStatsByIface10+
getTrafficStatsByIface(ifaceInfo: IfaceInfo): Promise\;
Obtains the historical traffic statistics of the specified NIC. This API uses a promise to return the result.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
| --------- | ------------------------- | ---- | --------------------------------------------------- |
| ifaceInfo | [IfaceInfo](#ifaceinfo10) | Yes | NIC information. For details, see [IfaceInfo](#ifaceinfo10).|
**Return value**
| Type| Description|
| -------- | -------- |
| Promise\<[NetStatsInfo](#netstatsinfo10)> | Promise used to return the result, which is the historical traffic statistics of the specified NIC.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100001 | Invalid parameter value. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
| 2103017 | Failed to read the database. |
**Example**
```js
import { statistics } from '@kit.NetworkKit';
let iFaceInfo: statistics.IfaceInfo | null = null;
if (iFaceInfo) {
statistics.getTrafficStatsByIface(iFaceInfo as statistics.IfaceInfo).then((statsInfo: statistics.NetStatsInfo) => {
console.log(
"getTrafficStatsByIface bytes of received = " +
JSON.stringify(statsInfo.rxBytes)
);
console.log(
"getTrafficStatsByIface bytes of sent = " +
JSON.stringify(statsInfo.txBytes)
);
console.log(
"getTrafficStatsByIface packets of received = " +
JSON.stringify(statsInfo.rxPackets)
);
console.log(
"getTrafficStatsByIface packets of sent = " +
JSON.stringify(statsInfo.txPackets)
);
});
}
```
## statistics.getTrafficStatsByUid10+
getTrafficStatsByUid(uidInfo: UidInfo, callback: AsyncCallback\): void;
Obtains the historical traffic statistics of the specified application. This API uses an asynchronous callback to return the result.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
**Parameters**
| Name | Type | Mandatory| Description |
| -------- | ----------------------------------------------- | ---- | -------------------------------------------------------------------------------------- |
| uidInfo | [UidInfo](#uidinfo10) | Yes | Application information. For details, see [UidInfo](#uidinfo10). |
| callback | AsyncCallback\<[NetStatsInfo](#netstatsinfo10)> | Yes | Callback used to return the result. If the operation is successful, **error** is **undefined** and **statsInfo** is the historical traffic statistics of the application. Otherwise, **error** is an error object.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100001 | Invalid parameter value. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
| 2103017 | Failed to read the database. |
**Example**
```js
import { BusinessError } from '@kit.BasicServicesKit';
import { statistics } from '@kit.NetworkKit';
let uidInfo: statistics.UidInfo = {
uid: 20010037,
ifaceInfo: {
iface: '',
startTime: 1,
endTime: 3,
}
}
statistics.getTrafficStatsByUid(
uidInfo,
(error: BusinessError, statsInfo: statistics.NetStatsInfo) => {
console.log(JSON.stringify(error));
console.log(
"getTrafficStatsByUid bytes of received = " +
JSON.stringify(statsInfo.rxBytes)
);
console.log(
"getTrafficStatsByUid bytes of sent = " +
JSON.stringify(statsInfo.txBytes)
);
console.log(
"getTrafficStatsByUid packets of received = " +
JSON.stringify(statsInfo.rxPackets)
);
console.log(
"getTrafficStatsByUid packets of sent = " +
JSON.stringify(statsInfo.txPackets)
);
}
);
```
## statistics.getTrafficStatsByUid10+
getTrafficStatsByUid(uidInfo: UidInfo): Promise\;
Obtains the historical traffic statistics of the specified application. This API uses a promise to return the result.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
**Parameters**
| Name | Type | Mandatory| Description |
| ------- | --------------------- | ---- | ----------------------------------------------- |
| uidInfo | [UidInfo](#uidinfo10) | Yes | Application information. For details, see [UidInfo](#uidinfo10).|
**Return value**
| Type | Description |
| ----------------------------------------- | -------------------------------------------------- |
| Promise\<[NetStatsInfo](#netstatsinfo10)> | Promise used to return the result, which is the historical traffic statistics of the specified NIC.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100001 | Invalid parameter value. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
| 2103017 | Failed to read the database. |
**Example**
```js
import statistics from '@ohos.net.statistics'
let uidInfo: statistics.UidInfo = {
uid: 20010037,
ifaceInfo: {
iface: '',
startTime: 1,
endTime: 3,
}
}
statistics.getTrafficStatsByUid(uidInfo).then((statsInfo: statistics.NetStatsInfo) => {
console.log("getTrafficStatsByUid bytes of received = " + JSON.stringify(statsInfo.rxBytes));
console.log("getTrafficStatsByUid bytes of sent = " + JSON.stringify(statsInfo.txBytes));
console.log("getTrafficStatsByUid packets of received = " + JSON.stringify(statsInfo.rxPackets));
console.log("getTrafficStatsByUid packets of sent = " + JSON.stringify(statsInfo.txPackets));
})
```
## statistics.getTrafficStatsByNetwork12+
getTrafficStatsByNetwork(networkInfo: NetworkInfo): Promise\
Obtains the traffic statistics of all applications on the specified network within the specified period. This API uses a promise to return the result.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
**Parameters**
| Name | Type | Mandatory| Description |
|-------------|-------------------------------|----|--------------------------------------------|
| networkInfo | [NetworkInfo](#networkinfo12) | Yes | Network information. For details, see [NetworkInfo](#networkinfo12).|
**Return value**
| Type | Description |
|-------------------------------------------------|----------------------------------|
| Promise\<[UidNetStatsInfo](#uidnetstatsinfo12)> | Promise used to return the result, which is the historical traffic statistics of all applications.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100001 | Invalid parameter value. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
| 2103017 | Failed to read the database. |
**Example**
```js
import { connection, statistics } from '@kit.NetworkKit';
let networkInfo: statistics.NetworkInfo = {
type: connection.NetBearType.BEARER_CELLULAR,
startTime: Math.floor(Date.now() / 1000) - 86400 * 7,
endTime: Math.floor(Date.now() / 1000) + 5,
simId: 1,
}
statistics.getTrafficStatsByNetwork(networkInfo).then((statsInfo: statistics.UidNetStatsInfo) => {
let rank: Map = new Map(Object.entries(statsInfo));
rank.forEach((value: object, key: string) => {
console.info("getTrafficStatsByNetwork key=" + key + ", value=" + JSON.stringify(value));
})
})
```
## statistics.getTrafficStatsByUidNetwork12+
getTrafficStatsByUidNetwork(uid: number, networkInfo: NetworkInfo): Promise\
Obtains the traffic statistics of the specified application on the specified network within the specified period. This API uses a promise to return the result.
**System API**: This is a system API.
**Required permissions**: ohos.permission.GET_NETWORK_STATS
**System capability**: SystemCapability.Communication.NetManager.Core
**Parameters**
| Name | Type | Mandatory| Description |
|-------------|-------------------------------|----|--------------------------------------------|
| uid | number | Yes | Application UID. |
| networkInfo | [NetworkInfo](#networkinfo12) | Yes | Network information. For details, see [NetworkInfo](#networkinfo12).|
**Return value**
| Type | Description |
|-----------------------------------------------------------|----------------------------------|
| Promise\<[NetStatsInfoSequence](#netstatsinfosequence12)> | Promise used to return the result, which is the historical traffic statistics of the specified application.|
**Error codes**
For details about the error codes, see [Traffic Management Error Codes](errorcode-net-statistics.md).
| ID| Error Message |
| --------- | -------------------------------------------- |
| 201 | Permission denied. |
| 202 | Non-system applications use system APIs. |
| 401 | Parameter error. |
| 2100001 | Invalid parameter value. |
| 2100002 | Failed to connect to the service. |
| 2100003 | System internal error. |
| 2103017 | Failed to read the database. |
**Example**
```js
import { connection, statistics } from '@kit.NetworkKit';
let uid: number = 20020147;
let networkInfo: statistics.NetworkInfo = {
type: connection.NetBearType.BEARER_CELLULAR,
startTime: Math.floor(Date.now() / 1000) - 86400 * 7,
endTime: Math.floor(Date.now() / 1000) + 5,
simId: 1,
}
statistics.getTrafficStatsByUidNetwork(uid, networkInfo).then((statsInfoSequence: statistics.NetStatsInfoSequence) => {
for (let i = 0; i < statsInfoSequence.length; i--) {
console.info("getTrafficStatsByUidNetwork item:" + JSON.stringify(statsInfoSequence[i]));
}
})
```
## IfaceInfo10+
Defines the parameters for querying historical traffic of an NIC.
**System API**: This is a system API.
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
| --------- | ------ | ---- | --------------------------------- |
| iface | string | Yes | NIC name. |
| startTime | number | Yes | Start time of the query, which is a timestamp in seconds.|
| endTime | number | Yes | End time of the query, which is a timestamp in seconds.|
## UidInfo10+
Defines the parameters for querying historical traffic of an application.
**System API**: This is a system API.
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
| --------- | ------------------------------------- | ---- | -------------------------- |
| ifaceInfo | IfaceInfo\<[IfaceInfo](#ifaceinfo10)> | Yes | NIC information, including the NIC name and query time range.|
| uid | number | Yes | Application UID. |
## NetStatsInfo10+
Defines the historical traffic information.
**System API**: This is a system API.
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
| --------- | ------ | ---- | ------------------------ |
| rxBytes | number | Yes | Downlink traffic, in bytes.|
| txBytes | number | Yes | Uplink traffic, in bytes.|
| rxPackets | number | Yes | Number of downlink packets. |
| txPackets | number | Yes | Number of uplink packets. |
## NetStatsChangeInfo11+
Defines the NIC status and usage of an application.
**System API**: This is a system API.
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
| --------- | ------ | ---- | --------- |
| iface | string | Yes | NIC name.|
| uid | number | No | Application UID. |
## NetworkInfo12+
Defines the network information.
**System API**: This is a system API.
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
|-----------|------------------------------------------------------|----|--------------|
| type | [NetBearType](js-apis-net-connection.md#netbeartype) | Yes | Network type. |
| startTime | number | Yes | Start timestamp, in seconds.|
| endTime | number | Yes | End timestamp, in seconds.|
| simId | number | No | SIM card ID. |
## UidNetStatsInfo12+
Defines the historical traffic statistics of all applications.
**System API**: This is a system API.
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
|-----------|-----------------------------------------------|----|--------------|
| undefined | [uid:number]: [NetStatsInfo](#netstatsinfo10) | Yes | Historical traffic statistics of all applications.|
## NetStatsInfoSequence12+
Defines the historical traffic statistics of the specified application.
**System API**: This is a system API.
**System capability**: SystemCapability.Communication.NetManager.Core
| Name | Type | Mandatory| Description |
|-----------|---------------------------------|----|--------------|
| startTime | number | Yes | Start timestamp, in seconds.|
| endTime | number | Yes | End timestamp, in seconds.|
| info | [NetStatsInfo](#netstatsinfo10) | Yes | Historical traffic statistics of the specified application.|