This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 41bc528  Refine concepts and designs (#6677)
41bc528 is described below

commit 41bc528ae596b2b7e30000bf0c287701c63e6110
Author: Wing <[email protected]>
AuthorDate: Sat Apr 3 15:48:16 2021 +0800

    Refine concepts and designs (#6677)
---
 docs/en/concepts-and-designs/oal.md | 90 ++++++++++++++++++-------------------
 1 file changed, 44 insertions(+), 46 deletions(-)

diff --git a/docs/en/concepts-and-designs/oal.md 
b/docs/en/concepts-and-designs/oal.md
index 4844d07..168dc0a 100644
--- a/docs/en/concepts-and-designs/oal.md
+++ b/docs/en/concepts-and-designs/oal.md
@@ -1,18 +1,18 @@
 # Observability Analysis Language
-Provide OAL(Observability Analysis Language) to analysis incoming data in 
streaming mode. 
+OAL(Observability Analysis Language) serves to analyze incoming data in 
streaming mode. 
 
-OAL focuses on metrics in Service, Service Instance and Endpoint. Because of 
that, the language is easy to 
+OAL focuses on metrics in Service, Service Instance and Endpoint. Therefore, 
the language is easy to 
 learn and use.
 
 
-Since 6.3, the OAL engine is embedded in OAP server runtime, as `oal-rt`(OAL 
Runtime).
-OAL scripts now locate in `/config` folder, user could simply change and 
reboot the server to make it effective.
-But still, OAL script is compile language, OAL Runtime generates java codes 
dynamically.
+Since 6.3, the OAL engine is embedded in OAP server runtime as `oal-rt`(OAL 
Runtime).
+OAL scripts are now found in the `/config` folder, and users could simply 
change and reboot the server to run them.
+However, the OAL script is a compiled language, and the OAL Runtime generates 
java codes dynamically.
 
-You could open set `SW_OAL_ENGINE_DEBUG=Y` at system env, to see which classes 
generated.
+You can open set `SW_OAL_ENGINE_DEBUG=Y` at system env to see which classes 
are generated.
 
 ## Grammar
-Scripts should be named as `*.oal`
+Scripts should be named `*.oal`
 ```
 // Declare the metrics.
 METRICS_NAME = from(SCOPE.(* | [FIELD][,FIELD ...]))
@@ -24,84 +24,82 @@ disable(METRICS_NAME);
 ```
 
 ## Scope
-Primary **SCOPE**s are `All`, `Service`, `ServiceInstance`, `Endpoint`, 
`ServiceRelation`, `ServiceInstanceRelation`, `EndpointRelation`.
-Also there are some secondary scopes, which belongs to one primary scope. 
+Primary **SCOPE**s are `All`, `Service`, `ServiceInstance`, `Endpoint`, 
`ServiceRelation`, `ServiceInstanceRelation`, and `EndpointRelation`.
+There are also some secondary scopes which belong to a primary scope. 
 
-Read [Scope Definitions](scope-definitions.md), you can find all existing 
Scopes and Fields.
+See [Scope Definitions](scope-definitions.md), where you can find all existing 
Scopes and Fields.
 
 
 ## Filter
-Use filter to build the conditions for the value of fields, by using field 
name and expression. 
+Use filter to build conditions for the value of fields by using field name and 
expression. 
 
-The expressions support to link by `and`, `or` and `(...)`. 
-The OPs support `==`, `!=`, `>`, `<`, `>=`, `<=`, `in [...]` ,`like %...`, 
`like ...%` , `like %...%` , `contain` and `not contain`, with type detection 
based of field type. Trigger compile
- or code generation error if incompatible. 
+The expressions support linking by `and`, `or` and `(...)`. 
+The OPs support `==`, `!=`, `>`, `<`, `>=`, `<=`, `in [...]` ,`like %...`, 
`like ...%` , `like %...%` , `contain` and `not contain`, with type detection 
based on field type. In the event of incompatibility, compile or code 
generation errors may be triggered. 
 
 ## Aggregation Function
-The default functions are provided by SkyWalking OAP core, and could implement 
more. 
+The default functions are provided by the SkyWalking OAP core, and it is 
possible to implement additional functions. 
 
-Provided functions
+Functions provided
 - `longAvg`. The avg of all input per scope entity. The input field must be a 
long.
 > instance_jvm_memory_max = from(ServiceInstanceJVMMemory.max).longAvg();
 
-In this case, input are request of each ServiceInstanceJVMMemory scope, avg is 
based on field `max`.
+In this case, the input represents the request of each 
ServiceInstanceJVMMemory scope, and avg is based on field `max`.
 - `doubleAvg`. The avg of all input per scope entity. The input field must be 
a double.
 > instance_jvm_cpu = from(ServiceInstanceJVMCPU.usePercent).doubleAvg();
 
-In this case, input are request of each ServiceInstanceJVMCPU scope, avg is 
based on field `usePercent`.
-- `percent`. The number or ratio expressed as a fraction of 100, for the 
condition matched input.
+In this case, the input represents the request of each ServiceInstanceJVMCPU 
scope, and avg is based on field `usePercent`.
+- `percent`. The number or ratio is expressed as a fraction of 100, where the 
input matches with the condition.
 > endpoint_percent = from(Endpoint.*).percent(status == true);
 
-In this case, all input are requests of each endpoint, condition is 
`endpoint.status == true`.
-- `rate`. The rate expressed as a fraction of 100, for the condition matched 
input.
+In this case, all input represents requests of each endpoint, and the 
condition is `endpoint.status == true`.
+- `rate`. The rate expressed is as a fraction of 100, where the input matches 
with the condition.
 > browser_app_error_rate = from(BrowserAppTraffic.*).rate(trafficCategory == 
 > BrowserAppTrafficCategory.FIRST_ERROR, trafficCategory == 
 > BrowserAppTrafficCategory.NORMAL);
 
-In this case, all input are requests of each browser app traffic, `numerator` 
condition is `trafficCategory == BrowserAppTrafficCategory.FIRST_ERROR` and 
`denominator` condition is `trafficCategory == 
BrowserAppTrafficCategory.NORMAL`.
-The parameter (1) is the `numerator` condition.
-The parameter (2) is the `denominator` condition.
-- `sum`. The sum calls per scope entity.
+In this case, all input represents requests of each browser app traffic, the 
`numerator` condition is `trafficCategory == 
BrowserAppTrafficCategory.FIRST_ERROR` and `denominator` condition is 
`trafficCategory == BrowserAppTrafficCategory.NORMAL`.
+Parameter (1) is the `numerator` condition.
+Parameter (2) is the `denominator` condition.
+- `sum`. The sum of calls per scope entity.
 > service_calls_sum = from(Service.*).sum();
 
-In this case, calls of each service. 
+In this case, the number of calls of each service. 
 
-- `histogram`. Read [Heatmap in WIKI](https://en.wikipedia.org/wiki/Heat_map)
+- `histogram`. See [Heatmap in WIKI](https://en.wikipedia.org/wiki/Heat_map).
 > all_heatmap = from(All.latency).histogram(100, 20);
 
-In this case, thermodynamic heatmap of all incoming requests. 
-The parameter (1) is the precision of latency calculation, such as in above 
case, 113ms and 193ms are considered same in the 101-200ms group.
-The parameter (2) is the group amount. In above case, 21(param value + 1) 
groups are 0-100ms, 101-200ms, ... 1901-2000ms, 2000+ms 
+In this case, the thermodynamic heatmap of all incoming requests. 
+Parameter (1) is the precision of latency calculation, such as in the above 
case, where 113ms and 193ms are considered the same in the 101-200ms group.
+Parameter (2) is the group amount. In the above case, 21(param value + 1) 
groups are 0-100ms, 101-200ms, ... 1901-2000ms, 2000+ms 
 
-- `apdex`. Read [Apdex in WIKI](https://en.wikipedia.org/wiki/Apdex)
+- `apdex`. See [Apdex in WIKI](https://en.wikipedia.org/wiki/Apdex).
 > service_apdex = from(Service.latency).apdex(name, status);
 
-In this case, apdex score of each service.
-The parameter (1) is the service name, which effects the Apdex threshold value 
loaded from service-apdex-threshold.yml in the config folder.
-The parameter (2) is the status of this request. The status(success/failure) 
effects the Apdex calculation.
+In this case, the apdex score of each service.
+Parameter (1) is the service name, which reflects the Apdex threshold value 
loaded from service-apdex-threshold.yml in the config folder.
+Parameter (2) is the status of this request. The status(success/failure) 
reflects the Apdex calculation.
 
-- `p99`, `p95`, `p90`, `p75`, `p50`. Read [percentile in 
WIKI](https://en.wikipedia.org/wiki/Percentile)
+- `p99`, `p95`, `p90`, `p75`, `p50`. See [percentile in 
WIKI](https://en.wikipedia.org/wiki/Percentile).
 > all_percentile = from(All.latency).percentile(10);
 
-**percentile** is the first multiple value metrics, introduced since 7.0.0. As 
having multiple values, it could be query through `getMultipleLinearIntValues` 
GraphQL query.
-In this case, `p99`, `p95`, `p90`, `p75`, `p50` of all incoming request. The 
parameter is the precision of p99 latency calculation, such as in above case, 
120ms and 124 are considered same.
-Before 7.0.0, use `p99`, `p95`, `p90`, `p75`, `p50` func(s) to calculate 
metrics separately. Still supported in 7.x, but don't be recommended, and don't 
be included in official OAL script. 
+**percentile** is the first multiple-value metric, which has been introduced 
since 7.0.0. As a metric with multiple values, it could be queried through the 
`getMultipleLinearIntValues` GraphQL query.
+In this case, see `p99`, `p95`, `p90`, `p75`, and `p50` of all incoming 
requests. The parameter is precise to a latency at p99, such as in the above 
case, and 120ms and 124ms are considered to produce the same response time.
+Before 7.0.0, `p99`, `p95`, `p90`, `p75`, `p50` func(s) are used to calculate 
metrics separately. They are still supported in 7.x, but they are no longer 
recommended and are not included in the current official OAL script. 
 > all_p99 = from(All.latency).p99(10);
 
-In this case, p99 value of all incoming requests. The parameter is the 
precision of p99 latency calculation, such as in above case, 120ms and 124 are 
considered same.
+In this case, the p99 value of all incoming requests. The parameter is precise 
to a latency at p99, such as in the above case, and 120ms and 124ms are 
considered to produce the same response time.
 
 ## Metrics name
-The metrics name for storage implementor, alarm and query modules. The type 
inference supported by core.
+The metrics name for storage implementor, alarm and query modules. The type 
inference is supported by core.
 
 ## Group
 All metrics data will be grouped by Scope.ID and min-level TimeBucket. 
 
-- In `Endpoint` scope, the Scope.ID = Endpoint id (the unique id based on 
service and its Endpoint)
+- In the `Endpoint` scope, the Scope.ID is same as the Endpoint ID (i.e. the 
unique ID based on service and its endpoint).
 
 ## Disable
-`Disable` is an advanced statement in OAL, which is only used in certain case.
-Some of the aggregation and metrics are defined through core hard codes,
-this `disable` statement is designed for make them de-active,
-such as `segment`, `top_n_database_statement`.
-In default, no one is being disable.
+`Disable` is an advanced statement in OAL, which is only used in certain cases.
+Some of the aggregation and metrics are defined through core hard codes. 
Examples include `segment` and `top_n_database_statement`.
+This `disable` statement is designed to render them inactive.
+By default, none of them are disabled.
 
 ## Examples
 ```

Reply via email to