Network Diagnosis
That is, perform network diagnosis on client devices to obtain the network status of the device, which can be achieved by setting up tasks such as ICMPPing, TCPPing, MTR, etc., through the following classes and interfaces.
Network Diagnosis Classes
| Class Name | Description |
|---|---|
| NBSTaskCondition | Network diagnosis task condition class |
| NBSTCPPingDiagnosisTask | TCPPing network diagnosis task class |
| NBSICMPPingDiagnosisTask | ICMPPing network diagnosis class |
| NBSMTRDiagnosisTask | MTR network diagnosis class |
| NBSDownloadDiagnosisTask | Download network diagnosis class |
NBSTaskCondition
Network diagnosis task condition class, used to create network diagnosis task conditions; can set properties such as scene, execution domain, error codes, etc.
-
Interface
/**
* @param scene Task execution scene
* Supports the following two scenes:
* NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished: Executed after the request (response code is 200)
* NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetError: Executed after a request error
* @return NBSTaskCondition.Builder
*/
NBSTaskCondition.Builder(NBSDiagnosisTaskScene scene)
/**
* @param domain Matched domain name;Supports configuring host and uri (cannot contain ? or parameters),supports * wildcard, e.g. *baidu.com, https://www.baidu*, *baidu.com*
* @return NBSTaskCondition.Builder
*/
NBSTaskCondition.Builder.patternDomains(List<String> domain)
/**
* @param errorCode Matched error code
* Supports configuration of HTTP status codes 4xx, 5xx,
* and some network error codes defined by SDK, such as 901 (UnknownHostException),
* 902 (ConnectException), 903 (SocketTimeoutException), 908 (SSLException), etc.
* Can only be set in the NBSDiagnosisTaskSceneAfterNetError (network error) scene
* @return NBSTaskCondition.Builder
*/
NBSTaskCondition.Builder.patternErrorCodes(List<String> errorCode)
/**
* @return NBSTaskCondition
*/
NBSTaskCondition.Builder.build() -
Example
// Executed after request success (HTTP 200)
NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build();
// Executed after network error
NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetError).build();
// Executed after request with URL containing baidu.com succeeds (HTTP 200)
NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).patternDomains(new ArrayList<String>() {{
add("*baidu.com*");
}})
.build();
// Executed on error for requests with URL containing baidu.com
NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetError)
.patternDomains(new ArrayList<String>() {{
add("*baidu.com*");
}})
.build();
// Executed for requests with URL containing baidu.com on 404 or timeout error
NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetError)
.patternDomains(new ArrayList<String>() {{
add("*baidu.com*");
}})
.patternErrorCodes(new ArrayList<String>() {{
add("404");
add("903");
}})
.build()
NBSTCPPingDiagnosisTask
TCPPing network diagnosis task class, used to create TCPPing network diagnosis tasks.
-
Interface
/**
* @param taskName Task name, maximum 64 characters; longer content will be truncated to the first 64 characters
* @param host Target host/domain for execution
* @param port Port number
* @param codition Execution condition, only required and configured for polling tasks
* @return NBSTCPPingDiagnosisTask.Builder
*/
NBSTCPPingDiagnosisTask.Builder(String taskName, String host, int port)
NBSTCPPingDiagnosisTask.Builder(String taskName, String host, int port, NBSTaskCondition codition)
/**
* @param repeat pingCount Number of ping attempts; Default value: 3; Supported range: 3 - 100
* @return NBSTCPPingDiagnosisTask.Builder
*/
NBSTCPPingDiagnosisTask.Builder.setRepeat(int repeat)
/**
* @param execFrequency executeInterval Execution frequency, the interval between repeated task runs; Default value: 60 seconds
* @return NBSTCPPingDiagnosisTask.Builder
*/
NBSTCPPingDiagnosisTask.Builder.setExecFrequency(int execFrequency)
/**
* @return NBSTCPPingDiagnosisTask
*/
NBSTCPPingDiagnosisTask.Builder.build() -
Example
Complete task example "Task creation to adding to task queue" see "Immediate Execution" or "Loop Execution".
// Create tcpPing task: name=tcpPing_task, host=www.baidu.com, port=443
NBSTCPPingDiagnosisTask tcpPing = new NBSTCPPingDiagnosisTask.Builder("tcpPing_task", "www.baidu.com", 443).build();
// Create conditional tcpPing task: name=tcpPing_task, host=www.baidu.com, port=443
NBSTCPPingDiagnosisTask tcpPing = new NBSTCPPingDiagnosisTask.Builder("tcpPing_task", "www.baidu.com", 443, new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build()).build();
// Create conditional tcpPing task: name=tcpPing_task, host=www.baidu.com, port=443, pingCount=5, executeInterval=30s
NBSTCPPingDiagnosisTask tcpPing = new NBSTCPPingDiagnosisTask.Builder("tcpPing_task", "www.baidu.com", 443, new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build())
.setRepeat(5)
.execFrequency(30)
.build();
NBSICMPPingDiagnosisTask
ICMPPing network diagnosis class, used to create ICMPPing network diagnosis tasks.
-
Interface
/**
* @param taskName Task name, maximum 64 characters; longer content will be truncated to the first 64 characters
* @param host Target host/domain for execution
* @param codition Execution condition, only required and configured for polling tasks
* @return NBSICMPPingDiagnosisTask.Builder
*/
NBSICMPPingDiagnosisTask.Builder(String taskName, String host)
NBSICMPPingDiagnosisTask.Builder(String taskName, String host, NBSTaskCondition codition)
/**
* @param repeat pingCount Number of ping attempts; Default value: 3; Supported range: 3 - 100
* @return NBSICMPPingDiagnosisTask.Builder
*/
NBSICMPPingDiagnosisTask.Builder.setRepeat(int repeat)
/**
* @param execFrequency executeInterval Execution frequency, the interval between repeated task runs; Default value: 60 seconds
* @return NBSICMPPingDiagnosisTask.Builder
*/
NBSICMPPingDiagnosisTask.Builder.setExecFrequency(int execFrequency)
/**
* @return NBSICMPPingDiagnosisTask
*/
NBSICMPPingDiagnosisTask.Builder.build() -
Example
Complete task example "Task creation to adding to task queue" see "Immediate Execution" or "Loop Execution".
// Create icmpPing task: name=icmpPing_task, host=www.baidu.com
NBSICMPPingDiagnosisTask icmpPing = new NBSICMPPingDiagnosisTask.Builder("icmpPing_task", "www.baidu.com").build();
// Create conditional icmpPing task: name=icmpPing_task, host=www.baidu.com
NBSICMPPingDiagnosisTask icmpPing = new NBSICMPPingDiagnosisTask.Builder("icmpPing_task", "www.baidu.com", new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build()).build();
// Create conditional icmpPing task: name=icmpPing_task, host=www.baidu.com, repeat=5, executeInterval=30s
NBSICMPPingDiagnosisTask icmpPing = new NBSICMPPingDiagnosisTask.Builder("icmpPing_task", "www.baidu.com", new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build())
.setRepeat(5)
.execFrequency(30)
.build();
NBSMTRDiagnosisTask
MTR network diagnosis class, used to create MTR network diagnosis tasks.
-
Interface
/**
* @param taskName Task name, maximum 64 characters; longer content will be truncated to the first 64 characters
* @param host Target host/domain for execution
* @param codition Execution condition, only required and configured for polling tasks
* @return NBSMTRDiagnosisTask.Builder
*/
NBSMTRDiagnosisTask.Builder(String taskName, String host)
NBSMTRDiagnosisTask.Builder(String taskName, String host, NBSTaskCondition codition)
/**
* @param execFrequency executeInterval Execution frequency, the interval between repeated task runs; Default value: 60 seconds
* @return NBSMTRDiagnosisTask.Builder
*/
NBSMTRDiagnosisTask.Builder.setExecFrequency(int execFrequency)
/**
* @return NBSMTRDiagnosisTask
*/
NBSMTRDiagnosisTask.Builder.build() -
Example
Complete task example "Task creation to adding to task queue" see "Immediate Execution" or "Loop Execution".
// Create MTR task: name=mtr_task, host=www.baidu.com
NBSMTRDiagnosisTask mtr = new NBSMTRDiagnosisTask.Builder("mtr_task", "www.baidu.com").build();
// Create conditional MTR task: name=mtr_task, host=www.baidu.com
NBSMTRDiagnosisTask mtr = new NBSMTRDiagnosisTask.Builder("mtr_task", "www.baidu.com", new NBSTaskCondition.Builder(NBSICMPPingDiagnosisTask.NBSDiagnosisTaskSceneAfterNetFinished).build()).build();
// Create conditional MTR task: name=mtr_task, host=www.baidu.com, executeInterval=300s
NBSMTRDiagnosisTask mrt = new NBSMTRDiagnosisTask.Builder("mtr_task", "www.baidu.com", new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build())
.execFrequency(300)
.build();
NBSDownloadDiagnosisTask
Download network diagnosis class, used to create Download network diagnosis tasks "Download network diagnosis tasks only support immediate execution, i.e., can only be added by calling startDiagnosisTask".
-
Interface
/**
* @param taskName Task name, maximum 64 characters; longer content will be truncated to the first 64 characters
* @param url Matching URL for triggering execution
* @return NBSDownloadDiagnosisTask.Builder
*/
NBSDownloadDiagnosisTask.Builder(String taskName, String url)
/**
* @return NBSDownloadDiagnosisTask
*/
NBSDownloadDiagnosisTask.Builder.build() -
Example
Complete task example "Task creation to adding to task queue" see "Immediate Execution".
// Create download task: name=download_task, url=https://www.baidu.com
NBSDownloadDiagnosisTask download = new NBSDownloadDiagnosisTask.Builder("download_task", "https://www.baidu.com").build();
Task Types
| Task Type | Description |
|---|---|
| Immediate Execution | Task executes immediately, disappears after execution |
| Loop Execution | Task executes in loop, disappears after meeting trigger conditions, task does not disappear |
Immediate Execution
After adding NBSDiagnosisTask, it will be added to the immediate execution queue, and the task disappears after execution.
-
Interface
/**
* @param task Diagnostic task instance
* Supported types: NBSTCPPingDiagnosisTask, NBSICMPPingDiagnosisTask, NBSMTRDiagnosisTask, NBSDownloadDiagnosisTask
*/
startDiagnosisTask(NBSDiagnosisTask task) -
Example
This example: when the startTask method is triggered, it will immediately execute TCPPing, ICMPPing, MTR, Download network diagnosis tasks.
// Create tcpPing task: name=tcpPing_task, host=www.baidu.com, port=443
NBSTCPPingDiagnosisTask tcpPing = new NBSTCPPingDiagnosisTask.Builder("tcpPing_task", "www.baidu.com", 443).build();
// Create ICMPPing task: name=icmpPing_task, host=www.baidu.com
NBSICMPPingDiagnosisTask icmpPing = new NBSICMPPingDiagnosisTask.Builder("icmpPing_task", "www.baidu.com").build();
// Create MTR task: name=mtr_task, host=www.baidu.com
NBSMTRDiagnosisTask mtr = new NBSMTRDiagnosisTask.Builder("mtr_task", "www.baidu.com").build();
// Create download task: name=download_task, url=https://www.baidu.com
NBSDownloadDiagnosisTask download = new NBSDownloadDiagnosisTask.Builder"download_task", "https://www.baidu.com").build();
// Execute task
NBSAppAgent.startDiagnosisTask(tcpPing);
NBSAppAgent.startDiagnosisTask(icmpPing);
NBSAppAgent.startDiagnosisTask(mtr);
NBSAppAgent.startDiagnosisTask(download);
Loop Execution
After adding NBSDiagnosisTask, it will be added to the loop execution queue, and whenever the trigger conditions are met, the corresponding network diagnosis tasks will be executed "Execution frequency is limited by the execFrequency property in the network diagnosis task".
-
Interface
/**
* @param task Diagnostic task instance
* Supported types: NBSTCPPingDiagnosisTask, NBSICMPPingDiagnosisTask, NBSMTRDiagnosisTask
* Loop tasks require NBSTaskCondition
*/
addDiagnosisTask(NBSDiagnosisTask task)-
Example
-
Loop task after request error
This example: when the request URL "URL that can match the execution condition domain" has 404, 502, connection failure, request timeout errors, TCPPing, ICMPPing, MTR network diagnosis tasks will be executed.
NBSTaskCondition condition = new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetError)
.patternDomains(new ArrayList<String>() {{// Execution condition domains, uri (only supports uri before ?), etc. "Can configure wildcards *, such as '*qq.com, qq.com*, *qq.com*'; but does not support setting * only"
add("*.qq.com");
}})
.patternErrorCodes(new ArrayList<String>() {{// Add error code condition to execution condition: set to trigger network diagnosis tasks when 404, 502, connection failure, request timeout errors occur "If patternErrorCodes is not set, all request errors meet the trigger conditions"
add("404");
add("502");
add("902");
add("903");
}})
.build();
// Create tcpPing task: name=tcpPing_task, host=www.baidu.com, port=443
NBSTCPPingDiagnosisTask tcpPing = new NBSTCPPingDiagnosisTask.Builder("tcpPing_task", "www.baidu.com", 443, condition).build();
// Create icmpPing task: name=icmpPing_task, host=www.baidu.com
NBSICMPPingDiagnosisTask icmpPing = new NBSICMPPingDiagnosisTask.Builder("icmpPing_task", "www.baidu.com", condition).build();
// Create mtr task: name=mtr_task, host=www.baidu.com
NBSMTRDiagnosisTask mtr = new NBSMTRDiagnosisTask.Builder("mtr_task", "www.baidu.com", condition).build();
//Add the created tcpPing, icmpPing, mtr tasks to the loop execution task queue "Note: loop execution tasks do not support adding Download tasks, if Download tasks are added, they will not execute"
NBSAppAgent.addDiagnosisTask(tcpPing);
NBSAppAgent.addDiagnosisTask(icmpPing);
NBSAppAgent.addDiagnosisTask(mtr);-
Loop task after request finished
This example: when the request URL "URL that can match the execution condition domain" finishes normally, TCPPing, ICMPPing, MTR network diagnosis tasks will be executed.
NBSTaskCondition condition = new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build();
// Create tcpPing task: name=tcpPing_task, host=www.baidu.com, port=443
NBSTCPPingDiagnosisTask tcpPing = new NBSTCPPingDiagnosisTask.Builder("tcpPing_task", "www.baidu.com", 443, condition).build();
// Create icmpPing task: name=icmpPing_task, host=www.baidu.com
NBSICMPPingDiagnosisTask icmpPing = new NBSICMPPingDiagnosisTask.Builder("icmpPing_task", "www.baidu.com", condition).build();
// Create mtr task: name=mtr_task, host=www.baidu.com
NBSMTRDiagnosisTask mtr = new NBSMTRDiagnosisTask.Builder("mtr_task", "www.baidu.com", condition).build();
//Add the created tcpPing, icmpPing, mtr tasks to the loop execution task queue "Note: loop execution tasks do not support adding Download tasks, if Download tasks are added, they will not execute"
NBSAppAgent.addDiagnosisTask(tcpPing);
NBSAppAgent.addDiagnosisTask(icmpPing);
NBSAppAgent.addDiagnosisTask(mtr); -
-
Network Diagnosis Data Callback
Network diagnosis data callback will transmit the results of executed network diagnosis tasks through the delegate, you can use this result for corresponding development.
-
Example
NBSDiagnosisTaskDelegate delegate = new NBSDiagnosisTaskDelegate() {
@Override
public void diagnosisTask(NBSDiagnosisTaskResult nbsDiagnosisTaskResult) {
try {// It is recommended to perform null check on returned data or add try-catch exception handling
if (nbsDiagnosisTaskResult instanceof NBSTCPPingDiagnosisTaskResult) {
NBSTCPPingDiagnosisTaskResult tcpResult = (NBSTCPPingDiagnosisTaskResult) nbsDiagnosisTaskResult;
...
} else if (nbsDiagnosisTaskResult instanceof NBSICMPPingDiagnosisTaskResult) {
NBSICMPPingDiagnosisTaskResult icmpPingResult = (NBSICMPPingDiagnosisTaskResult) nbsDiagnosisTaskResult;
...
} else if (nbsDiagnosisTaskResult instanceof NBSMTRDiagnosisTaskResult) {
NBSMTRDiagnosisTaskResult mtrResult = (NBSMTRDiagnosisTaskResult) nbsDiagnosisTaskResult;
...
} else if (nbsDiagnosisTaskResult instanceof NBSDownloadDiagnosisTaskResult) {
NBSDownloadDiagnosisTaskResult downloadTaskResult = (NBSDownloadDiagnosisTaskResult) nbsDiagnosisTaskResult;
...
}
}catch (Exception e) {
}
}
}
NBSTCPPingDiagnosisTask tcpPing = new NBSTCPPingDiagnosisTask.Builder("tcpPing_task", "www.baidu.com", 443).build();
tcpPing.setDelegate(delegate);
NBSAppAgent.startDiagnosisTask(tcpPing);
NBSICMPPingDiagnosisTask icmpPing = new NBSICMPPingDiagnosisTask.Builder("icmpPing_task", "www.baidu.com", new NBSTaskCondition.Builder(NBSDiagnosisTaskScene.NBSDiagnosisTaskSceneAfterNetFinished).build()).build();
icmpPing.setDelegate(delegate);
NBSAppAgent.addDiagnosisTask(icmpPing);