diff --git a/docs/css/api-ref/ALL_META.TXT.json b/docs/css/api-ref/ALL_META.TXT.json new file mode 100644 index 000000000..6c4865a6f --- /dev/null +++ b/docs/css/api-ref/ALL_META.TXT.json @@ -0,0 +1,422 @@ +[ + { + "uri":"css_03_0001.html", + "product_code":"css", + "code":"1", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Before You Start", + "title":"Before You Start", + "githuburl":"" + }, + { + "uri":"css_03_0051.html", + "product_code":"css", + "code":"2", + "des":"Welcome to Cloud Search Service API Reference. Cloud Search Service (CSS) provides hosted, distributed search engine services. It is fully compatible with open-source Ela", + "doc_type":"api", + "kw":"Overview,Before You Start,API Reference", + "title":"Overview", + "githuburl":"" + }, + { + "uri":"css_03_0053.html", + "product_code":"css", + "code":"3", + "des":"An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.", + "doc_type":"api", + "kw":"Endpoints,Before You Start,API Reference", + "title":"Endpoints", + "githuburl":"" + }, + { + "uri":"css_03_0056.html", + "product_code":"css", + "code":"4", + "des":"In CSS, Elasticsearch 7.6.2 and 7.9.3 and Kibana 7.6.2 and 7.9.3 are supported.", + "doc_type":"api", + "kw":"Supported Cluster Versions,Before You Start,API Reference", + "title":"Supported Cluster Versions", + "githuburl":"" + }, + { + "uri":"css_03_0057.html", + "product_code":"css", + "code":"5", + "des":"The CSS API is a self-developed API that complies with RESTful API design specifications. You can call CSS APIs to implement the CSS functions described in Table 1.", + "doc_type":"api", + "kw":"API Overview,API Reference", + "title":"API Overview", + "githuburl":"" + }, + { + "uri":"iam_01_0023.html", + "product_code":"css", + "code":"6", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Calling APIs", + "title":"Calling APIs", + "githuburl":"" + }, + { + "uri":"iam_02_0008.html", + "product_code":"css", + "code":"7", + "des":"This section describes the structure of a RESTful API request, and uses the API for Obtaining a User Token as an example to describe how to call an API. A token is a user", + "doc_type":"api", + "kw":"Making an API Request,Calling APIs,API Reference", + "title":"Making an API Request", + "githuburl":"" + }, + { + "uri":"iam_02_0510.html", + "product_code":"css", + "code":"8", + "des":"CSS supports token authentication.The validity period of a token is 24 hours. When using a token for authentication, cache it to prevent frequently calling the IAM API.A ", + "doc_type":"api", + "kw":"Authentication,Calling APIs,API Reference", + "title":"Authentication", + "githuburl":"" + }, + { + "uri":"iam_02_0511.html", + "product_code":"css", + "code":"9", + "des":"After sending a request, you will receive a response containing the status code, response header, and response body.A status code is a group of digits, ranging from 1xx t", + "doc_type":"api", + "kw":"Returned Values,Calling APIs,API Reference", + "title":"Returned Values", + "githuburl":"" + }, + { + "uri":"css_03_0008.html", + "product_code":"css", + "code":"10", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Cluster Management APIs", + "title":"Cluster Management APIs", + "githuburl":"" + }, + { + "uri":"css_03_0019.html", + "product_code":"css", + "code":"11", + "des":"This API is used to create a cluster.Table 2 describes the request parameters.Table 11 describes the response parameters.Example requestExample response{\n \"cluster\": {\n ", + "doc_type":"api", + "kw":"Creating a Cluster,Cluster Management APIs,API Reference", + "title":"Creating a Cluster", + "githuburl":"" + }, + { + "uri":"css_03_0018.html", + "product_code":"css", + "code":"12", + "des":"This API is used to query and display the cluster list and cluster status.NoneTable 2 describes the response parameters.Example requestExample request of querying cluster", + "doc_type":"api", + "kw":"Querying the List of Clusters,Cluster Management APIs,API Reference", + "title":"Querying the List of Clusters", + "githuburl":"" + }, + { + "uri":"css_03_0026.html", + "product_code":"css", + "code":"13", + "des":"This API is used to query and display details about a cluster.NoneTable 2 describes the response parameters.Example requestExample responseTable 7 describes the status co", + "doc_type":"api", + "kw":"Querying Cluster Details,Cluster Management APIs,API Reference", + "title":"Querying Cluster Details", + "githuburl":"" + }, + { + "uri":"css_03_0020.html", + "product_code":"css", + "code":"14", + "des":"This API is used to delete a cluster. All resources, including customer data, of the deleted cluster will be released. For data security reasons, create a snapshot for th", + "doc_type":"api", + "kw":"Deleting a Cluster,Cluster Management APIs,API Reference", + "title":"Deleting a Cluster", + "githuburl":"" + }, + { + "uri":"css_03_0021.html", + "product_code":"css", + "code":"15", + "des":"This API is used to restart a cluster. Restarting the cluster will interrupt ongoing services.NoneExample requestExample responseTable 3 describes the status code.", + "doc_type":"api", + "kw":"Restarting a Cluster,Cluster Management APIs,API Reference", + "title":"Restarting a Cluster", + "githuburl":"" + }, + { + "uri":"css_03_0025.html", + "product_code":"css", + "code":"16", + "des":"This API is used to scale out a cluster with only common nodes. Clusters with master, client, or cold data nodes cannot use this API.Table 2 describes the request paramet", + "doc_type":"api", + "kw":"Scaling Out a Cluster with only Common Nodes,Cluster Management APIs,API Reference", + "title":"Scaling Out a Cluster with only Common Nodes", + "githuburl":"" + }, + { + "uri":"css_03_0038.html", + "product_code":"css", + "code":"17", + "des":"This API is used to scale out a cluster with special nodes. That is, if a cluster has master, client, or cold data nodes, this API is used for scale-out.Table 2 describes", + "doc_type":"api", + "kw":"Scaling Out a Cluster with Special Nodes,Cluster Management APIs,API Reference", + "title":"Scaling Out a Cluster with Special Nodes", + "githuburl":"" + }, + { + "uri":"css_03_0023.html", + "product_code":"css", + "code":"18", + "des":"This API is used to query and display the IDs of supported instance flavors.NoneTable 2 describes the response parameters.Example requestGET /v1.0/6204a5bd270343b5885144c", + "doc_type":"api", + "kw":"Obtaining the List of Instance Flavors,Cluster Management APIs,API Reference", + "title":"Obtaining the List of Instance Flavors", + "githuburl":"" + }, + { + "uri":"css_03_0050.html", + "product_code":"css", + "code":"19", + "des":"This API is used to download the HTTPS certificate file of the server.NoneExample requestExample responseAfter obtaining the preceding character string, run the following", + "doc_type":"api", + "kw":"Downloading a Certificate File,Cluster Management APIs,API Reference", + "title":"Downloading a Certificate File", + "githuburl":"" + }, + { + "uri":"css_03_0077.html", + "product_code":"css", + "code":"20", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Tag Management APIs", + "title":"Tag Management APIs", + "githuburl":"" + }, + { + "uri":"css_03_0078.html", + "product_code":"css", + "code":"21", + "des":"This API is used to query the tag information about a specified cluster.NoneTable 2 describes the response parameters.Example requestExample responseTable 4 describes the", + "doc_type":"api", + "kw":"Querying Tags of a Specified Cluster,Tag Management APIs,API Reference", + "title":"Querying Tags of a Specified Cluster", + "githuburl":"" + }, + { + "uri":"css_03_0079.html", + "product_code":"css", + "code":"22", + "des":"This API is used to query all tags in a specified region.NoneTable 2 describes the response parameters.Example requestExample responseTable 4 describes the status code.", + "doc_type":"api", + "kw":"Querying All Tags,Tag Management APIs,API Reference", + "title":"Querying All Tags", + "githuburl":"" + }, + { + "uri":"css_03_0083.html", + "product_code":"css", + "code":"23", + "des":"This API is used to add tags to a cluster. A cluster can have a maximum of 10 tags.NoneExample requestPOST /v1.0/458d905f22da49c39f609e3347d65723/css-cluster/4f3deec3-efa", + "doc_type":"api", + "kw":"Adding Tags to a Cluster,Tag Management APIs,API Reference", + "title":"Adding Tags to a Cluster", + "githuburl":"" + }, + { + "uri":"css_03_0081.html", + "product_code":"css", + "code":"24", + "des":"This API is used to add or delete tags to or from a specified cluster in batches. Tag Management Service (TMS) uses this API to batch manage tags of a cluster. A cluster ", + "doc_type":"api", + "kw":"Adding or Deleting Cluster Tags in Batches,Tag Management APIs,API Reference", + "title":"Adding or Deleting Cluster Tags in Batches", + "githuburl":"" + }, + { + "uri":"css_03_0082.html", + "product_code":"css", + "code":"25", + "des":"This API is used to delete specified cluster tags.NoneNoneExample requestDELETE /v1.0/458d905f22da49c39f609e3347d65723/css-cluster/4f3deec3-efa8-4598-bf91-560aad1377a3/ta", + "doc_type":"api", + "kw":"Deleting Specified Cluster Tags,Tag Management APIs,API Reference", + "title":"Deleting Specified Cluster Tags", + "githuburl":"" + }, + { + "uri":"css_03_0010.html", + "product_code":"css", + "code":"26", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Snapshot Management APIs", + "title":"Snapshot Management APIs", + "githuburl":"" + }, + { + "uri":"css_03_0037.html", + "product_code":"css", + "code":"27", + "des":"The API for automatically configuring a cluster snapshot can automatically create OBS buckets and agencies for storing snapthos. If you have multiple clusters, an OBS buc", + "doc_type":"api", + "kw":"(Not Recommended) Automatically Configuring Basic Settings of a Cluster Snapshot,Snapshot Management", + "title":"(Not Recommended) Automatically Configuring Basic Settings of a Cluster Snapshot", + "githuburl":"" + }, + { + "uri":"css_03_0030.html", + "product_code":"css", + "code":"28", + "des":"Using this API will automatically enable the snapshot function.This API is used to modify the basic configurations of a cluster snapshot. The basic configurations include", + "doc_type":"api", + "kw":"Modifying Basic Configurations of a Cluster Snapshot,Snapshot Management APIs,API Reference", + "title":"Modifying Basic Configurations of a Cluster Snapshot", + "githuburl":"" + }, + { + "uri":"css_03_0031.html", + "product_code":"css", + "code":"29", + "des":"This API is used to set parameters related to automatic snapshot creation. By default, a snapshot is created per day.Table 2 describes the request parameters.NoneExample ", + "doc_type":"api", + "kw":"Setting the Automatic Snapshot Creation Policy,Snapshot Management APIs,API Reference", + "title":"Setting the Automatic Snapshot Creation Policy", + "githuburl":"" + }, + { + "uri":"css_03_0032.html", + "product_code":"css", + "code":"30", + "des":"This API is used to query the automatic snapshot creation policy for a cluster.NoneTable 2 describes the response parameters.Example requestExample responseTable 3 descri", + "doc_type":"api", + "kw":"Querying the Automatic Snapshot Creation Policy for a Cluster,Snapshot Management APIs,API Reference", + "title":"Querying the Automatic Snapshot Creation Policy for a Cluster", + "githuburl":"" + }, + { + "uri":"css_03_0033.html", + "product_code":"css", + "code":"31", + "des":"This API is used to manually create a snapshot.Table 2 describes the request parameters.Table 3 describes the response parameters.Example requestExample responseTable 5 d", + "doc_type":"api", + "kw":"Manually Creating a Snapshot,Snapshot Management APIs,API Reference", + "title":"Manually Creating a Snapshot", + "githuburl":"" + }, + { + "uri":"css_03_0034.html", + "product_code":"css", + "code":"32", + "des":"This API is used to query all snapshots of a cluster.NoneExample requestExample responseTable 5 describes the status code.", + "doc_type":"api", + "kw":"Querying the List of Snapshots,Snapshot Management APIs,API Reference", + "title":"Querying the List of Snapshots", + "githuburl":"" + }, + { + "uri":"css_03_0035.html", + "product_code":"css", + "code":"33", + "des":"This API is used to manually restore a snapshot.Table 2 describes the request parameters.NoneExample requestExample responseThe return value is empty.Table 3 describes th", + "doc_type":"api", + "kw":"Restoring a Snapshot,Snapshot Management APIs,API Reference", + "title":"Restoring a Snapshot", + "githuburl":"" + }, + { + "uri":"css_03_0036.html", + "product_code":"css", + "code":"34", + "des":"This API is used to delete a snapshot.NoneNoneExample requestTable 2 describes the status code.", + "doc_type":"api", + "kw":"Deleting a Snapshot,Snapshot Management APIs,API Reference", + "title":"Deleting a Snapshot", + "githuburl":"" + }, + { + "uri":"css_03_0039.html", + "product_code":"css", + "code":"35", + "des":"This API is used to disable the snapshot function.NoneNoneExample requestTable 2 describes the status code.", + "doc_type":"api", + "kw":"Disabling the Snapshot Function,Snapshot Management APIs,API Reference", + "title":"Disabling the Snapshot Function", + "githuburl":"" + }, + { + "uri":"css_03_0040.html", + "product_code":"css", + "code":"36", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Common Parameters", + "title":"Common Parameters", + "githuburl":"" + }, + { + "uri":"css_03_0071.html", + "product_code":"css", + "code":"37", + "des":"A project ID or project name is required in some API requests. You need to obtain the project ID and name before calling an API.Log in to the console.In the upper right c", + "doc_type":"api", + "kw":"Obtaining a Project ID and Name,Common Parameters,API Reference", + "title":"Obtaining a Project ID and Name", + "githuburl":"" + }, + { + "uri":"css_03_0073.html", + "product_code":"css", + "code":"38", + "des":"Table 1 describes the common request parameters.", + "doc_type":"api", + "kw":"Common Request Parameters,Common Parameters,API Reference", + "title":"Common Request Parameters", + "githuburl":"" + }, + { + "uri":"css_03_0074.html", + "product_code":"css", + "code":"39", + "des":"Table 1 describes common response headers.", + "doc_type":"api", + "kw":"Common Response Parameters,Common Parameters,API Reference", + "title":"Common Response Parameters", + "githuburl":"" + }, + { + "uri":"css_03_0075.html", + "product_code":"css", + "code":"40", + "des":"Table 1 describes the status code.", + "doc_type":"api", + "kw":"Status Code,Common Parameters,API Reference", + "title":"Status Code", + "githuburl":"" + }, + { + "uri":"css_03_0076.html", + "product_code":"css", + "code":"41", + "des":"No data is returned if an API fails to be invoked. You can locate the cause of an error according to the error code of each API. When the API calling fails, HTTPS status ", + "doc_type":"api", + "kw":"Error Code,Common Parameters,API Reference", + "title":"Error Code", + "githuburl":"" + }, + { + "uri":"css_03_0024.html", + "product_code":"css", + "code":"42", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Change History,API Reference", + "title":"Change History", + "githuburl":"" + } +] \ No newline at end of file diff --git a/docs/css/api-ref/CLASS.TXT.json b/docs/css/api-ref/CLASS.TXT.json new file mode 100644 index 000000000..5478c5d57 --- /dev/null +++ b/docs/css/api-ref/CLASS.TXT.json @@ -0,0 +1,380 @@ +[ + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"css", + "title":"Before You Start", + "uri":"css_03_0001.html", + "doc_type":"api", + "p_code":"", + "code":"1" + }, + { + "desc":"Welcome to Cloud Search Service API Reference. Cloud Search Service (CSS) provides hosted, distributed search engine services. It is fully compatible with open-source Ela", + "product_code":"css", + "title":"Overview", + "uri":"css_03_0051.html", + "doc_type":"api", + "p_code":"1", + "code":"2" + }, + { + "desc":"An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.", + "product_code":"css", + "title":"Endpoints", + "uri":"css_03_0053.html", + "doc_type":"api", + "p_code":"1", + "code":"3" + }, + { + "desc":"In CSS, Elasticsearch 7.6.2 and 7.9.3 and Kibana 7.6.2 and 7.9.3 are supported.", + "product_code":"css", + "title":"Supported Cluster Versions", + "uri":"css_03_0056.html", + "doc_type":"api", + "p_code":"1", + "code":"4" + }, + { + "desc":"The CSS API is a self-developed API that complies with RESTful API design specifications. You can call CSS APIs to implement the CSS functions described in Table 1.", + "product_code":"css", + "title":"API Overview", + "uri":"css_03_0057.html", + "doc_type":"api", + "p_code":"", + "code":"5" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"css", + "title":"Calling APIs", + "uri":"iam_01_0023.html", + "doc_type":"api", + "p_code":"", + "code":"6" + }, + { + "desc":"This section describes the structure of a RESTful API request, and uses the API for Obtaining a User Token as an example to describe how to call an API. A token is a user", + "product_code":"css", + "title":"Making an API Request", + "uri":"iam_02_0008.html", + "doc_type":"api", + "p_code":"6", + "code":"7" + }, + { + "desc":"CSS supports token authentication.The validity period of a token is 24 hours. When using a token for authentication, cache it to prevent frequently calling the IAM API.A ", + "product_code":"css", + "title":"Authentication", + "uri":"iam_02_0510.html", + "doc_type":"api", + "p_code":"6", + "code":"8" + }, + { + "desc":"After sending a request, you will receive a response containing the status code, response header, and response body.A status code is a group of digits, ranging from 1xx t", + "product_code":"css", + "title":"Returned Values", + "uri":"iam_02_0511.html", + "doc_type":"api", + "p_code":"6", + "code":"9" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"css", + "title":"Cluster Management APIs", + "uri":"css_03_0008.html", + "doc_type":"api", + "p_code":"", + "code":"10" + }, + { + "desc":"This API is used to create a cluster.Table 2 describes the request parameters.Table 11 describes the response parameters.Example requestExample response{\n \"cluster\": {\n ", + "product_code":"css", + "title":"Creating a Cluster", + "uri":"css_03_0019.html", + "doc_type":"api", + "p_code":"10", + "code":"11" + }, + { + "desc":"This API is used to query and display the cluster list and cluster status.NoneTable 2 describes the response parameters.Example requestExample request of querying cluster", + "product_code":"css", + "title":"Querying the List of Clusters", + "uri":"css_03_0018.html", + "doc_type":"api", + "p_code":"10", + "code":"12" + }, + { + "desc":"This API is used to query and display details about a cluster.NoneTable 2 describes the response parameters.Example requestExample responseTable 7 describes the status co", + "product_code":"css", + "title":"Querying Cluster Details", + "uri":"css_03_0026.html", + "doc_type":"api", + "p_code":"10", + "code":"13" + }, + { + "desc":"This API is used to delete a cluster. All resources, including customer data, of the deleted cluster will be released. For data security reasons, create a snapshot for th", + "product_code":"css", + "title":"Deleting a Cluster", + "uri":"css_03_0020.html", + "doc_type":"api", + "p_code":"10", + "code":"14" + }, + { + "desc":"This API is used to restart a cluster. Restarting the cluster will interrupt ongoing services.NoneExample requestExample responseTable 3 describes the status code.", + "product_code":"css", + "title":"Restarting a Cluster", + "uri":"css_03_0021.html", + "doc_type":"api", + "p_code":"10", + "code":"15" + }, + { + "desc":"This API is used to scale out a cluster with only common nodes. Clusters with master, client, or cold data nodes cannot use this API.Table 2 describes the request paramet", + "product_code":"css", + "title":"Scaling Out a Cluster with only Common Nodes", + "uri":"css_03_0025.html", + "doc_type":"api", + "p_code":"10", + "code":"16" + }, + { + "desc":"This API is used to scale out a cluster with special nodes. That is, if a cluster has master, client, or cold data nodes, this API is used for scale-out.Table 2 describes", + "product_code":"css", + "title":"Scaling Out a Cluster with Special Nodes", + "uri":"css_03_0038.html", + "doc_type":"api", + "p_code":"10", + "code":"17" + }, + { + "desc":"This API is used to query and display the IDs of supported instance flavors.NoneTable 2 describes the response parameters.Example requestGET /v1.0/6204a5bd270343b5885144c", + "product_code":"css", + "title":"Obtaining the List of Instance Flavors", + "uri":"css_03_0023.html", + "doc_type":"api", + "p_code":"10", + "code":"18" + }, + { + "desc":"This API is used to download the HTTPS certificate file of the server.NoneExample requestExample responseAfter obtaining the preceding character string, run the following", + "product_code":"css", + "title":"Downloading a Certificate File", + "uri":"css_03_0050.html", + "doc_type":"api", + "p_code":"10", + "code":"19" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"css", + "title":"Tag Management APIs", + "uri":"css_03_0077.html", + "doc_type":"api", + "p_code":"10", + "code":"20" + }, + { + "desc":"This API is used to query the tag information about a specified cluster.NoneTable 2 describes the response parameters.Example requestExample responseTable 4 describes the", + "product_code":"css", + "title":"Querying Tags of a Specified Cluster", + "uri":"css_03_0078.html", + "doc_type":"api", + "p_code":"20", + "code":"21" + }, + { + "desc":"This API is used to query all tags in a specified region.NoneTable 2 describes the response parameters.Example requestExample responseTable 4 describes the status code.", + "product_code":"css", + "title":"Querying All Tags", + "uri":"css_03_0079.html", + "doc_type":"api", + "p_code":"20", + "code":"22" + }, + { + "desc":"This API is used to add tags to a cluster. A cluster can have a maximum of 10 tags.NoneExample requestPOST /v1.0/458d905f22da49c39f609e3347d65723/css-cluster/4f3deec3-efa", + "product_code":"css", + "title":"Adding Tags to a Cluster", + "uri":"css_03_0083.html", + "doc_type":"api", + "p_code":"20", + "code":"23" + }, + { + "desc":"This API is used to add or delete tags to or from a specified cluster in batches. Tag Management Service (TMS) uses this API to batch manage tags of a cluster. A cluster ", + "product_code":"css", + "title":"Adding or Deleting Cluster Tags in Batches", + "uri":"css_03_0081.html", + "doc_type":"api", + "p_code":"20", + "code":"24" + }, + { + "desc":"This API is used to delete specified cluster tags.NoneNoneExample requestDELETE /v1.0/458d905f22da49c39f609e3347d65723/css-cluster/4f3deec3-efa8-4598-bf91-560aad1377a3/ta", + "product_code":"css", + "title":"Deleting Specified Cluster Tags", + "uri":"css_03_0082.html", + "doc_type":"api", + "p_code":"20", + "code":"25" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"css", + "title":"Snapshot Management APIs", + "uri":"css_03_0010.html", + "doc_type":"api", + "p_code":"", + "code":"26" + }, + { + "desc":"The API for automatically configuring a cluster snapshot can automatically create OBS buckets and agencies for storing snapthos. If you have multiple clusters, an OBS buc", + "product_code":"css", + "title":"(Not Recommended) Automatically Configuring Basic Settings of a Cluster Snapshot", + "uri":"css_03_0037.html", + "doc_type":"api", + "p_code":"26", + "code":"27" + }, + { + "desc":"Using this API will automatically enable the snapshot function.This API is used to modify the basic configurations of a cluster snapshot. The basic configurations include", + "product_code":"css", + "title":"Modifying Basic Configurations of a Cluster Snapshot", + "uri":"css_03_0030.html", + "doc_type":"api", + "p_code":"26", + "code":"28" + }, + { + "desc":"This API is used to set parameters related to automatic snapshot creation. By default, a snapshot is created per day.Table 2 describes the request parameters.NoneExample ", + "product_code":"css", + "title":"Setting the Automatic Snapshot Creation Policy", + "uri":"css_03_0031.html", + "doc_type":"api", + "p_code":"26", + "code":"29" + }, + { + "desc":"This API is used to query the automatic snapshot creation policy for a cluster.NoneTable 2 describes the response parameters.Example requestExample responseTable 3 descri", + "product_code":"css", + "title":"Querying the Automatic Snapshot Creation Policy for a Cluster", + "uri":"css_03_0032.html", + "doc_type":"api", + "p_code":"26", + "code":"30" + }, + { + "desc":"This API is used to manually create a snapshot.Table 2 describes the request parameters.Table 3 describes the response parameters.Example requestExample responseTable 5 d", + "product_code":"css", + "title":"Manually Creating a Snapshot", + "uri":"css_03_0033.html", + "doc_type":"api", + "p_code":"26", + "code":"31" + }, + { + "desc":"This API is used to query all snapshots of a cluster.NoneExample requestExample responseTable 5 describes the status code.", + "product_code":"css", + "title":"Querying the List of Snapshots", + "uri":"css_03_0034.html", + "doc_type":"api", + "p_code":"26", + "code":"32" + }, + { + "desc":"This API is used to manually restore a snapshot.Table 2 describes the request parameters.NoneExample requestExample responseThe return value is empty.Table 3 describes th", + "product_code":"css", + "title":"Restoring a Snapshot", + "uri":"css_03_0035.html", + "doc_type":"api", + "p_code":"26", + "code":"33" + }, + { + "desc":"This API is used to delete a snapshot.NoneNoneExample requestTable 2 describes the status code.", + "product_code":"css", + "title":"Deleting a Snapshot", + "uri":"css_03_0036.html", + "doc_type":"api", + "p_code":"26", + "code":"34" + }, + { + "desc":"This API is used to disable the snapshot function.NoneNoneExample requestTable 2 describes the status code.", + "product_code":"css", + "title":"Disabling the Snapshot Function", + "uri":"css_03_0039.html", + "doc_type":"api", + "p_code":"26", + "code":"35" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"css", + "title":"Common Parameters", + "uri":"css_03_0040.html", + "doc_type":"api", + "p_code":"", + "code":"36" + }, + { + "desc":"A project ID or project name is required in some API requests. You need to obtain the project ID and name before calling an API.Log in to the console.In the upper right c", + "product_code":"css", + "title":"Obtaining a Project ID and Name", + "uri":"css_03_0071.html", + "doc_type":"api", + "p_code":"36", + "code":"37" + }, + { + "desc":"Table 1 describes the common request parameters.", + "product_code":"css", + "title":"Common Request Parameters", + "uri":"css_03_0073.html", + "doc_type":"api", + "p_code":"36", + "code":"38" + }, + { + "desc":"Table 1 describes common response headers.", + "product_code":"css", + "title":"Common Response Parameters", + "uri":"css_03_0074.html", + "doc_type":"api", + "p_code":"36", + "code":"39" + }, + { + "desc":"Table 1 describes the status code.", + "product_code":"css", + "title":"Status Code", + "uri":"css_03_0075.html", + "doc_type":"api", + "p_code":"36", + "code":"40" + }, + { + "desc":"No data is returned if an API fails to be invoked. You can locate the cause of an error according to the error code of each API. When the API calling fails, HTTPS status ", + "product_code":"css", + "title":"Error Code", + "uri":"css_03_0076.html", + "doc_type":"api", + "p_code":"36", + "code":"41" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"css", + "title":"Change History", + "uri":"css_03_0024.html", + "doc_type":"api", + "p_code":"", + "code":"42" + } +] \ No newline at end of file diff --git a/docs/css/api-ref/PARAMETERS.txt b/docs/css/api-ref/PARAMETERS.txt new file mode 100644 index 000000000..6da8d5f07 --- /dev/null +++ b/docs/css/api-ref/PARAMETERS.txt @@ -0,0 +1,3 @@ +version="" +language="en-us" +type="" \ No newline at end of file diff --git a/docs/css/api-ref/css_03_0001.html b/docs/css/api-ref/css_03_0001.html new file mode 100644 index 000000000..3297a7cd9 --- /dev/null +++ b/docs/css/api-ref/css_03_0001.html @@ -0,0 +1,15 @@ + + +

Before You Start

+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0008.html b/docs/css/api-ref/css_03_0008.html new file mode 100644 index 000000000..17865aa7b --- /dev/null +++ b/docs/css/api-ref/css_03_0008.html @@ -0,0 +1,29 @@ + + +

Cluster Management APIs

+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0010.html b/docs/css/api-ref/css_03_0010.html new file mode 100644 index 000000000..c49f0b3b4 --- /dev/null +++ b/docs/css/api-ref/css_03_0010.html @@ -0,0 +1,27 @@ + + +

Snapshot Management APIs

+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0018.html b/docs/css/api-ref/css_03_0018.html new file mode 100644 index 000000000..1c708ca7a --- /dev/null +++ b/docs/css/api-ref/css_03_0018.html @@ -0,0 +1,527 @@ + + +

Querying the List of Clusters

+

Function

This API is used to query and display the cluster list and cluster status.

+
+

URI

GET /v1.0/{project_id}/clusters
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

start

+

No

+

Integer

+

Start value of the query. The default value is 1, indicating that the query starts from the first cluster.

+

limit

+

No

+

Integer

+

Number of clusters to be queried. The default value is 10, indicating that 10 clusters are queried at a time.

+
+
+
+

Request

None

+
+

Response

Table 2 describes the response parameters.

+ +
+ + + + + + + + + +
Table 2 Parameter description

Parameter

+

Type

+

Description

+

clusters

+

Array of clusters objects

+

List of cluster objects.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 clusters field data structure description

Parameter

+

Type

+

Description

+

datastore

+

Object

+

Type of the data search engine. For details, see Table 4.

+

instances

+

Array of instances in Table 5.

+

List of node objects.

+

updated

+

String

+

Last modification time of a cluster. The format is ISO8601: CCYY-MM-DDThh:mm:ss.

+

name

+

String

+

Cluster name.

+

created

+

String

+

Time when a cluster is created. The format is ISO8601: CCYY-MM-DDThh:mm:ss.

+
NOTE:

The returned cluster list is sorted by creation time in descending order. Specifically, the cluster with the latest creation time is at the top.

+
+

id

+

String

+

Cluster ID.

+

status

+

String

+

Return value.

+
  • 100: Creating.
  • 200: Available.
  • 303: Unavailable, such as creation failed.
+

endpoint

+

String

+

IP address and port number of the user used to access the VPC.

+

actionProgress

+

Object

+

Cluster operation progress, which indicates the progress of cluster creation and expansion in percentage. CREATING specifies the progress of creation.

+

actions

+

Array of strings

+

Current behavior on a cluster. Value REBOOTING indicates that the cluster is being restarted, GROWING indicates that capacity expansion is being performed on the cluster, RESTORING indicates that the cluster is being restored, and SNAPSHOTTING indicates that the snapshot is being created.

+

failed_reasons

+

Object

+

Failure cause. If the cluster is in the available status, this parameter is not returned. For details, see Table 6.

+

httpsEnable

+

Boolean

+

Communication encryption status.

+

Value false indicates that communication encryption is not enabled.

+

Value true indicates that communication encryption is enabled.

+

authorityEnable

+

String

+

Whether to enable authentication. Available values include true and false. Authentication is disabled by default. When authentication is enabled, httpsEnable must be set to true.

+
  • Value true indicates that authentication is enabled for the cluster.
  • Value false indicates that authentication is disabled for the cluster.
+

diskEncrypted

+

Boolean

+

Whether disks are encrypted.

+
  • Value true indicates that disks are encrypted.
  • Value false indicates that disks are not encrypted.
+

cmkId

+

String

+

Key ID used for disk encryption.

+

vpcId

+

String

+

VPC ID.

+

subnetId

+

String

+

Subnet ID.

+

securityGroupId

+

String

+

Security group ID.

+

tags

+

Array of tags in Table 7.

+

Tags of a cluster.

+

period

+

Boolean

+

Whether the cluster is billed.

+
+
+ +
+ + + + + + + + + + + + + +
Table 4 datastore field data structure description

Parameter

+

Type

+

Description

+

type

+

String

+

Supported type: elasticsearch

+

version

+

String

+

Engine version number.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 instances field data structure description

Parameter

+

Type

+

Description

+

type

+

String

+

Supported type: ess (indicating the Elasticsearch node)

+

id

+

String

+

Instance ID.

+

name

+

String

+

Instance name.

+

status

+

String

+

Instance status.

+
  • 100: Creating.
  • 200: Available.
  • 303: Unavailable, such as creation failed.
+

specCode

+

String

+

Node specifications.

+

azCode

+

String

+

AZ to which a node belongs.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 failed_reasons field data structure description

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code.

+
  • CSS.6000: indicates that a cluster fails to be created.
  • CSS.6001: indicates that a cluster fails to be scaled out.
  • CSS.6002: indicates that a cluster fails to be restarted.
  • CSS.6004: indicates that a node fails to be created in a cluster.
  • CSS.6005: indicates that the service fails to be initialized.
+

error_msg

+

String

+

Detailed error information.

+
+
+ +
+ + + + + + + + + + + + + +
Table 7 tags field data structure description

Parameter

+

Type

+

Description

+

key

+

String

+

Tag key.

+

value

+

String

+

Tag value.

+
+
+
+

Examples

+
+

Status Code

Table 8 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 8 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0019.html b/docs/css/api-ref/css_03_0019.html new file mode 100644 index 000000000..66dfaf926 --- /dev/null +++ b/docs/css/api-ref/css_03_0019.html @@ -0,0 +1,588 @@ + + +

Creating a Cluster

+

Function

This API is used to create a cluster.

+
+

URI

POST /v1.0/{project_id}/clusters
+ +
+ + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

cluster

+

Yes

+

Object

+

Cluster. For details about related parameters, see Table 3.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 cluster field description

Parameter

+

Mandatory

+

Type

+

Description

+

instance

+

Yes

+

Object

+

Instance. For details about related parameters, see Table 4.

+

datastore

+

Yes

+

Object

+

Type of the data search engine. For details about related parameters, see Table 7.

+

name

+

Yes

+

String

+

Cluster name. It contains 4 to 32 characters. Only letters, digits, hyphens (-), and underscores (_) are allowed. The value must start with a letter.

+

instanceNum

+

Yes

+

Integer

+

Number of clusters. The value range is 1 to 32.

+

backupStrategy

+

No

+

Object

+

Automatic snapshot creation. This function is disabled by default. For details about related parameters, see Table 8.

+
NOTE:

The automatic snapshot creation policy is enabled only if this parameter is specified.

+
+

diskEncryption

+

Yes

+

Object

+

Whether disks are encrypted. For details about related parameters, see Table 9.

+

httpsEnable

+

No

+

String

+

Whether communication is encrypted on the cluster. Available values include true and false. By default, communication is encrypted.

+
  • Value true indicates that communication is encrypted on the cluster.
  • Value false indicates that communication is not encrypted on the cluster.
+

authorityEnable

+

No

+

Boolean

+

Whether to enable authentication. Available values include true and false. Authentication is disabled by default. When authentication is enabled, httpsEnable must be set to true.

+
  • Value true indicates that authentication is enabled for the cluster.
  • Value false indicates that authentication is disabled for the cluster.
    NOTE:

    This parameter is supported in clusters 7.1.1 or later.

    +
    +
+

adminPwd

+

No

+

String

+

Password of the cluster user admin in security mode. This parameter is mandatory only when authorityEnable is set to true.

+
NOTE:
  • The administrator password must meet the following requirements:
    • The password can contain 8 to 32 characters.
    • Passwords must contain at least 3 of the following character types: uppercase letters, lowercase letters, numbers, and special characters (~!@#$%^&*()-_=+\\|[{}];:,<.>/?).
    +
  • Weak password verification is required for a security cluster. You are advised to set a strong password.
+
+

tags

+

No

+

Array of tags in Table 10

+

Tags in a cluster.

+
NOTE:

For details about the tag feature, see the Tag Management Service Overview.

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 instance field description

Parameter

+

Mandatory

+

Type

+

Description

+

flavorRef

+

Yes

+

String

+

Instance flavor name. For example:

+
  • Value range of flavor css.medium.8: 40 GB to 640 GB
  • Value range of flavor css.xlarge.8: 40 GB to 2,560 GB
  • Value range of flavor css.2xlarge.8: 80 GB to 5,120 GB
  • Value range of flavor css.4xlarge.8: 160 GB to 10,240 GB
  • Value range of flavor css.xlarge.4: 40 GB to 1,600 GB
  • Value range of flavor css.2xlarge.4: 80 GB to 3,200 GB
  • Value range of flavor css.4xlarge.4: 100 GB to 6,400 GB
  • Value range of flavor css.8xlarge.4: 160 GB to 10,240 GB
  • Value range of flavor css.xlarge.2: 40 GB to 800 GB
  • Value range of flavor css.2xlarge.2: 80 GB to 1,600 GB
  • Value range of flavor css.4xlarge.2: 100 GB to 3,200 GB
  • Value range of flavor css.8xlarge.2: 320 GB to 10,240 GB
+ +

volume

+

Yes

+

Object

+

Information about the volume. For details about related parameters, see Table 5.

+

nics

+

Yes

+

Object

+

Subnet information. For details about related parameters, see Table 6.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 5 volume field description

Parameter

+

Mandatory

+

Type

+

Description

+

volume_type

+

Yes

+

String

+

COMMON: Common I/O

+

HIGH: High I/O

+

ULTRAHIGH: Ultra-high I/O

+

size

+

Yes

+

Integer

+

Volume size. The minimum value is 40. The value must be a multiple of 4 and 10.

+

Unit: GB

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 6 nics field description

Parameter

+

Mandatory

+

Type

+

Description

+

vpcId

+

Yes

+

String

+

VPC ID, which is used for configuring cluster network.

+

netId

+

Yes

+

String

+

Subnet ID. All instances in a cluster must have the same subnets and security groups.

+

securityGroupId

+

Yes

+

String

+

Security group ID. All instances in a cluster must have the same subnets and security groups.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 7 datastore field description

Parameter

+

Mandatory

+

Type

+

Description

+

version

+

Yes

+

String

+

Engine version. For details about the supported versions, see Supported Cluster Versions.

+

type

+

Yes

+

String

+

Cluster type. The default value is Elasticsearch. Currently, the value can only be Elasticsearch.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 backupStrategy field description

Parameter

+

Mandatory

+

Type

+

Description

+

period

+

Yes

+

String

+

Time when a snapshot is created every day. Snapshots can only be created on the hour. The time format is the time followed by the time zone, specifically, HH:mm z. In the format, HH:mm refers to the hour time and z refers to the time zone, for example, 00:00 GMT+08:00 and 01:00 GMT+08:00.

+

prefix

+

Yes

+

String

+

Prefix of the name of the snapshot that is automatically created.

+

keepday

+

Yes

+

Integer

+

Number of days for which automatically created snapshots are reserved.

+

Value range: 1 to 90

+

bucket

+

No

+

String

+

OBS bucket used for storing backup. If there is snapshot data in an OBS bucket, only the OBS bucket will be used for backup storage and cannot be changed.

+

basePath

+

No

+

String

+

Storage path of the snapshot in the OBS bucket.

+

agency

+

No

+

String

+

IAM agency used to access OBS.

+
NOTE:

If none of the bucket, basePath, and agency parameters are specified, the system will automatically create an OBS bucket and an IAM agency.

+
+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 9 diskEncryption field description

Parameter

+

Mandatory

+

Type

+

Description

+

systemEncrypted

+

Yes

+

String

+

Value 1 indicates encryption is performed, and value 0 indicates encryption is not performed.

+

systemCmkid

+

Yes

+

String

+

Key ID.

+
  • The Default Master Keys cannot be used to create grants. Specifically, you cannot use Default Master Keys whose aliases end with /default in KMS to create clusters.
  • After a cluster is created, do not delete the key used by the cluster. Otherwise, the cluster will become unavailable.
+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 10 tags field description

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

Yes

+

String

+

Tag key. The value can contain 1 to 36 characters. Only digits, letters, hyphens (-) and underscores (_) are allowed.

+

value

+

Yes

+

String

+

Tag value. The value can contain 0 to 43 characters. Only digits, letters, hyphens (-) and underscores (_) are allowed.

+
+
+
+

Response

Table 11 describes the response parameters.

+ +
+ + + + + + + + + +
Table 11 Parameter description

Parameter

+

Type

+

Description

+

cluster

+

Object

+

Cluster. For details, see Table 12.

+
+
+ +
+ + + + + + + + + + + + + +
Table 12 cluster field description

Parameter

+

Type

+

Description

+

id

+

String

+

Cluster ID.

+

name

+

String

+

Cluster name.

+
+
+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters
+{
+    "cluster": {
+        "name": "ES-Test",
+        "instanceNum": 4,
+        "instance": {
+            "flavorRef": "css.large.8",
+            "volume": {
+                "volume_type": "COMMON",
+                "size": 100
+            },
+            "nics": {
+                "vpcId": "fccd753c-91c3-40e2-852f-5ddf76d1a1b2",
+                "netId": "af1c65ae-c494-4e24-acd8-81d6b355c9f1",
+                "securityGroupId": "7e3fed21-1a44-4101-ab29-34e57124f614"
+            }
+        },
+        "httpsEnable": "false",
+        "diskEncryption": {
+            "systemEncrypted": "1",
+            "systemCmkid": "42546bb1-8025-4ad1-868f-600729c341ae"
+        }
+    }
+}
+
Example response
{
+  "cluster": {
+    "id": "ef683016-871e-48bc-bf93-74a29d60d214",
+    "name": "ES-Test"
+  }
+}
+
+
+

Status Code

Table 13 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 13 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

409

+

Conflict

+

The request could not be processed due to a conflict.

+

This status code indicates that the resource that the client attempts to create already exits, or the request fails to be processed because of the update of the conflict request.

+

412

+

Precondition Failed

+

The server does not meet one of the preconditions that the requester puts on the request.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0020.html b/docs/css/api-ref/css_03_0020.html new file mode 100644 index 000000000..d6c8fa815 --- /dev/null +++ b/docs/css/api-ref/css_03_0020.html @@ -0,0 +1,93 @@ + + +

Deleting a Cluster

+

Function

This API is used to delete a cluster. All resources, including customer data, of the deleted cluster will be released. For data security reasons, create a snapshot for the cluster that you want to delete.

+
+

URI

DELETE /v1.0/{project_id}/clusters/{cluster_id}
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to be deleted.

+
+
+
+

Request

None

+
+

Response

None

+
+

Examples

Delete the cluster whose ID is 2a197c4d-5467-4003-931d-83ec49939cf.

+

Example request

+
DELETE /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/2a197c4d-5467-4003-931d-83ec49939cf
+

Example response

+

The return value is empty.

+
+

Status Code

Table 2 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 2 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0021.html b/docs/css/api-ref/css_03_0021.html new file mode 100644 index 000000000..c54f6849e --- /dev/null +++ b/docs/css/api-ref/css_03_0021.html @@ -0,0 +1,114 @@ + + +

Restarting a Cluster

+

Function

This API is used to restart a cluster. Restarting the cluster will interrupt ongoing services.

+
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/restart
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to be restarted.

+
+
+
+

Request

None

+
+

Response

+
+ + + + + + + + + +
Table 2 Parameter description

Parameter

+

Type

+

Description

+

jobId

+

String

+

ID of the restart task.

+
+
+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/47e49a5e-8ced-4d0d-ae15-2af62ac468e3/restart
+

Example response

+
{ 
+ "jobId": [  
+"ff8080815fa0fa5e015fa365b6300007" 
+ ]
+ }
+
+

Status Code

Table 3 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 3 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0023.html b/docs/css/api-ref/css_03_0023.html new file mode 100644 index 000000000..e0831aac3 --- /dev/null +++ b/docs/css/api-ref/css_03_0023.html @@ -0,0 +1,241 @@ + + +

Obtaining the List of Instance Flavors

+

Function

This API is used to query and display the IDs of supported instance flavors.

+
+

URI

GET /v1.0/{project_id}/flavors
+ +
+ + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request

None

+
+

Response

Table 2 describes the response parameters.

+ +
+ + + + + + + + + +
Table 2 Parameter description

Parameter

+

Type

+

Description

+

versions

+

Array of versions objects

+

List of engine versions.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 3 versions field description

Parameter

+

Type

+

Description

+

version

+

String

+

Engine version.

+

type

+

String

+

Instance type. The options are ess, ess-cold, ess-master, and ess-client.

+

flavors

+

Array of flavors objects

+

Flavor list

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 flavors field description

Parameter

+

Type

+

Description

+

ram

+

Integer

+

Memory size of an instance. Unit: GB

+

cpu

+

Integer

+

Number of vCPUs of an instance.

+

name

+

String

+

Flavor name.

+

region

+

String

+

AZ

+

diskrange

+

String

+

Disk capacity range of an instance.

+

flavor_id

+

String

+

ID of a flavor.

+
+
+
+

Examples

Example request
GET /v1.0/6204a5bd270343b5885144cf9c8c158d/flavors
+
+

Example response

+
{
+  "versions": [
+    {
+      "version": "6.2.3",
+      "flavors": [
+        {
+          "cpu": 1,
+          "ram": 8,
+          "name": "css.medium.8",
+          "region": "eu-de",
+          "diskrange": "40,640",
+          "flavor_id": "6b6c0bcf-750d-4f8a-b6f5-c45a143f5198"
+
+        },
+        {
+          "cpu": 2,
+          "ram": 16,
+          "name": "css.large.8",
+          "region": "eu-de",
+          "diskrange": "40,1280",
+          "flavor_id": "d373e339-3cf4-4c00-9739-2259e9f3ec16"
+
+        },
+        {
+          "cpu": 4,
+          "ram": 32,
+          "name": "css.xlarge.8",
+          "region": "eu-de",
+          "diskrange": "40,2560",
+          "flavor_id": "2d8daf1b-873f-4c2e-a7b9-2f9cbcf2f213"
+
+        },
+        {
+          "cpu": 8,
+          "ram": 64,
+          "name": "css.2xlarge.8",
+          "region": "eu-de",
+          "diskrange": "80,5120",
+          "flavor_id": "b3d33ec6-d58a-40f0-aa51-4f671ce64b2a"
+
+        },
+        {
+          "cpu": 16,
+          "ram": 128,
+          "name": "css.4xlarge.8",
+          "region": "eu-de",
+          "diskrange": "160,10240",
+          "flavor_id": "f74419ca-bc91-4558-b4e2-90eeefb37c6e"
+        }
+      ]
+    }
+  ]
+}
+
+

Status Code

Table 5 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 5 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0024.html b/docs/css/api-ref/css_03_0024.html new file mode 100644 index 000000000..e28cf347d --- /dev/null +++ b/docs/css/api-ref/css_03_0024.html @@ -0,0 +1,164 @@ + + +

Change History

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Released On

+

What's New

+

2022-06-30

+
+

2022-05-30

+

Added cluster version 7.9.3.

+

Modified: Scaling Out a Cluster with only Common Nodes.

+ +

2020-08-30

+
  • Added cluster versions 7.1.1 and 7.6.2.
  • Added the tag function.

    Tag Management APIs

    +
  • Removed "CSS Monitoring Metrics" to Cloud Search Service User Guide.
+

2019-03-15

+
+

2019-02-27

+

Accepted in OTC-4.0/Agile.

+

2019-01-26

+
+

2019-01-17

+

Modified the following section based on software changes:

+

Creating a Cluster

+

2018-12-10

+

Modify parameter description in the following section based on software function changes:

+

Creating a Cluster

+

2018-12-03

+

Optimized the code example:

+

Creating a Cluster

+

2018-11-26

+

Modified the parameter description.

+

Creating a Cluster

+

2018-11-19

+

Added parameters in the following section based on software function changes:

+

Creating a Cluster

+

Querying the List of Clusters

+

Querying Cluster Details

+

2018-11-08

+

Added parameters in the following section based on software function changes:

+

Querying the List of Clusters

+

Querying Cluster Details

+

2018-10-29

+
+

2018-10-19

+
  • Modified the API parameter description in the following section:

    Creating a Cluster

    +
  • Optimized the content in the "Documentation guide" table in the following section based on the API reference document template requirements:

    Before You Start

    +
+

2018-10-12

+
+

2018-10-08

+
  • Accepted in OTC-3.2.
  • Modified the parameter description in the following sections:

    Restoring a Snapshot

    +
+

2018-09-29

+
+

2018-09-14

+
+

2018-09-04

+
+

2018-08-21

+
+

2018-07-31

+

This is the first official release.

+
+
+
+ diff --git a/docs/css/api-ref/css_03_0025.html b/docs/css/api-ref/css_03_0025.html new file mode 100644 index 000000000..5d9e2a4ad --- /dev/null +++ b/docs/css/api-ref/css_03_0025.html @@ -0,0 +1,146 @@ + + +

Scaling Out a Cluster with only Common Nodes

+

Function

This API is used to scale out a cluster with only common nodes. Clusters with master, client, or cold data nodes cannot use this API.

+
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/extend 
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to be scaled out.

+
+
+
+

Request

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

grow

+

Yes

+

Object

+

Detailed description about the cluster scale-out request. For details, see Table 3.

+
+
+ +
+ + + + + + + + + + + +
Table 3 grow field description

Parameter

+

Mandatory

+

Type

+

Description

+

modifySize

+

Yes

+

Integer

+

Number of instances in a cluster after a scale-out.

+
NOTE:

The total number of existing instances and newly added instances in a cluster cannot exceed 32.

+
+
+
+
+

Response

None

+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/extend
+{
+    "grow": 
+        {
+            "modifySize": 4
+        }
+}
+

Example response

+
{}
+
+

Status Code

Table 4 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0026.html b/docs/css/api-ref/css_03_0026.html new file mode 100644 index 000000000..6da7060f5 --- /dev/null +++ b/docs/css/api-ref/css_03_0026.html @@ -0,0 +1,414 @@ + + +

Querying Cluster Details

+

Function

This API is used to query and display details about a cluster.

+
+

URI

GET /v1.0/{project_id}/clusters/{cluster_id}
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to be queried.

+
+
+
+

Request

None

+
+

Response

Table 2 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Type

+

Description

+

datastore

+

Object

+

Type of the data search engine. For details, see Table 3.

+

instances

+

Array of instances in Table 4.

+

List of node objects.

+

updated

+

String

+

Last modification time of a cluster. The format is ISO8601: CCYY-MM-DDThh:mm:ss.

+

name

+

String

+

Cluster name.

+

created

+

String

+

Time when a cluster is created. The format is ISO8601: CCYY-MM-DDThh:mm:ss.

+

id

+

String

+

Cluster ID.

+

status

+

String

+

Return value.

+
  • 100: The operation, such as instance creation, is in progress.
  • 200: The cluster is available.
  • 303: The cluster is unavailable.
+

endpoint

+

String

+

Indicates the IP address and port number of the user used to access the VPC.

+

actionProgress

+

Object

+

Cluster operation progress, which indicates the progress of cluster creation and expansion in percentage.

+

actions

+

Array of strings

+

Current behavior on a cluster. Value REBOOTING indicates that the cluster is being restarted, GROWING indicates that capacity expansion is being performed on the cluster, RESTORING indicates that the cluster is being restored, and SNAPSHOTTING indicates that the snapshot is being created.

+

failed_reasons

+

Object

+

Failure cause. If the cluster is in the Available state, this parameter is not returned. For details, see Table 5.

+

httpsEnable

+

Boolean

+

Communication encryption status.

+
  • Value false indicates that communication encryption is not enabled.
  • Value true indicates that communication encryption has been enabled.
+

authorityEnable

+

String

+

Whether to enable authentication. Available values include true and false. Authentication is disabled by default. When authentication is enabled, httpsEnable must be set to true.

+
  • Value true indicates that authentication is enabled for the cluster.
  • Value false indicates that authentication is disabled for the cluster.
+

diskEncrypted

+

Boolean

+

Whether disks are encrypted.

+
  • Value true indicates that disks are encrypted.
  • Value false indicates that disks are not encrypted.
+

cmkId

+

String

+

Key ID used for disk encryption.

+

vpcId

+

String

+

VPC ID.

+

subnetId

+

String

+

Subnet ID.

+

securityGroupId

+

String

+

Security group ID.

+

tags

+

Array of tags in Table 6.

+

Tags in a cluster.

+

period

+

Boolean

+

Whether the cluster is billed.

+
+
+ +
+ + + + + + + + + + + + + +
Table 3 datastore field data structure description

Parameter

+

Type

+

Description

+

type

+

String

+

Supported type: elasticsearch

+

version

+

String

+

Engine version number.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 instances field data structure description

Parameter

+

Type

+

Description

+

type

+

String

+

Supported type: ess (indicating the Elasticsearch node)

+

id

+

String

+

Instance ID.

+

name

+

String

+

Instance name.

+

status

+

String

+

Instance status.

+
  • 100: The operation, such as instance creation, is in progress.
  • 200: The instance is available.
  • 303: The instance is unavailable.
+

specCode

+

String

+

Node specifications.

+

azCode

+

String

+

AZ to which a node belongs.

+
+
+ +
+ + + + + + + + + + + + + +
Table 5 failed_reasons field data structure description

Parameter

+

Type

+

Description

+

error_code

+

String

+

Error code.

+
  • CSS.6000: indicates that a cluster fails to be created.
  • CSS.6001: indicates that capacity expansion of a cluster fails.
  • CSS.6002: indicates that a cluster fails to be restarted.
  • CSS.6004: indicates that a node fails to be created in a cluster.
  • CSS.6005: indicates that the service fails to be initialized.
+

error_msg

+

String

+

Detailed error information.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 tags field data structure description

Parameter

+

Type

+

Description

+

key

+

String

+

Tag key.

+

value

+

String

+

Tag value.

+
+
+
+

Examples

Example request

+
GET /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/5c77b71c-5b35-4f50-8984-76387e42451a
+

Example response

+
{
+    "datastore": {
+        "type": "elasticsearch",
+        "version": "7.6.2"
+    },
+    "instances": [
+        {
+            "status": "200",
+            "type": "ess",
+            "id": "c2f29369-1985-4028-8e72-89cbb96a299d",
+            "name": "css-5977-ess-esn-1-1",
+            "specCode": "css.xlarge.2",
+            "azCode": "cn-cmcc1a-01"
+        }
+    ],
+    "updated": "2020-12-03T07:02:08",
+    "name": "css-5977",
+    "created": "2020-12-03T07:02:08",
+    "id": "bc8ea974-77ef-46de-b011-918b0fdedb45",
+    "status": "200",
+    "endpoint": "10.16.0.88:9200",
+    "vpcId": "e7daa617-3ee6-4ff1-b042-8cda4a006a46",
+    "subnetId": "6253dc44-24cd-4c0a-90b3-f965e7f4dcd4",
+    "securityGroupId": "d478041e-bcbe-4d69-a492-b6122d774b7f",
+    "httpsEnable": true,
+    "authorityEnable": true,
+    "diskEncrypted": false,
+    "actionProgress": {},
+    "actions": [],
+    "tags": [],
+    "period": false
+
+}
+
+

Status Code

Table 7 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 7 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0030.html b/docs/css/api-ref/css_03_0030.html new file mode 100644 index 000000000..4bba9fd30 --- /dev/null +++ b/docs/css/api-ref/css_03_0030.html @@ -0,0 +1,144 @@ + + +

Modifying Basic Configurations of a Cluster Snapshot

+

Using this API will automatically enable the snapshot function.

+
+

Function

This API is used to modify the basic configurations of a cluster snapshot. The basic configurations include the OBS bucket and IAM agency.

+
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/index_snapshot/setting
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster where index data is to be backed up.

+
+
+
+

Request

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

bucket

+

Yes

+

String

+

OBS bucket used for index data backup. If there is snapshot data in an OBS bucket, only the OBS bucket is used and cannot be changed.

+

agency

+

Yes

+

String

+

IAM agency used to access OBS.

+

snapshotCmkId

+

No

+

String

+

Key ID used for snapshot encryption.

+
  • The Default Master Keys cannot be used to create grants. Specifically, you cannot use Default Master Keys whose aliases end with /default in KMS to encrypt snapshots.
  • If a snapshot has been stored in the OBS bucket, you cannot modify the parameters for encrypting the snapshot.
  • If the key used for encryption is in the Pending deletion or disable state, you cannot perform backup and restoration operations on the cluster. Specifically, new snapshots cannot be created for the cluster, and existing snapshots cannot be used for restoration. In this case, switch to the KMS management console and change the state of the target key to enable so that backup and restore operations are allowed on the cluster.
  • If the key used for encryption is deleted, backup and restore operations are not allowed on the cluster. In addition, the deleted key cannot be restored. Therefore, exercise caution when deleting a key.
  • You are advised to disable the automatic snapshot creation function if the key is deleted or is in the Pending deletion or disable state. In this condition, automatic snapshot creation is allowed based on the configured snapshot policy. However, all automatic snapshot creation tasks will fail, and the failed tasks are displayed in the failed task list in the Failed Tasks dialog box.
+
+
+
+

Response

None

+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshot/setting
+{
+    "bucket":"test-bucket",
+    "agency":"usearch",
+    "snapshotCmkId":"42546bb1-8025-4ad1-868f-600729c341aea"
+}
+
+

Status Code

Table 3 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 3 Status code

Status Code

+

Code

+

Status Code Description

+

200

+

OK

+

The request is processed successfully.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+

412

+

Precondition Failed

+

The server does not meet one of the preconditions that the requester puts on the request.

+

504

+

Gateway Timeout

+

A gateway timeout error occurred.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0031.html b/docs/css/api-ref/css_03_0031.html new file mode 100644 index 000000000..f3cdd640e --- /dev/null +++ b/docs/css/api-ref/css_03_0031.html @@ -0,0 +1,146 @@ + + +

Setting the Automatic Snapshot Creation Policy

+

Function

This API is used to set parameters related to automatic snapshot creation. By default, a snapshot is created per day.

+
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/index_snapshot/policy
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster where automatic snapshot creation is enabled.

+
+
+
+

Request

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

prefix

+

Yes

+

String

+

Prefix of the snapshot name that is automatically created.

+

period

+

Yes

+

String

+

Time when a snapshot is created every day. Snapshots can only be created on the hour. The time format is the time followed by the time zone, specifically, HH:mm z. In the format, HH:mm refers to the hour time and z refers to the time zone, for example, 00:00 GMT+08:00 and 01:00 GMT+08:00.

+

keepday

+

Yes

+

Integer

+

Number of days that a snapshot can be retained. The value ranges from 1 to 90. The system automatically deletes snapshots that have been retained for the allowed maximum duration on the half hour.

+

enable

+

Yes

+

String

+

Value true indicates that the automatic snapshot creation policy is enabled, and value false indicates that the automatic snapshot creation policy is disabled.

+

deleteAuto

+

No

+

String

+

Whether to delete all automatically created snapshots when the automatic snapshot creation policy is disabled. The default value is false, indicating that snapshots that have been automatically created are not deleted when the automatic snapshot creation function is disabled. If this parameter is set to true, all automatically created snapshots are deleted when the automatic snapshot creation policy is disabled.

+
+
+
+

Response

None

+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshot/policy
+{
+    "prefix":"snapshot",
+    "period":"16:00 GMT+08:00",
+    "keepday":7,
+    "enable":"true"
+}
+
+

Status Code

Table 3 describes the status code.

+ +
+ + + + + + + + + + + + + +
Table 3 Status code

Status Code

+

Code

+

Status Code Description

+

200

+

OK

+

The request is processed successfully.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0032.html b/docs/css/api-ref/css_03_0032.html new file mode 100644 index 000000000..82b9c960b --- /dev/null +++ b/docs/css/api-ref/css_03_0032.html @@ -0,0 +1,162 @@ + + +

Querying the Automatic Snapshot Creation Policy for a Cluster

+

Function

This API is used to query the automatic snapshot creation policy for a cluster.

+
+

URI

GET /v1.0/{project_id}/clusters/{cluster_id}/index_snapshot/policy
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster, for which the automatic snapshot creation policy is to be queried.

+
+
+
+

Request

None

+
+

Response

Table 2 describes the response parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Type

+

Description

+

keepday

+

Integer

+

Retention days for a snapshot.

+

period

+

String

+

Time when a snapshot is created every day.

+

prefix

+

String

+

Snapshot name prefix.

+

bucket

+

String

+

OBS bucket for storing snapshots.

+

basePath

+

String

+

Storage path of the snapshot in the OBS bucket.

+

agency

+

String

+

Agency used to access OBS buckets.

+

enable

+

String

+

Whether to enable the automatic snapshot creation policy.

+

snapshotCmkId

+

String

+

Snapshot encryption ID. If the snapshot is not encrypted, value null is returned.

+
+
+
+

Examples

Example request

+
GET /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshot/policy
+

Example response

+

+
+
{
+    "keepday":2,
+    "period":"16:00 GMT+08:00",
+    "prefix":"snapshot",
+    "bucket":"es-backup",
+    "basePath": "css_repository/tests", 
+    "agency":"usearch",
+    "enable":"true",
+    "snapshotCmkId" : "a7d5d58c-0330-4d25-860d-c488a4cb4ba7" 
+}
+
+

Status Code

Table 3 describes the status code.

+ +
+ + + + + + + + + + + + + +
Table 3 Status code

Status Code

+

Code

+

Status Code Description

+

200

+

OK

+

The request is processed successfully.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0033.html b/docs/css/api-ref/css_03_0033.html new file mode 100644 index 000000000..bc47c9592 --- /dev/null +++ b/docs/css/api-ref/css_03_0033.html @@ -0,0 +1,210 @@ + + +

Manually Creating a Snapshot

+

Function

This API is used to manually create a snapshot.

+
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/index_snapshot
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster where index data is to be backed up.

+
+
+
+

Request

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Snapshot name. The snapshot name must start with a letter and contains 4 to 64 characters consisting of only lowercase letters, digits, hyphens (-), and underscores (_).

+

description

+

No

+

String

+

Description of a snapshot. The value contains 0 to 256 characters, and angle brackets (<) and (>) are not allowed.

+

indices

+

No

+

String

+

Name of the index to be backed up. Multiple index names are separated by commas (,). By default, data of all indices is backed up. You can use the asterisk (*) to back up data of certain indices. For example, if you enter 2018-06*, then data of indices with the name prefix of 2018-06 will be backed up.

+

The value contains 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?) are not allowed.

+
+
+
+

Response

Table 3 describes the response parameters.

+ +
+ + + + + + + + + +
Table 3 Parameter description

Parameter

+

Type

+

Description

+

backup

+

Object

+

Snapshot object. For details, see Table 4.

+
+
+ +
+ + + + + + + + + + + + + +
Table 4 backup field data structure description

Parameter

+

Type

+

Description

+

id

+

String

+

ID of the snapshot.

+

name

+

String

+

Snapshot name.

+
+
+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshot
+{
+    "name":"snapshot_001",
+    "indices":"myindex1,myindex2",
+    "description":""
+}
+
+

Example response

+
{
+    "backup":{
+       "id" : "9dc4f5c9-33c0-45c7-9378-ae35ae350682",
+       "name": "snapshot_101"
+    }
+}
+

Status Code

Table 5 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Status code

Status Code

+

Code

+

Status Code Description

+

201

+

Created

+

The request for creating a resource has been fulfilled.

+

500

+

InternalServerError

+

The server is able to receive the request but it could not understand the request.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+

501

+

Not Implemented

+

The server does not support the requested function.

+

403

+

Forbidden

+

The server understood the request, but is refusing to fulfill it.

+

The client should not repeat the request without modifications.

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0034.html b/docs/css/api-ref/css_03_0034.html new file mode 100644 index 000000000..284cf531f --- /dev/null +++ b/docs/css/api-ref/css_03_0034.html @@ -0,0 +1,350 @@ + + +

Querying the List of Snapshots

+

Function

This API is used to query all snapshots of a cluster.

+
+

URI

GET /v1.0/{project_id}/clusters/{cluster_id}/index_snapshots
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster, to which the snapshot to be queried belongs.

+
+
+
+

Request

None

+
+

Response

+
+ + + + + + + + + +
Table 2 backups field data structure description

Parameter

+

Type

+

Description

+

backups

+

Array of backup objects

+

Snapshot list.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 backups field data structure description

Parameter

+

Type

+

Description

+

created

+

String

+

Time when a snapshot is created.

+

datastore

+

Object

+

Type of the data search engine. For details, see Table 4.

+

description

+

String

+

Description of the snapshot.

+

id

+

String

+

ID of the snapshot.

+

clusterId

+

String

+

Cluster ID.

+

clusterName

+

String

+

Cluster name.

+

name

+

String

+

Snapshot name.

+

status

+

String

+

Snapshot status.

+

updated

+

String

+

Whether the snapshot status is updated.

+

backupType

+

String

+

Value 0 indicates that automatic snapshot creation is enabled. Value 1 indicates that you need to manually create the snapshot.

+

backupMethod

+

String

+

Snapshot creation mode.

+

backupExpectedStartTime

+

String

+

Time when the snapshot starts to be executed.

+

backupKeepDay

+

Integer

+

Snapshot retention period.

+

backupPeriod

+

String

+

Time when a snapshot is executed every day.

+

indices

+

String

+

Indices that need to be backed up.

+

totalShards

+

Integer

+

Total number of shards of the indices to be backed up.

+

failedShards

+

Integer

+

Number of shards that fail to be backed up.

+

version

+

String

+

Version of the snapshot.

+

restoreStatus

+

String

+

Snapshot restoration status.

+

startTime

+

integer

+

Timestamp when the snapshot starts to be executed.

+

endTime

+

integer

+

Timestamp when the snapshot execution ends.

+

bucketName

+

String

+

Bucket for storing snapshot data.

+
+
+ +
+ + + + + + + + + + + + + +
Table 4 datastore field data structure description

Parameter

+

Type

+

Description

+

type

+

String

+

Supported type: elasticsearch

+

version

+

String

+

Engine version number.

+
+
+
+

Examples

Example request

+
GET /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshots
+

Example response

+
{
+   "backups": [
+    {
+      "created": "2018-03-07T07:34:47",
+      "datastore": {
+        "type": "elasticsearch",
+        "version": "*.*.*"
+      },
+      "description": "",
+      "id": "e29d99c1-3d19-4ea4-ae8d-f252df76cbe9",
+      "clusterId": "37cb1075-c38e-4cd8-81df-442d52df3786",
+      "clusterName": "Es-xfx",
+      "name": "snapshot-002",
+      "status": "COMPLETED",
+      "updated": "2018-03-07T07:40:12",
+      "backupType": "1",
+      "backupMethod": "manual",
+      "backupExpectedStartTime": null,
+      "backupKeepDay": null,
+      "backupPeriod": null,
+      "indices": ".kibana,website2",
+      "totalShards": 6,
+      "failedShards": 0,
+      "version": "6.2.3",
+      "restoreStatus": "success",
+      "startTime": 1520408087099,
+      "endTime": 1520408412219,
+      "bucketName": "obs-b8ed"
+    },
+    {
+      "created": "2018-03-06T15:42:37",
+      "datastore": {
+        "type": "elasticsearch",
+        "version": "6.2.3"
+      },
+      "description": "",
+      "id": "29a2254e-947f-4463-b65a-5f0b17515fae",
+      "clusterId": "37cb1075-c38e-4cd8-81df-442d52df3786",
+      "clusterName": "Es-xfx",
+      "name": "snapshot-001",
+      "status": "COMPLETED",
+      "updated": "2018-03-06T15:48:04",
+      "backupType": "1",
+      "backupMethod": "manual",
+      "backupExpectedStartTime": null,
+      "backupKeepDay": null,
+      "backupPeriod": null,
+      "indices": ".kibana",
+      "totalShards": 1,
+      "failedShards": 0,
+      "version": "6.2.3",
+      "restoreStatus": "none",
+      "startTime": 1520350957275,
+      "endTime": 1520351284357,
+      "bucketName": "obs-b8ed"
+    }
+  ]
+}
+
+

Status Code

Table 5 describes the status code.

+ +
+ + + + + + + + + + + + + +
Table 5 Status code

Status Code

+

Code

+

Status Code Description

+

200

+

OK

+

The request is processed successfully.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0035.html b/docs/css/api-ref/css_03_0035.html new file mode 100644 index 000000000..8c1cfce56 --- /dev/null +++ b/docs/css/api-ref/css_03_0035.html @@ -0,0 +1,158 @@ + + +

Restoring a Snapshot

+

Function

This API is used to manually restore a snapshot.

+
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/index_snapshot/{snapshot_id}/restore
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to which the snapshot belongs.

+

snapshot_id

+

Yes

+

String

+

ID of the snapshot.

+
+
+
+

Request

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

targetCluster

+

Yes

+

String

+

ID of the cluster, to which the snapshot is to be restored.

+

indices

+

No

+

String

+

Name of the index to be restored. Multiple index names are separated by commas (,). By default, data of all indices is restored. You can use the asterisk (*) to back up data of certain indices. For example, if you enter 2018-06*, then data of indices with the name prefix of 2018-06 will be restored.

+

The value contains 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?) are not allowed.

+

renamePattern

+

No

+

String

+

Rule for defining the indices to be restored. The value contains a maximum of 1,024 characters.

+

Indices that meet the filtering condition specified by this parameter are restored. The filtering condition must be specified using regular expressions. The value contains 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?,) are not allowed.

+

renameReplacement

+

No

+

String

+

Rule for renaming an index. The value contains 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?,) are not allowed. For example, value restored_index_$1 indicates that restored_ is added in front of the names of all restored indices.

+

The renamePattern and renameReplacement parameters must be both configured.

+
+
+
+

Response

None

+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshot/29a2254e-947f-4463-b65a-5f0b17515fae/restore
+{
+    "targetCluster":"ea244205-d641-45d9-9dcb-ab2236bcd07e",
+    "indices":"myindex1,myindex2"
+}
+

Example response

+

The return value is empty.

+
+

Status Code

Table 3 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 3 Status code

Status Code

+

Code

+

Status Code Description

+

201

+

Created

+

The request for creating a resource has been fulfilled.

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

403

+

Forbidden

+

The server understood the request, but is refusing to fulfill it.

+

The client should not repeat the request without modifications.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0036.html b/docs/css/api-ref/css_03_0036.html new file mode 100644 index 000000000..7cc109dfd --- /dev/null +++ b/docs/css/api-ref/css_03_0036.html @@ -0,0 +1,99 @@ + + +

Deleting a Snapshot

+

Function

This API is used to delete a snapshot.

+
+

URI

DELETE /v1.0/{project_id}/clusters/{cluster_id}/index_snapshot/{snapshot_id}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to which the snapshot belongs.

+

snapshot_id

+

Yes

+

String

+

ID of the snapshot to be deleted.

+
+
+
+

Request

None

+
+

Response

None

+
+

Examples

Example request

+
DELETE /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshot/29a2254e-947f-4463-b65a-5f0b17515fae
+
+

Status Code

Table 2 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 2 Status code

Status Code

+

Code

+

Status Code Description

+

200

+

OK

+

The request is processed successfully.

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

403

+

Forbidden

+

The server understood the request, but is refusing to fulfill it.

+

The client should not repeat the request without modifications.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0037.html b/docs/css/api-ref/css_03_0037.html new file mode 100644 index 000000000..d0c5bc7b9 --- /dev/null +++ b/docs/css/api-ref/css_03_0037.html @@ -0,0 +1,84 @@ + + +

(Not Recommended) Automatically Configuring Basic Settings of a Cluster Snapshot

+

The API for automatically configuring a cluster snapshot can automatically create OBS buckets and agencies for storing snapthos. If you have multiple clusters, an OBS bucket will be created for each cluster via this API during automatic configuration and consume your OBS quota. Too many OBS buckets will be difficult to manage. You are advised to perform operations in Modifying Basic Configurations of a Cluster Snapshot.

+
+

Function

This API is used to automatically set basic configurations for a cluster snapshot, including configuring OBS buckets and IAM agency.

+ +
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/index_snapshot/auto_setting
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster where snapshots are to be backed up.

+
+
+
+

Request

None

+
+

Response

None

+
+

Examples

Example request

+
POST /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshot/auto_setting
+
+

Status Code

Table 2 describes the status code.

+ +
+ + + + + + + + + + + + + +
Table 2 Status code

Status Code

+

Code

+

Status Code Description

+

200

+

OK

+

The request is processed successfully.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0038.html b/docs/css/api-ref/css_03_0038.html new file mode 100644 index 000000000..61559eed9 --- /dev/null +++ b/docs/css/api-ref/css_03_0038.html @@ -0,0 +1,198 @@ + + +

Scaling Out a Cluster with Special Nodes

+

Function

This API is used to scale out a cluster with special nodes. That is, if a cluster has master, client, or cold data nodes, this API is used for scale-out.

+
+

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/role_extend
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to be scaled out.

+
+
+
+

Request

Table 2 describes the request parameters.

+ +
+ + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

grow

+

Yes

+

Array of object

+

Detailed description about the cluster scale-out request. For details, see Table 3.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 3 grow field description

Parameter

+

Mandatory

+

Type

+

Description

+

type

+

Yes

+

String

+

Type of the instance to be scaled out. Select at least one from ess, ess-cold, ess-master, and ess-client.

+

You can only add instances, rather than increase storage capacity, on nodes of the ess-master and ess-client types.

+

nodesize

+

Yes

+

Integer

+

Number of instances to be scaled out. The total number of existing instances and newly added instances in a cluster cannot exceed 32.

+

disksize

+

Yes

+

Integer

+

Storage capacity of the instance to be expanded. The total storage capacity of existing instances and newly added instances in a cluster cannot exceed the maximum instance storage capacity allowed when a cluster is being created. In addition, you can expand the instance storage capacity for a cluster for up to six times.

+

Unit: GB

+
+
+
+

Response

Table 4 describes the response parameters.

+ +
+ + + + + + + + + +
Table 4 Parameter description

Parameter

+

Type

+

Description

+

id

+

String

+

Cluster ID.

+
+
+
+

Examples

Example request

+
POST v1.0/458d905f22da49c39f609e3347d65723/clusters/4f3deec3-efa8-4598-bf91-560aad1377a3/role_extend
+{
+    "grow": [
+        {
+            "type": "ess-master",
+            "nodesize": 2,
+            "disksize": 0
+        },
+        {
+            "type": "ess",
+            "nodesize": 0,
+            "disksize": 50
+        },
+        {
+            "type": "ess-client",
+            "nodesize": 1,
+            "disksize": 0
+        }
+    ]
+}
+

Example response

+
{
+    "id": "4f3deec3-efa8-4598-bf91-560aad1377a3"
+}
+
+

Status Code

Table 5 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 5 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0039.html b/docs/css/api-ref/css_03_0039.html new file mode 100644 index 000000000..f975c7c8c --- /dev/null +++ b/docs/css/api-ref/css_03_0039.html @@ -0,0 +1,81 @@ + + +

Disabling the Snapshot Function

+

Function

This API is used to disable the snapshot function.

+
+

URI

DELETE /v1.0/{project_id}/clusters/{cluster_id}/index_snapshots
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to which the snapshot belongs.

+
+
+
+

Request

None

+
+

Response

None

+
+

Examples

Example request

+
DELETE /v1.0/6204a5bd270343b5885144cf9c8c158d/clusters/ea244205-d641-45d9-9dcb-ab2236bcd07e/index_snapshots
+
+

Status Code

Table 2 describes the status code.

+ +
+ + + + + + + + + + + + + +
Table 2 Status code

Status Code

+

Code

+

Status Code Description

+

200

+

OK

+

The request is processed successfully.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0040.html b/docs/css/api-ref/css_03_0040.html new file mode 100644 index 000000000..250ba57ce --- /dev/null +++ b/docs/css/api-ref/css_03_0040.html @@ -0,0 +1,23 @@ + + + +

Common Parameters

+ +

+
+ +
+ +
+ diff --git a/docs/css/api-ref/css_03_0050.html b/docs/css/api-ref/css_03_0050.html new file mode 100644 index 000000000..4e2f9f19a --- /dev/null +++ b/docs/css/api-ref/css_03_0050.html @@ -0,0 +1,81 @@ + + +

Downloading a Certificate File

+

Function

This API is used to download the HTTPS certificate file of the server.

+
+

URI

GET /v1.0/dev/cluster/sslCert
+
+

Request

None

+
+

Response

+
+ + + + + + + + + +
Table 1 Parameter description

Parameter

+

Type

+

Description

+

certBase64

+

String

+

This string is obtained after the certificate file is transcoded using Base64. You need to run the following command to parse the string into a certificate file. The generated certificate file is saved in the folder where the command to be executed is located. In the following command, "$certBase64" indicates the string returned in the response message. The name of the generated certificate file is CloudSearchService.cert. You can specify another name for the certificate file, but must use .cert as the suffix of the name.

+

echo -n "$certBase64" | base64 -d > CloudSearchService.cert

+
+
+
+

Examples

Example request

+
GET /v1.0/dev/cluster/sslCert
+

Example response

+
{   "certBase64":"MIIDnTCCAoWgAwIBAgIEXXdMtTANBgkqhkiG9w0BAQsFADB/MRAwDgYDVQQGEwdHZXJtYW55MQ0wCwYDVQQIEwROb25lMQ0wCwYDVQQHEwROb25lMRkwFwYDVQQKExBPcGVuVGVsZWtvbUNsb3VkMRUwEwYDVQQLEwxEYXRhQW5hbHlzaXMxGzAZBgNVBAMTEkNsb3VkU2VhcmNoU2VydmljZTAeFw0xODExMTcxODE4NDJaFw0xOTAyMTUxODE4NDJaMH8xEDAOBgNVBAYTB0dlcm1hbnkxDTALBgNVBAgTBE5vbmUxDTALBgNVBAcTBE5vbmUxGTAXBgNVBAoTEE9wZW5UZWxla29tQ2xvdWQxFTATBgNVBAsTDERhdGFBbmFseXNpczEbMBkGA1UEAxMSQ2xvdWRTZWFyY2hTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHai9+LMoFSlWqI+YodGiFLw597Vuoo7gG3qTCs+szQTn3PTZtbnzy7TNWjn8K41mkBgUY16wtkhH1nu6AmhRLpZA+2fwAz34v/tDOYahPq045bk9S/znJXQeWWeux93I15z7OP/XC68IF2AKl2NXjmm9bAD/DsqaLuJpoE77d71862sD6uRCBQYyZoQaHw+eKuL8/+5PjWvG9mS+Rxp0DcLd1waFkyK4BjB5Ae3og4bAivKo7vQHH79fgnuK0SQnNpxlU8xLIGaKsQ0/yeJrTrlfy3vBQmj949SbCzFjvmXgkbv4I0jcT5Ax1P68tlasUUnCqFTjGTbzeT82CeE6QIDAQABoyEwHzAdBgNVHQ4EFgQUPPZLu9ElUzQgKURRwn8HpzIliEcwDQYJKoZIhvcNAQELBQADggEBAI/e/sGbZ1jB3ao7Car2p7rm1Pg8ro1kSy9o+Jug6XjJpkwITKGkhPYugtGuKgL6oiYkdJhqmfrm/1R7phf1qzBgRoWtR7eCBg4uorNaYvTelAjbIoYGL03D1c5K6e1XwRsdqNWT3TwiHZ5CuiVOsjAtvt3OrvF2YtPUOJpbbvdXlnLKaLHoaklcyyMJ+KmUbkd2XFhzlhwj4eOaloL8XQcAk/urYFFNTymJPnNiEXjLAgGCfE/j8rX26WKvPUGmcuuqBiK7Ob+VfnfpnssDQoBtQsN9eUNxkYkg6eua8U6zR3nSPxXpdn+TZo3HHnUp3x0f1Xev49MHKe/aPMJOTYE="
+}
+

After obtaining the preceding character string, run the following command to obtain the CloudSearchService.cert certificate file:

+
echo -n "MIIDnTCCAoWgAwIBAgIEXXdMtTANBgkqhkiG9w0BAQsFADB/MRAwDgYDVQQGEwdHZXJtYW55MQ0wCwYDVQQIEwROb25lMQ0wCwYDVQQHEwROb25lMRkwFwYDVQQKExBPcGVuVGVsZWtvbUNsb3VkMRUwEwYDVQQLEwxEYXRhQW5hbHlzaXMxGzAZBgNVBAMTEkNsb3VkU2VhcmNoU2VydmljZTAeFw0xODExMTcxODE4NDJaFw0xOTAyMTUxODE4NDJaMH8xEDAOBgNVBAYTB0dlcm1hbnkxDTALBgNVBAgTBE5vbmUxDTALBgNVBAcTBE5vbmUxGTAXBgNVBAoTEE9wZW5UZWxla29tQ2xvdWQxFTATBgNVBAsTDERhdGFBbmFseXNpczEbMBkGA1UEAxMSQ2xvdWRTZWFyY2hTZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHai9+LMoFSlWqI+YodGiFLw597Vuoo7gG3qTCs+szQTn3PTZtbnzy7TNWjn8K41mkBgUY16wtkhH1nu6AmhRLpZA+2fwAz34v/tDOYahPq045bk9S/znJXQeWWeux93I15z7OP/XC68IF2AKl2NXjmm9bAD/DsqaLuJpoE77d71862sD6uRCBQYyZoQaHw+eKuL8/+5PjWvG9mS+Rxp0DcLd1waFkyK4BjB5Ae3og4bAivKo7vQHH79fgnuK0SQnNpxlU8xLIGaKsQ0/yeJrTrlfy3vBQmj949SbCzFjvmXgkbv4I0jcT5Ax1P68tlasUUnCqFTjGTbzeT82CeE6QIDAQABoyEwHzAdBgNVHQ4EFgQUPPZLu9ElUzQgKURRwn8HpzIliEcwDQYJKoZIhvcNAQELBQADggEBAI/e/sGbZ1jB3ao7Car2p7rm1Pg8ro1kSy9o+Jug6XjJpkwITKGkhPYugtGuKgL6oiYkdJhqmfrm/1R7phf1qzBgRoWtR7eCBg4uorNaYvTelAjbIoYGL03D1c5K6e1XwRsdqNWT3TwiHZ5CuiVOsjAtvt3OrvF2YtPUOJpbbvdXlnLKaLHoaklcyyMJ+KmUbkd2XFhzlhwj4eOaloL8XQcAk/urYFFNTymJPnNiEXjLAgGCfE/j8rX26WKvPUGmcuuqBiK7Ob+VfnfpnssDQoBtQsN9eUNxkYkg6eua8U6zR3nSPxXpdn+TZo3HHnUp3x0f1Xev49MHKe/aPMJOTYE=" | base64 -d > CloudSearchService.cert
+
+

Status Code

+
+ + + + + + + + + + + + + + + + + +
Table 2 Status code

Status Code

+

Code

+

Status Code Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0051.html b/docs/css/api-ref/css_03_0051.html new file mode 100644 index 000000000..0514cf051 --- /dev/null +++ b/docs/css/api-ref/css_03_0051.html @@ -0,0 +1,48 @@ + + +

Overview

+

Welcome to Cloud Search Service API Reference. Cloud Search Service (CSS) provides hosted, distributed search engine services. It is fully compatible with open-source Elasticsearch and supports multi-condition retrieval, statistics, and reporting of structured and unstructured texts.

+

This document provides CSS API description, syntax, parameters, and examples. CSS provides APIs for cluster management and snapshot management. You can call these APIs to easily create, query, delete, restart, and scale clusters.

+
You can search for information you need according to Table 1. +
+ + + + + + + + + + + + + + + + + + + +
Table 1 Overview

Chapter

+

Description

+

API Overview

+

API constituents and list

+

Environment Preparation

+

Prerequisites for using the APIs.

+

API Calling

+

Representational State Transfer (REST) message bodies, calling methods, and examples

+

APIs for each module

+

APIs provided by CSS

+

Common Parameters

+

Common parameters, status codes, and error codes of CSS APIs

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0053.html b/docs/css/api-ref/css_03_0053.html new file mode 100644 index 000000000..72bdcb8d3 --- /dev/null +++ b/docs/css/api-ref/css_03_0053.html @@ -0,0 +1,11 @@ + + +

Endpoints

+

An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.

+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0056.html b/docs/css/api-ref/css_03_0056.html new file mode 100644 index 000000000..3be17b7c6 --- /dev/null +++ b/docs/css/api-ref/css_03_0056.html @@ -0,0 +1,11 @@ + + +

Supported Cluster Versions

+

In CSS, Elasticsearch 7.6.2 and 7.9.3 and Kibana 7.6.2 and 7.9.3 are supported.

+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0057.html b/docs/css/api-ref/css_03_0057.html new file mode 100644 index 000000000..b27833ca4 --- /dev/null +++ b/docs/css/api-ref/css_03_0057.html @@ -0,0 +1,26 @@ + + +

API Overview

+

The CSS API is a self-developed API that complies with RESTful API design specifications. You can call CSS APIs to implement the CSS functions described in Table 1.

+ +
+ + + + + + + + + + +
Table 1 API description

Type

+

Description

+

Cluster Management APIs

+

You can use cluster management APIs to create clusters, scale out a cluster, view cluster details, and obtain instance specifications.

+

Snapshot Management APIs

+

Snapshots can be used to back up and restore data. You can use snapshot management APIs to create, restore, or delete a snapshot.

+
+
+
+ diff --git a/docs/css/api-ref/css_03_0071.html b/docs/css/api-ref/css_03_0071.html new file mode 100644 index 000000000..ede350160 --- /dev/null +++ b/docs/css/api-ref/css_03_0071.html @@ -0,0 +1,47 @@ + + +

Obtaining a Project ID and Name

+

A project ID or project name is required in some API requests. You need to obtain the project ID and name before calling an API.

+

Obtaining a Project ID and Name from the Console

  1. Log in to the console.
  2. In the upper right corner of the page, click the username and choose My Credentials from the drop-down list. The My Credentials page is displayed.
  3. In the project list, view the Project ID and Project Name.
    Figure 1 Viewing the project ID and name
    +
+
+

Obtaining a Project ID by Calling an API

The API for obtaining a project ID is GET https://{iam-endpoint}/v3/projects. {iam-endpoint} indicates the endpoint of IAM, which can be obtained from Endpoints.

+
The following is an example response. For example, if CSS is deployed in region xxx, the value of name in the response body is xxx. The value of id in projects is the project ID.
{
+    "projects": [
+        {
+            "domain_id": "65382450e8f64ac0870cd180d14exxxx",
+            "is_domain": false,
+            "parent_id": "65382450e8f64ac0870cd180d14exxxx",
+            "name": "xxx",    //Project name, the name of the deployment zone.
+            "description": "",
+            "links": {
+                "next": null,
+                "previous": null,
+                "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897dxxxx"
+            },
+            "id": "a4a5d4098fb4474fa22cd05f897dxxxx",    //Project ID
+            "enabled": true
+        }
+    ],
+    "links": {
+        "next": null,
+        "previous": null,
+        "self": "https://www.example.com/v3/projects"
+    }
+}
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/css/api-ref/css_03_0073.html b/docs/css/api-ref/css_03_0073.html new file mode 100644 index 000000000..1e18c6538 --- /dev/null +++ b/docs/css/api-ref/css_03_0073.html @@ -0,0 +1,88 @@ + + +

Common Request Parameters

+

Table 1 describes the common request parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Common request headers

Parameter

+

Mandatory

+

Description

+

X-Sdk-Date

+

This parameter is mandatory for authentication using AK/SK.

+

Time when the request is sent. The time is in the YYYYMMDD'T'HHMMSS'Z' format.

+

The value is the current GMT time of the system.

+

Authorization

+

This parameter is mandatory for authentication using AK/SK.

+

Signature authentication information. The value can be obtained from the request signing result.

+

See Authentication.

+

Host

+

This parameter is mandatory for authentication using AK/SK.

+

Server domain name and port number of the resource being requested. The value can be obtained from the URL of the service API. The value is hostname[:port]. If the port number is not specified, the default port is used. The default port number for https is 443.

+

Content-Type

+

Yes

+

MIME type of the request body.

+

Content-Length

+

This parameter is mandatory for POST and PUT requests, but must be left blank for GET requests.

+

Length of the request body. The unit is byte.

+

X-Project-Id

+

No

+

Project ID. This parameter is used to obtain the token for each project.

+

X-Auth-Token

+

No (This parameter is mandatory for authentication using tokens.)

+

User token.

+

X-Language

+

No

+

Request language. The value is en-us.

+

Accept

+

No

+

Type of content that can be received by a client.

+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0074.html b/docs/css/api-ref/css_03_0074.html new file mode 100644 index 000000000..33561bb6b --- /dev/null +++ b/docs/css/api-ref/css_03_0074.html @@ -0,0 +1,36 @@ + + +

Common Response Parameters

+

Table 1 describes common response headers.

+ +
+ + + + + + + + + + + + + +
Table 1 Common response headers

Name

+

Description

+

Content-Length

+

Length of the response body. The unit is byte.

+

Date

+

Time when a request response is returned.

+

Content-Type

+

MIME type of the request body.

+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0075.html b/docs/css/api-ref/css_03_0075.html new file mode 100644 index 000000000..f98ef8bfe --- /dev/null +++ b/docs/css/api-ref/css_03_0075.html @@ -0,0 +1,329 @@ + + +

Status Code

+

Table 1 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Status code description

Status Code

+

Code

+

Description

+

100

+

Continue

+

The client continues sending the request.

+

This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server.

+

101

+

Switching Protocols

+

Switching protocols. The target protocol must be later than the source protocol.

+

For example, the current HTTPS protocol is switched to a later version.

+

200

+

OK

+

The request is processed successfully.

+

201

+

Created

+

The request for creating a resource has been fulfilled.

+

202

+

Accepted

+

The request has been accepted, but the processing has not been completed.

+

203

+

Non-Authoritative Information

+

The server successfully processed the request, but is returning information that may be from another source.

+

204

+

NoContent

+

The server has successfully processed the request, but has not returned any content.

+

The status code is returned in response to an HTTPS OPTIONS request.

+

205

+

Reset Content

+

The server has fulfilled the request, but the requester is required to reset the content.

+

206

+

Partial Content

+

The server has processed certain GET requests.

+

300

+

Multiple Choices

+

There are multiple options for the location of the requested resource. The response contains a list of resource characteristics and addresses from which the user or user agent (such as a browser) can choose the most appropriate one.

+

301

+

Moved Permanently

+

The requested resource has been assigned a new permanent URI, and the new URI is contained in the response.

+

302

+

Found

+

The requested resource resides temporarily under a different URI.

+

303

+

See Other

+

Retrieve a location.

+

The response to the request can be found under a different URI and should be retrieved using a GET or POST method.

+

304

+

Not Modified

+

The requested resource has not been modified. When the server returns this status code, it does not return any resources.

+

305

+

Use Proxy

+

The requested resource must be accessed through a proxy.

+

306

+

Unused

+

The HTTPS status code is no longer used.

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

401

+

Unauthorized

+

The status code is returned after the client provides the authentication information, indicating that the authentication information is incorrect or invalid.

+

402

+

Payment Required

+

This status code is reserved for future use.

+

403

+

Forbidden

+

The server understood the request, but is refusing to fulfill it.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

405

+

MethodNotAllowed

+

The method specified in the request is not supported for the requested resource.

+

The client should not repeat the request without modifications.

+

406

+

Not Acceptable

+

The server cannot fulfill the request according to the content characteristics of the request.

+

407

+

Proxy Authentication Required

+

This status code is similar to 401, but indicates that the client must first authenticate itself with the proxy.

+

408

+

Request Time-out

+

The request timed out.

+

The client may repeat the request without modifications at any later time.

+

409

+

Conflict

+

The request could not be processed due to a conflict.

+

This status code indicates that the resource that the client attempts to create already exits, or the request fails to be processed because of the update of the conflict request.

+

410

+

Gone

+

The requested resource is no longer available.

+

The status code indicates that the requested resource has been deleted.

+

411

+

Length Required

+

The server refuses to process the request without a defined Content-Length.

+

412

+

Precondition Failed

+

The server does not meet one of the preconditions that the requester puts on the request.

+

413

+

Request Entity Too Large

+

The request is larger than that a server is able to process. The server may close the connection to prevent the client from continuing the request. If the server cannot process the request temporarily, the response will contain a Retry-After header field.

+

414

+

Request-URI Too Large

+

The URI provided was too long for the server to process.

+

415

+

Unsupported Media Type

+

The server is unable to process the media format in the request.

+

416

+

Requested range not satisfiable

+

The requested range is invalid.

+

417

+

Expectation Failed

+

The server fails to meet the requirements of the Expect request-header field.

+

422

+

UnprocessableEntity

+

The request is well-formed but is unable to be processed due to semantic errors.

+

429

+

TooManyRequests

+

The client has sent more requests than its rate limit is allowed within a given amount of time, or the server has received more requests than it is able to process within a given amount of time. In this case, it is advisable for the client to re-initiate requests after the time specified in the Retry-After header of the response expires.

+

500

+

InternalServerError

+

The server is able to receive the request but it could not understand the request.

+

501

+

Not Implemented

+

The server does not support the requested function.

+

502

+

Bad Gateway

+

The server is acting as a gateway or proxy and receives an invalid request from a remote server.

+

503

+

ServiceUnavailable

+

The requested service is invalid.

+

The client should not repeat the request without modifications.

+

504

+

ServerTimeout

+

The request cannot be fulfilled within a given time. This status code is returned to the client only when the Timeout parameter is specified in the request.

+

505

+

HTTP Version not supported

+

The server does not support the HTTPS protocol version used in the request.

+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0076.html b/docs/css/api-ref/css_03_0076.html new file mode 100644 index 000000000..63ce17d84 --- /dev/null +++ b/docs/css/api-ref/css_03_0076.html @@ -0,0 +1,467 @@ + + +

Error Code

+

No data is returned if an API fails to be invoked. You can locate the cause of an error according to the error code of each API. When the API calling fails, HTTPS status code 4xx or 5xx is returned. The returned message body contains the specific error code and error information. If you fail to locate the cause of the error, contact technical support and provide the error code for troubleshooting.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status Code

+

Error Code

+

Error Message

+

Measure

+

400

+

CSS.0001

+

The parameter is incorrect.

+

Check the parameter settings according to the returned information.

+

500

+

CSS.0005

+

Server error.

+

Contact technical support.

+

400

+

CSS.0006

+

The request body is empty. Enter a request parameter.

+

Enter the request parameters.

+

202

+

CSS.0011

+

This operation cannot be performed because another operation is being performed on the instance or the instance is faulty. Please try again later.

+

Try again later.

+

403

+

CSS.0015

+

Resource not found or permission denied.

+

Change the resource ID or check the access permission.

+

404

+

CSS.0022

+

The instance does not exist or has been deleted.

+

Change the instance ID.

+

403

+

CSS.0032

+

The current user has no operation permissions.

+

Check the permissions.

+

400

+

CSS.0045

+

The token is incorrect.

+

Obtain the token again.

+

400

+

CSS.1112

+

The number of instances has reached the quota.

+

Delete some clusters or increase the quota.

+

400

+

CSS.3011

+

Invalid retention duration of the backup.

+

Change the allowed retention duration.

+

404

+

CSS.3027

+

The cluster does not exist.

+

Check whether the cluster ID is correct.

+

400

+

CSS.5007

+

The selected flavor does not exist.

+

Check whether the specifications are correct.

+

400

+

CSS.5009

+

The hard disk size is beyond the valid range.

+

Change the disk size.

+

400

+

CSS.5014

+

Invalid VPC ID.

+

Check whether the VPC ID is correct.

+

400

+

CSS.5015

+

Invalid subnet ID.

+

Check whether the subnet ID is correct.

+

400

+

CSS.5021

+

The VPC does not exist or does not belong to the user.

+

Check whether the VPC is correct.

+

400

+

CSS.5023

+

The security group does not exist or does not belong to the VPC.

+

Check whether the security group is correct.

+

400

+

CSS.5157

+

The CIDR does not exist or is invalid.

+

Check whether there are subnets in the VPC.

+

400

+

CSS.5036

+

The engine does not exist.

+

Check whether the datastore parameter setting is correct.

+

400

+

CSS.5047

+

The number of instances is beyond the valid range.

+

Check whether the number of instances is within the range.

+

409

+

CSS.5050

+

The cluster name already exists.

+

Change the cluster name.

+

400

+

CSS.5052

+

Invalid value of the AZ.

+

Change the AZ.

+

400

+

CSS.5055

+

Invalid flavor.

+

Modify the specifications.

+

400

+

CSS.5061

+

The hard disk type is invalid.

+

Change the hard disk type.

+

400

+

CSS.5071

+

The disk type does not match that in the XML configuration file.

+

Change the hard disk type.

+

400

+

CSS.5072

+

The security group ID is invalid.

+

Change the security group ID.

+

400

+

CSS.5074

+

The subnet does not belong to the VPC.

+

Change the subnet ID.

+

400

+

CSS.5077

+

Invalid cluster name.

+

Change the cluster name.

+

400

+

CSS.5078

+

The hard disk size is beyond the valid range.

+

Change the disk size.

+

400

+

CSS.5092

+

Invalid hard disk information.

+

Modify the hard disk information.

+

400

+

CSS.5093

+

Invalid specification information.

+

Modify the specification information.

+

412

+

CSS.5130

+

The agency name is invalid.

+

Change the agency name.

+

500

+

CSS.9999

+

Request processing failed.

+

Contact technical support.

+

NA

+

CSS.6000

+

Clusters fail to be created.

+

Try again later or contact technical support.

+

NA

+

CSS.6001

+

Cluster scale-out fails.

+

+

Try again later or contact technical support.

+

NA

+

CSS.6002

+

Failed to bind the elastic IP address to the cluster.

+

Try again later or contact technical support.

+

N/A

+

CSS.6003

+

Failed to restore the cluster.

+

Try again later or contact technical support.

+

N/A

+

CSS.6004

+

Failed to create a node.

+

Try again later or contact technical support.

+

N/A

+

CSS.6005

+

The initialization fails.

+

Perform the initialization again or contact technical support.

+

NA

+

CSS.6006

+

Failed to modify the specifications.

+

Perform the initialization again or contact technical support.

+

NA

+

CSS.6007

+

Failed to reset the password.

+

Reset the password.

+

N/A

+

CSS.6008

+

Failed to update the YML file.

+

Update the .yml file again or contact technical support.

+

N/A

+

CSS.6009

+

Failed to create the snapshot.

+

Try again later or contact technical support.

+

N/A

+

CSS.6010

+

Failed to restore the snapshot because the OBS object does not exist or has been deleted.

+

Check whether the configured OBS object exists.

+

N/A

+

CSS.6011

+

Failed to create the snapshot because the OBS bucket you select does not exist or has been deleted.

+

Check whether the OBS bucket exists.

+

N/A

+

CSS.6012

+

Failed to restore the snapshot because the OBS object does not exist or has been deleted.

+

Check whether the OBS bucket exists.

+

N/A

+

CSS.6013

+

The parameters cannot be modified because other operations are being performed on the cluster.

+

Modify parameters when the cluster is available.

+

N/A

+

CSS.6014

+

Some parameters cannot be modified.

+

Check whether the submitted parameter modification request contains a parameter value that cannot be modified. If yes, delete the parameter and try again.

+

N/A

+

CSS.6015

+

The parameter value is not in YAML format.

+

Modify the parameter format and try again.

+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0077.html b/docs/css/api-ref/css_03_0077.html new file mode 100644 index 000000000..18115f674 --- /dev/null +++ b/docs/css/api-ref/css_03_0077.html @@ -0,0 +1,27 @@ + + + +

Tag Management APIs

+ +

+
+ +
+ + + +
+ diff --git a/docs/css/api-ref/css_03_0078.html b/docs/css/api-ref/css_03_0078.html new file mode 100644 index 000000000..b338a1c62 --- /dev/null +++ b/docs/css/api-ref/css_03_0078.html @@ -0,0 +1,148 @@ + + +

Querying Tags of a Specified Cluster

+

Function

This API is used to query the tag information about a specified cluster.

+
+

URI

GET /v1.0/{project_id}/css-cluster/{cluster_id}/tags
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

cluster_id

+

Yes

+

String

+

ID of the cluster to be queried.

+
+
+
+

Request

None

+
+

Response

Table 2 describes the response parameters.

+ +
+ + + + + + + + + +
Table 2 Response

Parameter

+

Type

+

Description

+

tags

+

Array of tag objects

+

Tags in a cluster.

+
+
+ +
+ + + + + + + + + + + + + +
Table 3 tags field description

Parameter

+

Type

+

Description

+

key

+

String

+

Tag key.

+

value

+

String

+

Tag value.

+
+
+
+

Examples

Example request

+
GET v1.0/458d905f22da49c39f609e3347d65723/css-cluster/4f3deec3-efa8-4598-bf91-560aad1377a3/tags
+

Example response

+
{
+    "tags": [
+        {
+            "key": "key1",
+            "value": "value1"
+        },
+        {
+            "key": "key2",
+            "value": "value3"
+        }
+    ]
+}
+
+

Status Code

Table 4 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Status code

Status Code

+

Message

+

Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0079.html b/docs/css/api-ref/css_03_0079.html new file mode 100644 index 000000000..5d8733fb7 --- /dev/null +++ b/docs/css/api-ref/css_03_0079.html @@ -0,0 +1,145 @@ + + +

Querying All Tags

+

Function

This API is used to query all tags in a specified region.

+
+

URI

GET /v1.0/{project_id}/css-cluster/tags
+ +
+ + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request

None

+
+

Response

Table 2 describes the response parameters.

+ +
+ + + + + + + + + +
Table 2 Response parameters

Parameter

+

Type

+

Description

+

tags

+

Array of tag objects

+

Tags in a cluster. For details, see Table 3.

+
+
+ +
+ + + + + + + + + + + + + +
Table 3 tags field description

Parameter

+

Type

+

Description

+

key

+

String

+

Tag key.

+

values

+

Array of strings

+

Tag value.

+
+
+
+

Examples

Example request

+
GET v1.0/458d905f22da49c39f609e3347d65723/css-cluster/tags
+

Example response

+
{
+    "tags": [
+        {
+            "key": "key1",
+            "values": [
+                "value1",
+                "value2"
+            ]
+        },
+        {
+            "key": "key2",
+            "values": [
+                "value1",
+                "value2"
+            ]
+        }
+    ]
+}
+
+

Status Code

Table 4 describes the status code.

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Status code

Status Code

+

Message

+

Description

+

400

+

BadRequest

+

Invalid request.

+

The client should not repeat the request without modifications.

+

404

+

NotFound

+

The requested resource cannot be found.

+

The client should not repeat the request without modifications.

+

200

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0081.html b/docs/css/api-ref/css_03_0081.html new file mode 100644 index 000000000..e1fcc5862 --- /dev/null +++ b/docs/css/api-ref/css_03_0081.html @@ -0,0 +1,180 @@ + + +

Adding or Deleting Cluster Tags in Batches

+

Function

This API is used to add or delete tags to or from a specified cluster in batches. Tag Management Service (TMS) uses this API to batch manage tags of a cluster. A cluster can have a maximum of 10 tags.

+
  • This API is an idempotent API. If the request body contains duplicate keys during tag creation, an error is reported.
  • When a tag is added:
    • The key cannot be left blank or be an empty string. It cannot contain the following characters: Non-printable ASCII characters (0-31), =, *, <, >, \, ,, |, /, letters, digits, hyphens (-), and underscores (_).
    • The value cannot be left blank but can be an empty string. It cannot contain the following characters: Non-printable ASCII characters (0-31), =, *, <, >, \, ,, |, /, letters, digits, hyphens (-), and underscores (_).
    • The key cannot be duplicate. If the key already exists in the database, the value will be overwritten.
    +
  • When a tag is deleted:
    • If a to-be-deleted tag does not exist, the operation is considered successful by default. The value range of the tag character set is not verified.
    • The tag structure body cannot be missing, and the key cannot be left blank or be an empty string.
    +
+
+

+
+

URI

POST /v1.0/{project_id}/css-cluster/{cluster_id}/tags/action
+
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

cluster_id

+

Yes

+

String

+

IDs of clusters to which tags are to be added or deleted in batches

+
+
+

Request

+
+ + + + + + + + + + + + + + + + +
Table 2 Request parameters

Parameter

+

Mandatory

+

Type

+

Description

+

tags

+

No

+

Array of tag objects

+

Tag list

+

action

+

Yes

+

String

+

Operation to be performed. The value can be set to create or delete only.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 resource_tag field description

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

Yes

+

String

+

Tag key. The value can contain up to 36 characters.

+

value

+

This parameter is mandatory when action is set to create and optional when action is set to delete.

+

String

+

Tag value. The value contains up to 43 characters.

+

If value is not empty, delete tags by key/value. If value is empty, delete tags by key.

+
+
+
+

Response

None

+
+

Example

+
POST /v1.0/458d905f22da49c39f609e3347d65723/css-cluster/4f3deec3-efa8-4598-bf91-560aad1377a3/tags/action
+

This API is used to add tags in batches.

+
{
+    "action": "create",
+    "tags": [
+        {
+            "key": "key1",
+            "value": "value1"
+        }
+    ]
+}
+
+
This API is used to delete tags in batches.
{
+    "action": "delete",
+    "tags": [
+        {
+            "key": "key1"
+        }
+    ]
+}
+
+ +

Status Code

Table 4 describes status codes.

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Status code

Status Code

+

Encoding

+

Description

+

400

+

BadRequest

+

Invalid request.

+

Do not retry the request before modification.

+

404

+

NotFound

+

The requested resource cannot be found.

+

Do not retry the request before modification.

+

204

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0082.html b/docs/css/api-ref/css_03_0082.html new file mode 100644 index 000000000..782fa32c3 --- /dev/null +++ b/docs/css/api-ref/css_03_0082.html @@ -0,0 +1,102 @@ + + +

Deleting Specified Cluster Tags

+

Function

This API is used to delete specified cluster tags.

+
+

URI

DELETE /v1.0/{project_id}/css-cluster/{cluster_id}/tags/{key}
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

+

cluster_id

+

Yes

+

String

+

ID of the cluster to which a tag is to be deleted

+

key

+

Yes

+

String

+

Tag key

+

The field cannot be left blank or be an empty character string.

+
+
+
+

Request

None

+
+

Response

None

+
+

Example

+
+

Status Code

Table 2 describes status codes.

+ +
+ + + + + + + + + + + + + + + + + +
Table 2 Status code

Status Code

+

Encoding

+

Description

+

400

+

BadRequest

+

Invalid request.

+

Do not retry the request before modification.

+

404

+

NotFound

+

The requested resource cannot be found.

+

Do not retry the request before modification.

+

204

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/css_03_0083.html b/docs/css/api-ref/css_03_0083.html new file mode 100644 index 000000000..9870dfad4 --- /dev/null +++ b/docs/css/api-ref/css_03_0083.html @@ -0,0 +1,131 @@ + + +

Adding Tags to a Cluster

+

Function

This API is used to add tags to a cluster. A cluster can have a maximum of 10 tags.

+
+

URI

POST /v1.0/{project_id}/css-cluster/{cluster_id}/tags
+ +
+ + + + + + + + + + + + + + + + +
Table 1 Parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

+

cluster_id

+

Yes

+

String

+

ID of the cluster to which a tag is to be added

+
+
+
+

Request

+
+ + + + + + + + + + + + + + + + +
Table 2 tag field description

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

Yes

+

String

+

Tag key. The value can contain up to 36 characters.

+

value

+

Yes

+

String

+

Tag value. The value contains up to 43 characters.

+

If value is not empty, delete tags by key/value. If value is empty, delete tags by key.

+
+
+
+

Response

None

+
+

Example

+
+

Status Code

Table 3 describes status codes.

+ +
+ + + + + + + + + + + + + + + + + +
Table 3 Status code

Status Code

+

Encoding

+

Description

+

400

+

BadRequest

+

Invalid request.

+

Do not retry the request before modification.

+

404

+

NotFound

+

The requested resource cannot be found.

+

Do not retry the request before modification.

+

204

+

OK

+

The request is processed successfully.

+
+
+
+
+
+ +
+ diff --git a/docs/css/api-ref/en-us_image_0000001261293340.png b/docs/css/api-ref/en-us_image_0000001261293340.png new file mode 100644 index 000000000..82ae02d88 Binary files /dev/null and b/docs/css/api-ref/en-us_image_0000001261293340.png differ diff --git a/docs/css/api-ref/en-us_image_0000001265939134.png b/docs/css/api-ref/en-us_image_0000001265939134.png new file mode 100644 index 000000000..d4a37a976 Binary files /dev/null and b/docs/css/api-ref/en-us_image_0000001265939134.png differ diff --git a/docs/css/api-ref/iam_01_0023.html b/docs/css/api-ref/iam_01_0023.html new file mode 100644 index 000000000..40992d7b6 --- /dev/null +++ b/docs/css/api-ref/iam_01_0023.html @@ -0,0 +1,15 @@ + + +

Calling APIs

+
+
+ +
+ diff --git a/docs/css/api-ref/iam_02_0008.html b/docs/css/api-ref/iam_02_0008.html new file mode 100644 index 000000000..7d94b7954 --- /dev/null +++ b/docs/css/api-ref/iam_02_0008.html @@ -0,0 +1,96 @@ + + +

Making an API Request

+

This section describes the structure of a RESTful API request, and uses the API for Obtaining a User Token as an example to describe how to call an API. A token is a user's access credential, which contains the user identity and permission information. The obtained token is used to authenticate the calling of other APIs.

+

Request URI

A request URI is in the following format:

+

{URI-scheme}://{Endpoint}/{resource-path}?{query-string}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Request URL

Parameter

+

Description

+

URI-scheme

+

Protocol used to transmit requests. All APIs use HTTPS.

+

Endpoint

+

Domain name or IP address of the server running the REST service. The endpoint varies between services in different regions. It can be obtained from Endpoints.

+

resource-path

+

API access path for performing a specified operation. Obtain the value from the URI of the API. For example, the resource-path of the API for obtaining a user token is /v3/auth/tokens.

+

query-string

+

Query parameter, which is optional. Ensure that a question mark (?) is included before a query parameter that is in the format of "Parameter name=Parameter value". For example, limit=10 indicates that a maximum of 10 pieces of data is to be viewed.

+
+
+

+
For example, to obtain an IAM token in a region, obtain the endpoint of IAM for this region and the resource-path (/v3/auth/tokens) in the URI of the API used to obtain a user token. Then, construct the URI as follows:
https://<iam-endpoint>/v3/auth/tokens
+
+

To simplify the URI display, each API is provided with only a resource-path and a request method. This is because the URI-scheme value of all APIs is HTTPS, and the endpoints in a region are the same. Therefore, the two parts are omitted.

+
+
+

Request Methods

HTTP-based request methods, which are also called operations or actions, specify the type of operations that you are requesting.

+ +

If POST is displayed in the URI of the API for obtaining a user token, the request is as follows:

+
+POST https://{iam-endpoint}/v3/auth/tokens
+
+

Request Header

You can also add additional fields to a request, such as the fields required by a specified URI or an HTTP method. For example, add Content-Type that defines a request body type to request for the authentication information.

+

Common request headers are as follows:

+ +

The API used to obtain a user token does not require authentication. Therefore, only the Content-Type field needs to be added to requests for calling the API. An example of such requests is as follows:

+
POST https://{iam-endpoint}/v3/auth/tokens
+Content-Type: application/json
+
+

Request Body

A request body conveys information other than the request header and is generally sent in a structured format defined by the request header field Content-Type.

+

The request body varies according to the APIs. Certain APIs do not require the request body, such as the GET and DELETE APIs.

+

In the case of the API used to obtain a user token, the request parameters and parameter description can be obtained from the API request. The following provides an example request with a body included. Replace username, domainname, ******** (login password), and xxxxxxxxxxxxxxxxxx (project ID) with the actual values. To learn how to obtain a project ID, see Obtaining a Project ID and Name.

+

The scope parameter defines the application scope of the token, indicating that the obtained token can access only the resources in the specified project.

+
+
POST https://{iam-endpoint}/v3/auth/tokens
+Content-Type: application/json
+{
+    "auth": {
+        "identity": {
+            "methods": [
+                "password"
+            ],
+            "password": {
+                "user": {
+                    "name": "username",    //Username
+                    "password": "********",    //Login password
+                    "domain": {
+                        "name": "domainname "    //Name of the account to which the user belongs
+                    }
+                }
+            }
+        },
+        "scope": {
+            "project": {
+                "id": "xxxxxxxxxxxxxxxxxx"    //Project ID
+            }
+        }
+    }
+}
+

If all data required by a request is available, you can send the request to call an API through curl, Postman, or coding. For the API of obtaining a user token, x-subject-token in the response header is the desired user token. Then, you can use the token to authenticate the calling of other APIs.

+
+
+
+ +
+ diff --git a/docs/css/api-ref/iam_02_0510.html b/docs/css/api-ref/iam_02_0510.html new file mode 100644 index 000000000..d0ba91b40 --- /dev/null +++ b/docs/css/api-ref/iam_02_0510.html @@ -0,0 +1,43 @@ + + +

Authentication

+

CSS supports token authentication.

+

Authentication Using Tokens

The validity period of a token is 24 hours. When using a token for authentication, cache it to prevent frequently calling the IAM API.

+
+

A token specifies certain permissions in a computer system. Authentication using a token adds the token to a request as its header during API calling to obtain permissions to operate APIs through IAM.

+

The API for obtaining a token is POST https://{IAM endpoint}/v3/auth/tokens. For details about how to obtain IAM endpoints, see Endpoints.

+
{
+	"auth": {
+		"identity": {
+			"methods": [
+				"password"
+			],
+			"password": {
+				"user": {
+					"name": "username",    //Username
+					"password": "********",    //Login password
+					"domain": {
+						"name": "domainname"    //Name of the account that the user belongs to
+					}
+				}
+			}
+		},
+		"scope": {
+			"project": {
+				"name": "xxxxxxxx"    //Project name
+			}
+		}
+	}
+}
+

After a token is obtained, the X-Auth-Token header field must be added to requests to specify the token when calling other APIs. For example, if the token is ABCDEFJ...., X-Auth-Token: ABCDEFJ.... can be added to a request as follows:

+
POST https://{endpoint}/v3/auth/projects
+Content-Type: application/json
+X-Auth-Token: ABCDEFJ....
+
+
+
+ +
+ diff --git a/docs/css/api-ref/iam_02_0511.html b/docs/css/api-ref/iam_02_0511.html new file mode 100644 index 000000000..1a8512d58 --- /dev/null +++ b/docs/css/api-ref/iam_02_0511.html @@ -0,0 +1,46 @@ + + +

Returned Values

+

Status Code

After sending a request, you will receive a response containing the status code, response header, and response body.

+

A status code is a group of digits, ranging from 1xx to 5xx. It indicates the status of a request. For more information, see Status Code.

+

If status code 201 is returned for the calling of the API for obtaining a user token, the request is successful.

+
+

Response Header

A response header corresponds to a request header, for example, Content-Type.

+

Figure 1 shows the response header for the API of obtaining a user token, where x-subject-token is the desired user token. Then, you can use the token to authenticate the calling of other APIs.

+
Figure 1 Header of the response to the request for obtaining a user token
+
+

Response Body

A response body is generally returned in a structured format, corresponding to the Content-Type in the response header, and is used to transfer content other than the response header.

+

The following shows part of the response body for the API of obtaining a user token.

+
{
+    "token": {
+        "expires_at": "2019-02-13T06:52:13.855000Z",
+        "methods": [
+            "password"
+        ],
+        "catalog": [
+            {
+                "endpoints": [
+                    {
+                        "region_id": "xxx",
+......
+

If an error occurs during API calling, the system returns an error code and a message to you. The following shows the format of an error response body:

+
{
+    "error_msg": "The format of message is error",
+    "error_code": "AS.0001"
+}
+

In the preceding information, error_code is an error code, and error_msg describes the error.

+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/ExpandCollapse.js b/docs/css/api-ref/public_sys-resources/ExpandCollapse.js new file mode 100644 index 000000000..3f1b7db00 --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/ExpandCollapse.js @@ -0,0 +1 @@ +var expandClassName="dropdownexpand";var collapseClassName="dropdowncollapse";var collapseTableClassName="dropdowncollapsetable";var href="";function ExpandorCollapseNode(a){a=a.parentNode;if(a.className==expandClassName){a.className=collapseClassName}else{a.className=expandClassName}}function ExpandorCollapseTableNode(a){a=a.parentNode;if(a.className==expandClassName){a.className=collapseTableClassName}else{a.className=expandClassName}}function ExpandorCollapseAllNodes(g,h,c){var a=g.getAttribute("title");var b=g.parentNode;if(a=="collapse"){g.setAttribute("title","expand");g.className="dropdownAllButtonexpand";g.innerHTML=h}else{g.setAttribute("title","collapse");g.className="dropdownAllButtoncollapse";g.innerHTML=c}var f=b.getElementsByTagName("*");for(var d=0;d-1){ExpandForHref(href.substring(href.lastIndexOf("#")+1))}}catch(a){}}; \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/caution_3.0-en-us.png b/docs/css/api-ref/public_sys-resources/caution_3.0-en-us.png new file mode 100644 index 000000000..60f607621 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/caution_3.0-en-us.png differ diff --git a/docs/css/api-ref/public_sys-resources/commonltr.css b/docs/css/api-ref/public_sys-resources/commonltr.css new file mode 100644 index 000000000..c5480b0ab --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/commonltr.css @@ -0,0 +1 @@ +body{font-size:10pt;font-family:Arial;margin:1.5em;border-top:2pt;padding-top:1em;padding-bottom:2em}.msgph{font-family:Courier New}.rowlinecopyright{color:red;margin-top:10pt}.unresolved{background-color:skyblue}.noTemplate{background-color:yellow}.base{background-color:#fff}.nested0{margin-top:1em}.p{margin-top:.6em;margin-bottom:.6em}p{margin-top:.5em;margin-bottom:.5em}.note p{margin-top:.5em;margin-bottom:.5em}.tip p{margin-top:.5em;margin-bottom:.5em}.danger p{margin-top:.5em;margin-bottom:.5em}.notice p{margin-top:.5em;margin-bottom:.5em}.warning p{margin-top:.5em;margin-bottom:.5em}.caution p{margin-top:.5em;margin-bottom:.5em}.attention p{margin-top:.5em;margin-bottom:.5em}table p{margin-top:.2em;margin-bottom:.2em}table .p{margin-top:.4em;margin-bottom:.2em}.figcap{font-size:10pt}img{margin-top:.3em}.figdesc{font-style:normal}.figborder{border-style:solid;padding-left:3px;border-width:2px;padding-right:3px;margin-top:1em;border-color:Silver}.figsides{border-left:2px solid;padding-left:3px;border-right:2px solid;padding-right:3px;margin-top:1em;border-color:Silver}.figtop{border-top:2px solid;margin-top:1em;border-color:Silver}.figbottom{border-bottom:2px solid;border-color:Silver}.figtopbot{border-top:2px solid;border-bottom:2px solid;margin-top:1em;border-color:Silver}.fignone{font-size:10pt;margin-top:8pt;margin-bottom:8pt}.familylinks{margin-top:1.5em;margin-bottom:1em}.ullinks{list-style-type:none}.linklist{margin-bottom:1em}.linklistwithchild{margin-left:1.5em;margin-bottom:1em}.sublinklist{margin-left:1.5em;margin-bottom:1em}.relconcepts{margin-top:.6em;margin-bottom:.6em}.reltasks{margin-top:.6em;margin-bottom:.6em}.relref{margin-top:.6em;margin-bottom:.6em}.relinfo{margin-top:.6em;margin-bottom:.6em}.breadcrumb{font-size:smaller;margin-bottom:.6em}.prereq{margin-left:20px}.parentlink{margin-top:.6em;margin-bottom:.6em}.nextlink{margin-top:.6em;margin-bottom:.6em}.previouslink{margin-top:.6em;margin-bottom:.6em}.topictitle1{margin-top:0;margin-bottom:1em;font-size:14pt;color:#007af4}.topictitle2{margin-top:1pc;margin-bottom:.45em;font-size:1.17em;color:#007af4}.topictitle3{margin-top:1pc;margin-bottom:.17em;font-size:1.17em;font-weight:bold;color:#007af4}.topictitle4{margin-top:.83em;font-size:1.17em;font-weight:bold}.topictitle5{font-size:1.17em;font-weight:bold}.topictitle6{font-size:1.17em;font-style:italic}.sectiontitle{margin-top:1em;margin-bottom:1em;color:black;font-size:10.5pt;font-weight:bold;color:#007af4;overflow:auto}.section{margin-top:1em;margin-bottom:1em}.example{margin-top:1em;margin-bottom:1em}.sectiontitle2contents:link{color:#007af4}.sectiontitle2contents:visited{color:#800080}.note{margin-top:1em;margin-bottom:1em;background-color:#ffc}.notetitle{font-weight:bold}.notelisttitle{font-weight:bold}.tip{margin-top:1em;margin-bottom:1em;background-color:#ffc}.tiptitle{font-weight:bold}.fastpath{margin-top:1em;margin-bottom:1em;background-color:#ffc}.fastpathtitle{font-weight:bold}.important{margin-top:1em;margin-bottom:1em;background-color:#ffc}.importanttitle{font-weight:bold}.remember{margin-top:1em;margin-bottom:1em;background-color:#ffc}.remembertitle{font-weight:bold}.restriction{margin-top:1em;margin-bottom:1em;background-color:#ffc}.restrictiontitle{font-weight:bold}.attention{margin-top:1em;margin-bottom:1em;background-color:#ffc}.attentiontitle{font-weight:bold}.dangertitle{font-weight:bold}.danger{margin-top:1em;margin-bottom:1em;background-color:#ffc}.noticetitle{font-weight:bold}.notice{margin-top:1em;margin-bottom:1em;background-color:#ffc}.warningtitle{font-weight:bold}.warning{margin-top:1em;margin-bottom:1em;background-color:#ffc}.cautiontitle{font-weight:bold}.caution{margin-top:1em;margin-bottom:1em;background-color:#ffc}ul.simple{list-style-type:none}li ul{margin-top:.6em}li{margin-top:.6em;margin-bottom:.6em}.note li{margin-top:.2em;margin-bottom:.2em}.tip li{margin-top:.2em;margin-bottom:.2em}.danger li{margin-top:.2em;margin-bottom:.2em}.warning li{margin-top:.2em;margin-bottom:.2em}.notice li{margin-top:.2em;margin-bottom:.2em}.caution li{margin-top:.2em;margin-bottom:.2em}.attention li{margin-top:.2em;margin-bottom:.2em}table li{margin-top:.2em;margin-bottom:.2em}ol{margin-top:1em;margin-bottom:1em;margin-left:2.4em;padding-left:0}ul{margin-top:1em;margin-bottom:1em;margin-left:2.0em;padding-left:0}ol ul{list-style:disc}ul ul{list-style:square}ol ul ul{list-style:square}ol ul{list-style-type:disc}table ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}table ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ul{margin-top:.4em;margin-bottom:.4em;list-style:square}table ol ol{margin-top:.4em;margin-bottom:.4em;list-style:lower-alpha}table ol ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}.substepthirdol{list-style-type:lower-roman}.firstcol{font-weight:bold}th{background-color:#cfcfcf}table{margin-top:8pt;margin-bottom:12pt;width:100%}table caption{margin-top:8pt;text-align:left}.bold{font-weight:bold}.boldItalic{font-weight:bold;font-style:italic}.italic{font-style:italic}.underlined{text-decoration:underline}.var{font-style:italic}.shortcut{text-decoration:underline}.dlterm{font-weight:bold}dd{margin-top:.5em;margin-bottom:.5em}.dltermexpand{font-weight:bold;margin-top:1em}*[compact="yes"]>li{margin-top:0}*[compact="no"]>li{margin-top:.53em}.liexpand{margin-top:1em;margin-bottom:1em}.sliexpand{margin-top:1em;margin-bottom:1em}.dlexpand{margin-top:1em;margin-bottom:1em}.ddexpand{margin-top:1em;margin-bottom:1em}.stepexpand{margin-top:.3em;margin-bottom:.3em}.substepexpand{margin-top:.3em;margin-bottom:.3em}div.imageleft{text-align:left}div.imagecenter{text-align:center}div.imageright{text-align:right}div.imagejustify{text-align:justify}div.noblankline{text-align:center}div.noblankline img{margin-top:0}pre.screen{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;background-color:#ddd;white-space:pre}pre.codeblock{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;background-color:#ddd;white-space:pre}.hrcopyright{color:#3f4e5d;margin-top:18pt}.hwcopyright{text-align:center}.comment{margin:2px 2px 2px 2px;font-family:Arial;font-size:10pt;background-color:#bfb;color:#000}.dropdownAllButtonexpand{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdownAllButtoncollapse{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;text-decoration:underline;color:#007af4}.dropdowntitle{background-repeat:no-repeat;background-position:0 4px;padding-left:15px;cursor:pointer;text-decoration:underline;color:#007af4}.dropdownexpand .dropdowntitle{background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapse .dropdowncontext{display:none}.dropdowncollapse .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdowncollapsetable{border:0}.dropdowncollapsetable .dropdowncontext{display:none}.dropdowncollapsetable .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}pre{font-size:10pt;font-weight:normal;margin-left:9;margin-top:2;margin-bottom:2}.termcolor{color:blue;cursor:pointer}#dhtmlgoodies_tooltip{background-color:#f0f0d2;border:1px solid #000;position:absolute;display:none;z-index:20000;padding:2px;font-size:.9em;-moz-border-radius:6px;font-family:"Trebuchet MS","Lucida Sans Unicode",Arial,sans-serif}#dhtmlgoodies_tooltipShadow{position:absolute;background-color:#555;display:none;z-index:10000;opacity:.7;filter:alpha(opacity=70);-khtml-opacity:.7;-moz-opacity:.7;-moz-border-radius:6px}.freeze{position:fixed;_position:absolute;_top:expression(eval(document.documentElement.scrollTop));left:10;top:0} \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/commonltr_print.css b/docs/css/api-ref/public_sys-resources/commonltr_print.css new file mode 100644 index 000000000..a59823141 --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/commonltr_print.css @@ -0,0 +1 @@ +body{font-size:12.0pt;margin:1.5em;margin-left:1.6cm}.msgph{font-family:Courier New}.rowlinecopyright{color:red;margin-top:10pt}.unresolved{background-color:skyblue}.noTemplate{background-color:yellow}.base{background-color:#fff}.nested0{margin-top:1em}.p{margin-top:1em}p{margin-top:.5em;margin-bottom:.5em}.note p{margin-top:.5em;margin-bottom:.5em}.tip p{margin-top:.5em;margin-bottom:.5em}.danger p{margin-top:.5em;margin-bottom:.5em}.warning p{margin-top:.5em;margin-bottom:.5em}.notice p{margin-top:.5em;margin-bottom:.5em}.caution p{margin-top:.5em;margin-bottom:.5em}.attention p{margin-top:.5em;margin-bottom:.5em}table p{margin-top:.2em;margin-bottom:.2em}table .p{margin-top:.4em;margin-bottom:.2em}.covertable{border:0;width:100% cellpadding:8pt;cellspacing:8pt}.cover_productname{font-size:15.0pt;font-family:"Arial"}.cover_manualtitle{font-size:24.0pt;font-weight:bold;font-family:"Arial"}.cover_manualsubtitle{font-size:18.0pt;font-weight:bold;font-family:"Arial"}.cover_heading{font-size:12.0pt;font-weight:bold;font-family:"Arial"}.cover_text{font-size:9.0pt;font-family:"Arial"}.tocheading,.heading1,.topictitle1{margin-top:40.0pt;margin-right:0;margin-bottom:20.0pt;margin-left:-1cm;text-align:left;border:0;border-bottom:solid windowtext .5pt;font-size:22.0pt;font-family:"Arial";font-weight:bold}.topictitlenumber1{font-size:72.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle2{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:-1cm;text-indent:0;font-size:18.0pt;font-family:"Arial";font-weight:bold}.topictitle3{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:16.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle4{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:14.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle5{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.blocklabel,.topictitle6{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.sectiontitle{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:-1cm;text-indent:0;font-size:13.0pt;font-family:"Arial";font-weight:bold}.tocentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:12.0pt;font-family:"Book Antiqua";font-weight:bold}.tocentry2{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry3{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry4{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry5{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tofentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman";font-weight:normal}.totentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman";font-weight:normal}.indexheading{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.indexentry1{margin-top:4pt;margin-right:0;margin-bottom:0;margin-left:0;line-height:12.0pt;font-size:12.0pt;font-family:"Times New Roman"}.indexentry2{margin-top:0;margin-right:0;margin-bottom:0;margin-left:24.0pt;line-height:12.0pt;font-size:12.0pt}.indexentry3{margin-top:0;margin-right:0;margin-bottom:0;margin-left:48pt;line-height:12.0pt;font-size:12.0pt}.figurenumber{font-weight:bold}.tablenumber{font-weight:bold}.familylinks{margin-top:1.5em;margin-bottom:1em}.figcap{font-size:11.0pt}.tablecap{font-size:11.0pt}.figdesc{font-style:normal}.fignone{margin-top:8.0pt}.figborder{border-style:solid;padding-left:3px;border-width:2px;padding-right:3px;margin-top:1em;border-color:Silver}.figsides{border-left:2px solid;padding-left:3px;border-right:2px solid;padding-right:3px;margin-top:1em;border-color:Silver}.figtop{border-top:2px solid;margin-top:1em;border-color:Silver}.figbottom{border-bottom:2px solid;border-color:Silver}.figtopbot{border-top:2px solid;border-bottom:2px solid;margin-top:1em;border-color:Silver}.ullinks{margin-left:0;list-style-type:none}.ulchildlink{margin-top:1em;margin-bottom:1em}.olchildlink{margin-top:1em;margin-bottom:1em;margin-left:1em}.linklist{margin-bottom:1em}.linklistwithchild{margin-left:1.5em;margin-bottom:1em}.sublinklist{margin-left:1.5em;margin-bottom:1em}.relconcepts{margin-left:1cm;margin-top:1em;margin-bottom:1em}.reltasks{margin-left:1cm;margin-top:1em;margin-bottom:1em}.relref{margin-left:1cm;margin-top:1em;margin-bottom:1em}.relinfo{margin-top:1em;margin-bottom:1em}.breadcrumb{font-size:smaller;margin-bottom:1em}.prereq{margin-left:0}.parentlink{margin-top:.6em;margin-bottom:.6em}.nextlink{margin-top:.6em;margin-bottom:.6em}.previouslink{margin-top:.6em;margin-bottom:.6em}.section{margin-top:1em;margin-bottom:1em}.example{margin-top:1em;margin-bottom:1em}table .note{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.note{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.notetitle{font-weight:bold;font-size:11.0pt}.notelisttitle{font-weight:bold}table .tip{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.tip{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.tiptitle{font-weight:bold;font-size:11.0pt}table .fastpath{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.fastpath{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.fastpathtitle{font-weight:bold;font-size:11.0pt}table .important{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.important{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.importanttitle{font-weight:bold;font-size:11.0pt}table .remember{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.remember{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.remembertitle{font-weight:bold;font-size:11.0pt}table .restriction{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.restriction{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.restrictiontitle{font-weight:bold;font-size:11.0pt}table .attention{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.attention{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}.attentiontitle{font-weight:bold}table .danger{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.dangertitle{font-weight:bold}.danger{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .notice{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.noticetitle{font-weight:bold}.notice{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .warning{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.warningtitle{font-weight:bold}.warning{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .caution{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}table caption{margin-top:8pt;text-align:left;font-weight:bold}.tablenoborder{margin-top:8pt}.cautiontitle{font-weight:bold}.caution{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}ul.simple{list-style-type:none}li ul{margin-top:.6em}li{margin-top:.6em;margin-bottom:.6em}.note li{margin-top:.2em;margin-bottom:.2em}.tip li{margin-top:.2em;margin-bottom:.2em}.danger li{margin-top:.2em;margin-bottom:.2em}.warning li{margin-top:.2em;margin-bottom:.2em}.notice li{margin-top:.2em;margin-bottom:.2em}.caution li{margin-top:.2em;margin-bottom:.2em}.attention li{margin-top:.2em;margin-bottom:.2em}table li{margin-top:.2em;margin-bottom:.2em}.firstcol{font-weight:bold}th{background-color:#cfcfcf}.bold{font-weight:bold}.boldItalic{font-weight:bold;font-style:italic}.italic{font-style:italic}.underlined{text-decoration:underline}.var{font-style:italic}.shortcut{text-decoration:underline}.dlterm{font-weight:bold}dd{margin-top:.5em;margin-bottom:.5em}.dltermexpand{font-weight:bold;margin-top:1em}*[compact="yes"]>li{margin-top:0}*[compact="no"]>li{margin-top:.53em}.liexpand{margin-top:1em;margin-bottom:1em}.sliexpand{margin-top:1em;margin-bottom:1em}.dlexpand{margin-top:1em;margin-bottom:1em}.ddexpand{margin-top:1em;margin-bottom:1em}.stepexpand{margin-top:1em;margin-bottom:1em}.substepexpand{margin-top:1em;margin-bottom:1em}table{margin-top:8pt;margin-bottom:10.0pt;width:100%}thead{font-size:10.0pt;font-family:"Book Antiqua";font-weight:bold}tbody{font-size:11.0pt}ol{margin-top:1em;margin-bottom:1em;margin-left:1.7em;-webkit-padding-start:0}ul{margin-top:1em;margin-bottom:1em;margin-left:1.2em;-webkit-padding-start:0}ol ul{list-style:disc}ul ul{list-style:square}ol ol{list-style-type:lower-alpha}table ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}table ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ul{margin-top:.4em;margin-bottom:.4em;list-style:square}table ol ol{margin-top:.4em;margin-bottom:.4em;list-style:lower-alpha}table ol ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}.substepthirdol{list-style-type:lower-roman}div.imageleft{text-align:left}div.imagecenter{text-align:center}div.imageright{text-align:right}div.imagejustify{text-align:justify}div.noblankline{text-align:center}div.noblankline img{margin-top:0}pre{font-size:10.0pt;border-width:2px;padding:2px;margin-top:5px;margin-bottom:5px;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}pre.screen{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;white-space:pre}pre.codeblock{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;white-space:pre}.dropdownAllButtonexpand{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdownAllButtoncollapse{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;text-decoration:underline;color:#007af4}.dropdowntitle{background-repeat:no-repeat;background-position:0 4px;padding-left:15px;cursor:pointer;text-decoration:underline;color:#007af4}.dropdownexpand .dropdowntitle{background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapse .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapsetable .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.prefacesectiontitle1{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:-1cm;text-indent:0;font-size:18.0pt;font-family:"Book Antiqua";font-weight:bold;overflow:auto}.termcolor{color:blue;cursor:pointer}#dhtmlgoodies_tooltip{background-color:#f0f0d2;border:1px solid #000;position:absolute;display:none;z-index:20000;padding:2px;font-size:.9em;-moz-border-radius:6px;font-family:"Trebuchet MS","Lucida Sans Unicode",Arial,sans-serif}#dhtmlgoodies_tooltipShadow{position:absolute;background-color:#555;display:none;z-index:10000;opacity:.7;filter:alpha(opacity=70);-khtml-opacity:.7;-moz-opacity:.7;-moz-border-radius:6px}.freeze{position:fixed;_position:absolute;_top:expression(eval(document.documentElement.scrollTop));left:10;top:0}.hrcopyright{color:#3f4e5d;margin-top:18pt;margin-left:-1cm}.hwcopyright{text-align:center;font-family:Arial;margin-left:-1cm} \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/commonrtl.css b/docs/css/api-ref/public_sys-resources/commonrtl.css new file mode 100644 index 000000000..f261da752 --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/commonrtl.css @@ -0,0 +1,2 @@ +/*! Copyright (c) Huawei Technologies Co., Ltd. 2020-2022. All rights reserved. */.msgph{font-family:Courier New}.unresolved{background-color:#87ceeb}.noTemplate{background-color:#ff0}.base{background-color:#fff}/*! Add space for top level topics */.nested0,.p{margin-top:1em}/*! div with class=p is used for paragraphs that contain blocks, to keep the XHTML valid *//*! Default of italics to set apart figure captions */.figcap,.italic,.var{font-style:italic}.figdesc{font-style:normal}/*! Use @frame to create frames on figures */.figborder{padding-left:3px;padding-right:3px;margin-top:1em;border:2px solid Silver}.figsides{margin-top:1em;padding-left:3px;padding-right:3px;border-left:2px solid Silver;border-right:2px solid Silver}.figtop{border-top:2px solid Silver;margin-top:1em}.figbottom{border-bottom:2px solid Silver}.figtopbot{border-top:2px solid Silver;border-bottom:2px solid Silver;margin-top:1em}/*! Most link groups are created with
. Ensure they have space before and after. */.ullinks,ul.simple{list-style-type:none}.attention,.danger,.ddexpand,.dlexpand,.example,.fastpath,.important,.liexpand,.linklist,.note,.notice,.olchildlink,.relconcepts,.relinfo,.relref,.reltasks,.remember,.restriction,.section,.sliexpand,.stepexpand,.substepexpand,.tip,.ulchildlink,.warning{margin-top:1em;margin-bottom:1em}.linklistwithchild,.sublinklist{margin-top:1em;margin-right:1.5em;margin-bottom:1em}.breadcrumb{font-size:smaller;margin-bottom:1em}.prereq{margin-right:20px}/*! Set heading sizes, getting smaller for deeper nesting */.topictitle1{font-size:1.34em;margin-top:0;margin-bottom:.1em}.topictitle2,.topictitle3,.topictitle4,.topictitle5,.topictitle6,.sectiontitle{font-size:1.17em}.topictitle2{margin-top:1pc;margin-bottom:.45em}.topictitle3{margin-top:1pc;margin-bottom:.17em;font-weight:700}.topictitle4{margin-top:.83em;font-weight:700}.topictitle5{font-weight:700}.topictitle6{font-style:italic}.sectiontitle{margin-top:1em;margin-bottom:0;color:#000;font-weight:700}/*! All note formats have the same default presentation */.attentiontitle,.bold,.cautiontitle,.dangertitle,.dlterm,.fastpathtitle,.firstcol,.importanttitle,.notelisttitle,.notetitle,.noticetitle,.parmname,.remembertitle,.restrictiontitle,.tiptitle,.uicontrol,.warningtitle{font-weight:700}.caution{font-weight:700;margin-bottom:1em}/*! Simple lists do not get a bullet *//*! Used on the first column of a table, when rowheader="firstcol" is used *//*! Various basic phrase styles */.boldItalic{font-weight:700;font-style:italic}.shortcut,.underlined{text-decoration:underline}/*! 2008-10-27 keyword采用跟随上下文的样式 +*//*! Default of bold for definition list terms *//*! Use CSS to expand lists with @compact="no" */.dltermexpand{font-weight:700;margin-top:1em}[compact="yes"]>li{margin-top:0}[compact="no"]>li{margin-top:.53em}/*! Align images based on @align on topic/image */div.imageleft,.text-align-left{text-align:left}div.imagecenter,.text-align-center{text-align:center}div.imageright,.text-align-right{text-align:right}div.imagejustify,.text-align-justify{text-align:justify}.cellrowborder{border-right:0;border-top:0;border-left:1px solid;border-bottom:1px solid}.row-nocellborder{border-left:hidden;border-right:0;border-top:0;border-bottom:1px solid}.cell-norowborder{border-top:0;border-bottom:hidden;border-right:0;border-left:1px solid}.nocellnorowborder{border:0;border-left:hidden;border-bottom:hidden}pre.codeblock,pre.screen{padding:5px;border:outset;background-color:#ccc;margin-top:2px;margin-bottom:2px;white-space:pre} \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/danger_3.0-en-us.png b/docs/css/api-ref/public_sys-resources/danger_3.0-en-us.png new file mode 100644 index 000000000..47a9c7235 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/danger_3.0-en-us.png differ diff --git a/docs/css/api-ref/public_sys-resources/delta.gif b/docs/css/api-ref/public_sys-resources/delta.gif new file mode 100644 index 000000000..0d1b1f674 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/delta.gif differ diff --git a/docs/css/api-ref/public_sys-resources/deltaend.gif b/docs/css/api-ref/public_sys-resources/deltaend.gif new file mode 100644 index 000000000..cc7da0fc8 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/deltaend.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-arrowdn.gif b/docs/css/api-ref/public_sys-resources/icon-arrowdn.gif new file mode 100644 index 000000000..84eec9be2 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-arrowdn.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-arrowrt.gif b/docs/css/api-ref/public_sys-resources/icon-arrowrt.gif new file mode 100644 index 000000000..39583d168 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-arrowrt.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-caution.gif b/docs/css/api-ref/public_sys-resources/icon-caution.gif new file mode 100644 index 000000000..079c79b26 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-caution.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-danger.gif b/docs/css/api-ref/public_sys-resources/icon-danger.gif new file mode 100644 index 000000000..079c79b26 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-danger.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-huawei.gif b/docs/css/api-ref/public_sys-resources/icon-huawei.gif new file mode 100644 index 000000000..a31d60f89 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-huawei.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-note.gif b/docs/css/api-ref/public_sys-resources/icon-note.gif new file mode 100644 index 000000000..31be2b039 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-note.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-notice.gif b/docs/css/api-ref/public_sys-resources/icon-notice.gif new file mode 100644 index 000000000..409070650 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-notice.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-tip.gif b/docs/css/api-ref/public_sys-resources/icon-tip.gif new file mode 100644 index 000000000..c47bae05c Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-tip.gif differ diff --git a/docs/css/api-ref/public_sys-resources/icon-warning.gif b/docs/css/api-ref/public_sys-resources/icon-warning.gif new file mode 100644 index 000000000..079c79b26 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/icon-warning.gif differ diff --git a/docs/css/api-ref/public_sys-resources/imageResize.js b/docs/css/api-ref/public_sys-resources/imageResize.js new file mode 100644 index 000000000..37309ce3b --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/imageResize.js @@ -0,0 +1,18 @@ +/** IDP renames $ to $$$,jQueryHW2 */ +var $$$, jQueryHW2; +jQueryHW2 = $$$ = $; + +function image_size(a) { + $$$(window).on('load', function () { + $$$(a).each(function () { + var e = $$$(this); + var f = e.width(); + var d = e.height(); + var b = f; + var c = d; + e.click(function () { + tb_show("", this.src, false) + }) + }) + }) +}; \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/imageclose.gif b/docs/css/api-ref/public_sys-resources/imageclose.gif new file mode 100644 index 000000000..56818c26b Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/imageclose.gif differ diff --git a/docs/css/api-ref/public_sys-resources/imageclosehover.gif b/docs/css/api-ref/public_sys-resources/imageclosehover.gif new file mode 100644 index 000000000..3bcf231f1 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/imageclosehover.gif differ diff --git a/docs/css/api-ref/public_sys-resources/imagemax.gif b/docs/css/api-ref/public_sys-resources/imagemax.gif new file mode 100644 index 000000000..49fe390b1 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/imagemax.gif differ diff --git a/docs/css/api-ref/public_sys-resources/imagemaxhover.gif b/docs/css/api-ref/public_sys-resources/imagemaxhover.gif new file mode 100644 index 000000000..387b0a981 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/imagemaxhover.gif differ diff --git a/docs/css/api-ref/public_sys-resources/jquery-migrate-1.2.1.min.js b/docs/css/api-ref/public_sys-resources/jquery-migrate-1.2.1.min.js new file mode 100644 index 000000000..88f4844bf --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/jquery-migrate-1.2.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */ +jQueryHW2.migrateMute===void 0&&(jQueryHW2.migrateMute=!0),function(e,t,n){function r(n){}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute,e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQueryHW2 is not compatible with Quirks Mode");var o=e("",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQueryHW2.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQueryHW2.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQueryHW2.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQueryHW2.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQueryHW2.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQueryHW2.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQueryHW2.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQueryHW2.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQueryHW2.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQueryHW2.fn.andSelf() replaced by jQueryHW2.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQueryHW2.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQueryHW2.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQueryHW2.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQueryHW2.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQueryHW2.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQueryHW2.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQueryHW2,window); \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/jquery-ui.min.js b/docs/css/api-ref/public_sys-resources/jquery-ui.min.js new file mode 100644 index 000000000..5a2c95bdd --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/jquery-ui.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.13.0 - 2021-10-07 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.0";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0")[0],w=d.each;function P(t){return null==t?t+"":"object"==typeof t?p[e.call(t)]||"object":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText="background-color:rgba(1,1,1,.5)",b.rgba=-1o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=d.map(this._rgba,function(t,e){return null!=t?t:2").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.0",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,e="vertical"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(j+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(o,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,r="show"===o,l=t.direction||"up",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p="up"===l||"down"===l?"top":"left",f="up"===l||"left"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n["top"==p?"outerHeight":"outerWidth"]()/3,r&&((s={opacity:1})[p]=l,n.css("opacity",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,o="hide"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V(""),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(i=i.children(".ui-accordion-header-icon"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(n=s.children(".ui-accordion-header-icon"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("
    ").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){V(t.target).trigger(t.originalEvent)});i=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:i})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(i.value),(i=e.item.attr("aria-label")||i.value)&&String.prototype.trim.call(i).length&&(this.liveRegion.children().hide(),V("
    ").text(i).appendTo(this.liveRegion))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==V.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=V("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||V.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(V.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=V.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(V("
    ").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),V.extend(V.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(V.ui.autocomplete.escapeRegex(e),"i");return V.grep(t,function(t){return i.test(t.label||t.value||t)})}}),V.widget("ui.autocomplete",V.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(t).appendTo(this.liveRegion))}});V.ui.autocomplete;var tt=/ui-corner-([a-z]){2,6}/g;V.widget("ui.controlgroup",{version:"1.13.0",defaultElement:"
    ",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var o=this,a=[];V.each(this.options.items,function(s,t){var e,n={};if(t)return"controlgroupLabel"===s?((e=o.element.find(t)).each(function(){var t=V(this);t.children(".ui-controlgroup-label-contents").length||t.contents().wrapAll("")}),o._addClass(e,null,"ui-widget ui-widget-content ui-state-default"),void(a=a.concat(e.get()))):void(V.fn[s]&&(n=o["_"+s+"Options"]?o["_"+s+"Options"]("middle"):{classes:{}},o.element.find(t).each(function(){var t=V(this),e=t[s]("instance"),i=V.widget.extend({},n);"button"===s&&t.parent(".ui-spinner").length||((e=e||t[s]()[s]("instance"))&&(i.classes=o._resolveClassesValues(i.classes,e)),t[s](i),i=t[s]("widget"),V.data(i[0],"ui-controlgroup-data",e||t[s]("instance")),a.push(i[0]))})))}),this.childWidgets=V(V.uniqueSort(a)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=V(this).data("ui-controlgroup-data");t&&t[e]&&t[e]()})},_updateCornerClass:function(t,e){e=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,e)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){t=this._buildSimpleOptions(t,"ui-spinner");return t.classes["ui-spinner-up"]="",t.classes["ui-spinner-down"]="",t},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(i,s){var n={};return V.each(i,function(t){var e=s.options.classes[t]||"",e=String.prototype.trim.call(e.replace(tt,""));n[t]=(e+" "+i[t]).replace(/\s+/g," ")}),n},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var n,o=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),n=this.childWidgets,(n=this.options.onlyVisible?n.filter(":visible"):n).length&&(V.each(["first","last"],function(t,e){var i,s=n[e]().data("ui-controlgroup-data");s&&o["_"+s.widgetName+"Options"]?((i=o["_"+s.widgetName+"Options"](1===n.length?"only":e)).classes=o._resolveClassesValues(i.classes,s),s.element[s.widgetName](i)):o._updateCornerClass(n[e](),e)}),this._callChildMethod("refresh"))}});V.widget("ui.checkboxradio",[V.ui.formResetMixin,{version:"1.13.0",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var t,e=this,i=this._super()||{};return this._readType(),t=this.element.labels(),this.label=V(t[t.length-1]),this.label.length||V.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){e.originalLabel+=3===this.nodeType?V(this).text():this.outerHTML}),this.originalLabel&&(i.label=this.originalLabel),null!=(t=this.element[0].disabled)&&(i.disabled=t),i},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===t&&/radio|checkbox/.test(this.type)||V.error("Can't create checkboxradio on element.nodeName="+t+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var t=this.element[0].name,e="input[name='"+V.escapeSelector(t)+"']";return t?(this.form.length?V(this.form[0].elements).filter(e):V(e).filter(function(){return 0===V(this)._form().length})).not(this.element):V([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",t)._toggleClass(this.icon,null,"ui-icon-blank",!t),"radio"===this.type&&this._getRadioGroup().each(function(){var t=V(this).checkboxradio("instance");t&&t._removeClass(t.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=V(""),this.iconSpace=V(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(e+=t?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,t?"ui-icon-blank":"ui-icon-check")):e+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",e),t||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),(t=this.iconSpace?t.not(this.iconSpace[0]):t).remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]);var et;V.ui.checkboxradio;V.widget("ui.button",{version:"1.13.0",defaultElement:"
    "+(0
    ":""):"")}f+=_}return f+=F,t._keyEvent=!1,f},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f=this._get(t,"changeMonth"),g=this._get(t,"changeYear"),m=this._get(t,"showMonthAfterYear"),_=this._get(t,"selectMonthLabel"),v=this._get(t,"selectYearLabel"),b="
    ",y="";if(o||!f)y+=""+a[e]+"";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+=""}if(m||(b+=y+(!o&&f&&g?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!g)b+=""+i+"";else{for(a=this._get(t,"yearRange").split(":"),u=(new Date).getFullYear(),d=(_=function(t){t=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?u+parseInt(t,10):parseInt(t,10);return isNaN(t)?u:t})(a[0]),p=Math.max(d,_(a[1]||"")),d=s?Math.max(d,s.getFullYear()):d,p=n?Math.min(p,n.getFullYear()):p,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),m&&(b+=(!o&&f&&g?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),e=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),e=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,e)));t.selectedDay=e.getDate(),t.drawMonth=t.selectedMonth=e.getMonth(),t.drawYear=t.selectedYear=e.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),t=this._getMinMaxDate(t,"max"),e=i&&e=i.getTime())&&(!s||e.getTime()<=s.getTime())&&(!n||e.getFullYear()>=n)&&(!o||e.getFullYear()<=o)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);e=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),e,this._getFormatConfig(t))}}),V.fn.datepicker=function(t){if(!this.length)return this;V.datepicker.initialized||(V(document).on("mousedown",V.datepicker._checkExternalClick),V.datepicker.initialized=!0),0===V("#"+V.datepicker._mainDivId).length&&V("body").append(V.datepicker.dpDiv);var e=Array.prototype.slice.call(arguments,1);return"string"==typeof t&&("isDisabled"===t||"getDate"===t||"widget"===t)||"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?V.datepicker["_"+t+"Datepicker"].apply(V.datepicker,[this[0]].concat(e)):this.each(function(){"string"==typeof t?V.datepicker["_"+t+"Datepicker"].apply(V.datepicker,[this].concat(e)):V.datepicker._attachDatepicker(this,t)})},V.datepicker=new st,V.datepicker.initialized=!1,V.datepicker.uuid=(new Date).getTime(),V.datepicker.version="1.13.0";V.datepicker,V.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var rt=!1;V(document).on("mouseup",function(){rt=!1});V.widget("ui.mouse",{version:"1.13.0",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===V.data(t.target,e.widgetName+".preventClickEvent"))return V.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!rt){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&V(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===V.data(t.target,this.widgetName+".preventClickEvent")&&V.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),rt=!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(V.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&V.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,rt=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),V.ui.plugin={add:function(t,e,i){var s,n=V.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var e=V.ui.safeActiveElement(this.document[0]);V(t.target).closest(e).length||V.ui.safeBlur(e)},_mouseStart:function(t){var e=this.options;return this.helper=this._createHelper(t),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),V.ui.ddmanager&&(V.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0i[2]&&(o=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(a=i[3]+this.offset.click.top)),s.grid&&(t=s.grid[1]?this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,a=!i||t-this.offset.click.top>=i[1]||t-this.offset.click.top>i[3]?t:t-this.offset.click.top>=i[1]?t-s.grid[1]:t+s.grid[1],t=s.grid[0]?this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,o=!i||t-this.offset.click.left>=i[0]||t-this.offset.click.left>i[2]?t:t-this.offset.click.left>=i[0]?t-s.grid[0]:t+s.grid[0]),"y"===s.axis&&(o=this.originalPageX),"x"===s.axis&&(a=this.originalPageY)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,e,i){return i=i||this._uiHash(),V.ui.plugin.call(this,t,[e,i,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),i.offset=this.positionAbs),V.Widget.prototype._trigger.call(this,t,e,i)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),V.ui.plugin.add("draggable","connectToSortable",{start:function(e,t,i){var s=V.extend({},t,{item:i.element});i.sortables=[],V(i.options.connectToSortable).each(function(){var t=V(this).sortable("instance");t&&!t.options.disabled&&(i.sortables.push(t),t.refreshPositions(),t._trigger("activate",e,s))})},stop:function(e,t,i){var s=V.extend({},t,{item:i.element});i.cancelHelperRemoval=!1,V.each(i.sortables,function(){var t=this;t.isOver?(t.isOver=0,i.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,s))})},drag:function(i,s,n){V.each(n.sortables,function(){var t=!1,e=this;e.positionAbs=n.positionAbs,e.helperProportions=n.helperProportions,e.offset.click=n.offset.click,e._intersectsWith(e.containerCache)&&(t=!0,V.each(n.sortables,function(){return this.positionAbs=n.positionAbs,this.helperProportions=n.helperProportions,this.offset.click=n.offset.click,t=this!==e&&this._intersectsWith(this.containerCache)&&V.contains(e.element[0],this.element[0])?!1:t})),t?(e.isOver||(e.isOver=1,n._parent=s.helper.parent(),e.currentItem=s.helper.appendTo(e.element).data("ui-sortable-item",!0),e.options._helper=e.options.helper,e.options.helper=function(){return s.helper[0]},i.target=e.currentItem[0],e._mouseCapture(i,!0),e._mouseStart(i,!0,!0),e.offset.click.top=n.offset.click.top,e.offset.click.left=n.offset.click.left,e.offset.parent.left-=n.offset.parent.left-e.offset.parent.left,e.offset.parent.top-=n.offset.parent.top-e.offset.parent.top,n._trigger("toSortable",i),n.dropped=e.element,V.each(n.sortables,function(){this.refreshPositions()}),n.currentItem=n.element,e.fromOutside=n),e.currentItem&&(e._mouseDrag(i),s.position=e.position)):e.isOver&&(e.isOver=0,e.cancelHelperRemoval=!0,e.options._revert=e.options.revert,e.options.revert=!1,e._trigger("out",i,e._uiHash(e)),e._mouseStop(i,!0),e.options.revert=e.options._revert,e.options.helper=e.options._helper,e.placeholder&&e.placeholder.remove(),s.helper.appendTo(n._parent),n._refreshOffsets(i),s.position=n._generatePosition(i,!0),n._trigger("fromSortable",i),n.dropped=!1,V.each(n.sortables,function(){this.refreshPositions()}))})}}),V.ui.plugin.add("draggable","cursor",{start:function(t,e,i){var s=V("body"),i=i.options;s.css("cursor")&&(i._cursor=s.css("cursor")),s.css("cursor",i.cursor)},stop:function(t,e,i){i=i.options;i._cursor&&V("body").css("cursor",i._cursor)}}),V.ui.plugin.add("draggable","opacity",{start:function(t,e,i){e=V(e.helper),i=i.options;e.css("opacity")&&(i._opacity=e.css("opacity")),e.css("opacity",i.opacity)},stop:function(t,e,i){i=i.options;i._opacity&&V(e.helper).css("opacity",i._opacity)}}),V.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,e,i){var s=i.options,n=!1,o=i.scrollParentNotHidden[0],a=i.document[0];o!==a&&"HTML"!==o.tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+o.offsetHeight-t.pageY
    ").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&V(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){V(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,a=this;if(this.handles=o.handles||(V(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=V(),this._addedHandles=V(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=V(this.handles[e]),this._on(this.handles[e],{mousedown:a._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=V(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){a.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=V(this.handles[e])[0])!==t.target&&!V.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=V(s.containment).scrollLeft()||0,i+=V(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=V(".ui-resizable-"+this.axis).css("cursor"),V("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),V.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(V.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),V("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&i&&(t.top=l-e.minHeight),n&&i&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e
    ").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){V.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),V.ui.plugin.add("resizable","animate",{stop:function(e){var i=V(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,a=n?0:i.sizeDiff.width,n={width:i.size.width-a,height:i.size.height-o},a=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(V.extend(n,o&&a?{top:o,left:a}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&V(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),V.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=V(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,a=o instanceof V?o.get(0):/parent/.test(o)?e.parent().get(0):o;a&&(n.containerElement=V(a),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:V(document),left:0,top:0,width:V(document).width(),height:V(document).height()||document.body.parentNode.scrollHeight}):(i=V(a),s=[],V(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(a,"left")?a.scrollWidth:o,e=n._hasScroll(a)?a.scrollHeight:e,n.parentData={element:a,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=V(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,a={top:0,left:0},r=e.containerElement,t=!0;r[0]!==document&&/static/.test(r.css("position"))&&(a=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-a.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-a.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-a.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=V(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=V(t.helper),a=o.offset(),r=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o})}}),V.ui.plugin.add("resizable","alsoResize",{start:function(){var t=V(this).resizable("instance").options;V(t.alsoResize).each(function(){var t=V(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=V(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,a={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};V(s.alsoResize).each(function(){var t=V(this),s=V(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];V.each(e,function(t,e){var i=(s[e]||0)+(a[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){V(this).removeData("ui-resizable-alsoresize")}}),V.ui.plugin.add("resizable","ghost",{start:function(){var t=V(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==V.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=V(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=V(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),V.ui.plugin.add("resizable","grid",{resize:function(){var t,e=V(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,l=r[0]||1,h=r[1]||1,c=Math.round((s.width-n.width)/l)*l,u=Math.round((s.height-n.height)/h)*h,d=n.width+c,p=n.height+u,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>p;i.grid=r,m&&(d+=l),s&&(p+=h),f&&(d-=l),g&&(p-=h),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):((p-h<=0||d-l<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",s+1),i=!0),i&&!e&&this._trigger("focus",t),i},open:function(){var t=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=V(V.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;(t=!(t=!(t=!(t=!(t=t||this.element.find("[autofocus]")).length?this.element.find(":tabbable"):t).length?this.uiDialogButtonPane.find(":tabbable"):t).length?this.uiDialogTitlebarClose.filter(":tabbable"):t).length?this.uiDialog:t).eq(0).trigger("focus")},_restoreTabbableFocus:function(){var t=V.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===t||V.contains(this.uiDialog[0],t)||this._focusTabbable()},_keepFocus:function(t){t.preventDefault(),this._restoreTabbableFocus(),this._delay(this._restoreTabbableFocus)},_createWrapper:function(){this.uiDialog=V("
    ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===V.ui.keyCode.ESCAPE)return t.preventDefault(),void this.close(t);var e,i,s;t.keyCode!==V.ui.keyCode.TAB||t.isDefaultPrevented()||(e=this.uiDialog.find(":tabbable"),i=e.first(),s=e.last(),t.target!==s[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==i[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){s.trigger("focus")}),t.preventDefault()):(this._delay(function(){i.trigger("focus")}),t.preventDefault()))},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=V("
    "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(t){V(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=V("").button({label:V("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),t=V("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(t,"ui-dialog-title"),this._title(t),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=V("
    "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=V("
    ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var s=this,t=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),V.isEmptyObject(t)||Array.isArray(t)&&!t.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(V.each(t,function(t,e){var i;e=V.extend({type:"button"},e="function"==typeof e?{click:e,text:t}:e),i=e.click,t={icon:e.icon,iconPosition:e.iconPosition,showLabel:e.showLabel,icons:e.icons,text:e.text},delete e.click,delete e.icon,delete e.iconPosition,delete e.showLabel,delete e.icons,"boolean"==typeof e.text&&delete e.text,V("",e).button(t).appendTo(s.uiButtonSet).on("click",function(){i.apply(s.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){var n=this,o=this.options;function a(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(t,e){n._addClass(V(this),"ui-dialog-dragging"),n._blockFrames(),n._trigger("dragStart",t,a(e))},drag:function(t,e){n._trigger("drag",t,a(e))},stop:function(t,e){var i=e.offset.left-n.document.scrollLeft(),s=e.offset.top-n.document.scrollTop();o.position={my:"left top",at:"left"+(0<=i?"+":"")+i+" top"+(0<=s?"+":"")+s,of:n.window},n._removeClass(V(this),"ui-dialog-dragging"),n._unblockFrames(),n._trigger("dragStop",t,a(e))}})},_makeResizable:function(){var n=this,o=this.options,t=o.resizable,e=this.uiDialog.css("position"),t="string"==typeof t?t:"n,e,s,w,se,sw,ne,nw";function a(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:o.maxWidth,maxHeight:o.maxHeight,minWidth:o.minWidth,minHeight:this._minHeight(),handles:t,start:function(t,e){n._addClass(V(this),"ui-dialog-resizing"),n._blockFrames(),n._trigger("resizeStart",t,a(e))},resize:function(t,e){n._trigger("resize",t,a(e))},stop:function(t,e){var i=n.uiDialog.offset(),s=i.left-n.document.scrollLeft(),i=i.top-n.document.scrollTop();o.height=n.uiDialog.height(),o.width=n.uiDialog.width(),o.position={my:"left top",at:"left"+(0<=s?"+":"")+s+" top"+(0<=i?"+":"")+i,of:n.window},n._removeClass(V(this),"ui-dialog-resizing"),n._unblockFrames(),n._trigger("resizeStop",t,a(e))}}).css("position",e)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=V(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),e=V.inArray(this,t);-1!==e&&t.splice(e,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||this.document.data("ui-dialog-instances",t=[]),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};V.each(t,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(t,e){var i,s=this.uiDialog;"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:V("").text(""+this.options.closeText).html()}),"draggable"===t&&((i=s.is(":data(ui-draggable)"))&&!e&&s.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&((i=s.is(":data(ui-resizable)"))&&!e&&s.resizable("destroy"),i&&"string"==typeof e&&s.resizable("option","handles",e),i||!1===e||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=V(this);return V("
    ").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return!!V(t.target).closest(".ui-dialog").length||!!V(t.target).closest(".ui-datepicker").length},_createOverlay:function(){var i,s;this.options.modal&&(i=V.fn.jquery.substring(0,4),s=!0,this._delay(function(){s=!1}),this.document.data("ui-dialog-overlays")||this.document.on("focusin.ui-dialog",function(t){var e;s||((e=this._trackingInstances()[0])._allowInteraction(t)||(t.preventDefault(),e._focusTabbable(),"3.4."!==i&&"3.5."!==i||e._delay(e._restoreTabbableFocus)))}.bind(this)),this.overlay=V("
    ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1))},_destroyOverlay:function(){var t;this.options.modal&&this.overlay&&((t=this.document.data("ui-dialog-overlays")-1)?this.document.data("ui-dialog-overlays",t):(this.document.off("focusin.ui-dialog"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null)}}),!1!==V.uiBackCompat&&V.widget("ui.dialog",V.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}});V.ui.dialog;function lt(t,e,i){return e<=t&&t").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,e=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).width(e.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,t===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=V("
    ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),V.widget("ui.selectable",V.ui.mouse,{version:"1.13.0",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var i=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){i.elementPos=V(i.element[0]).offset(),i.selectees=V(i.options.filter,i.element[0]),i._addClass(i.selectees,"ui-selectee"),i.selectees.each(function(){var t=V(this),e=t.offset(),e={left:e.left-i.elementPos.left,top:e.top-i.elementPos.top};V.data(this,"selectable-item",{element:this,$element:t,left:e.left,top:e.top,right:e.left+t.outerWidth(),bottom:e.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=V("
    "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(i){var s=this,t=this.options;this.opos=[i.pageX,i.pageY],this.elementPos=V(this.element[0]).offset(),this.options.disabled||(this.selectees=V(t.filter,this.element[0]),this._trigger("start",i),V(t.appendTo).append(this.helper),this.helper.css({left:i.pageX,top:i.pageY,width:0,height:0}),t.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var t=V.data(this,"selectable-item");t.startselected=!0,i.metaKey||i.ctrlKey||(s._removeClass(t.$element,"ui-selected"),t.selected=!1,s._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,s._trigger("unselecting",i,{unselecting:t.element}))}),V(i.target).parents().addBack().each(function(){var t,e=V.data(this,"selectable-item");if(e)return t=!i.metaKey&&!i.ctrlKey||!e.$element.hasClass("ui-selected"),s._removeClass(e.$element,t?"ui-unselecting":"ui-selected")._addClass(e.$element,t?"ui-selecting":"ui-unselecting"),e.unselecting=!t,e.selecting=t,(e.selected=t)?s._trigger("selecting",i,{selecting:e.element}):s._trigger("unselecting",i,{unselecting:e.element}),!1}))},_mouseDrag:function(s){if(this.dragged=!0,!this.options.disabled){var t,n=this,o=this.options,a=this.opos[0],r=this.opos[1],l=s.pageX,h=s.pageY;return ll||i.righth||i.bottoma&&i.rightr&&i.bottom",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var t=this.element.uniqueId().attr("id");this.ids={element:t,button:t+"-button",menu:t+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=V()},_drawButton:function(){var t,e=this,i=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.trigger("focus"),t.preventDefault()}}),this.element.hide(),this.button=V("",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),t=V("").appendTo(this.button),this._addClass(t,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(i).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){e._rendered||e._refreshMenu()})},_drawMenu:function(){var i=this;this.menu=V("
      ",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=V("
      ").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,e){t.preventDefault(),i._setSelection(),i._select(e.item.data("ui-selectmenu-item"),t)},focus:function(t,e){e=e.item.data("ui-selectmenu-item");null!=i.focusIndex&&e.index!==i.focusIndex&&(i._trigger("focus",t,{item:e}),i.isOpen||i._select(e,t)),i.focusIndex=e.index,i.button.attr("aria-activedescendant",i.menuItems.eq(e.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t=this.element.find("option");this.menu.empty(),this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,t.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(V.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(t){var e=V("");return this._setText(e,t.label),this._addClass(e,"ui-selectmenu-text"),e},_renderMenu:function(s,t){var n=this,o="";V.each(t,function(t,e){var i;e.optgroup!==o&&(i=V("
    • ",{text:e.optgroup}),n._addClass(i,"ui-selectmenu-optgroup","ui-menu-divider"+(e.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),i.appendTo(s),o=e.optgroup),n._renderItemData(s,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(t,e){var i=V("
    • "),s=V("
      ",{title:e.element.attr("title")});return e.disabled&&this._addClass(i,null,"ui-state-disabled"),this._setText(s,e.label),i.append(s).appendTo(t)},_setText:function(t,e){e?t.text(e):t.html(" ")},_move:function(t,e){var i,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?((t=window.getSelection()).removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(V(t.target).closest(".ui-selectmenu-menu, #"+V.escapeSelector(this.ids.button)).length||this.close(t))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection()).rangeCount&&(this.range=t.getRangeAt(0)):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(t){var e=!0;switch(t.keyCode){case V.ui.keyCode.TAB:case V.ui.keyCode.ESCAPE:this.close(t),e=!1;break;case V.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case V.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case V.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case V.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case V.ui.keyCode.LEFT:this._move("prev",t);break;case V.ui.keyCode.RIGHT:this._move("next",t);break;case V.ui.keyCode.HOME:case V.ui.keyCode.PAGE_UP:this._move("first",t);break;case V.ui.keyCode.END:case V.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),e=!1}e&&t.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){t=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(t,e){var i;"icons"===t&&(i=this.button.find("span.ui-icon"),this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)),this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1!==t?(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)):this.button.css("width","")},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(t){var i=this,s=[];t.each(function(t,e){e.hidden||s.push(i._parseOption(V(e),t))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),V.widget("ui.slider",V.ui.mouse,{version:"1.13.0",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,e=this.options,i=this.element.find(".ui-slider-handle"),s=[],n=e.values&&e.values.length||1;for(i.length>n&&(i.slice(n).remove(),i=i.slice(0,n)),t=i.length;t");this.handles=i.add(V(s.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(t){V(this).data("ui-slider-handle-index",t).attr("tabIndex",0)})},_createRange:function(){var t=this.options;t.range?(!0===t.range&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:Array.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=V("
      ").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==t.range&&"max"!==t.range||this._addClass(this.range,"ui-slider-range-"+t.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,o,e,a,r=this,l=this.options;return!l.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),a={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(a),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var e=Math.abs(i-r.values(t));(e=this._valueMax())return this._valueMax();var e=0=e&&(t+=0this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return t=null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=t.toString(),t=e.indexOf(".");return-1===t?0:e.length-t-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,t,s,n,o=this.options.range,a=this.options,r=this,l=!this._animateOff&&a.animate,h={};this._hasMultipleValues()?this.handles.each(function(t){i=(r.values(t)-r._valueMin())/(r._valueMax()-r._valueMin())*100,h["horizontal"===r.orientation?"left":"bottom"]=i+"%",V(this).stop(1,1)[l?"animate":"css"](h,a.animate),!0===r.options.range&&("horizontal"===r.orientation?(0===t&&r.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},a.animate),1===t&&r.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:a.animate})):(0===t&&r.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},a.animate),1===t&&r.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:a.animate}))),e=i}):(t=this.value(),s=this._valueMin(),n=this._valueMax(),i=n!==s?(t-s)/(n-s)*100:0,h["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](h,a.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},a.animate),"max"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},a.animate),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},a.animate),"max"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},a.animate))},_handleEvents:{keydown:function(t){var e,i,s,n=V(t.target).data("ui-slider-handle-index");switch(t.keyCode){case V.ui.keyCode.HOME:case V.ui.keyCode.END:case V.ui.keyCode.PAGE_UP:case V.ui.keyCode.PAGE_DOWN:case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(V(t.target),null,"ui-state-active"),!1===this._start(t,n)))return}switch(s=this.options.step,e=i=this._hasMultipleValues()?this.values(n):this.value(),t.keyCode){case V.ui.keyCode.HOME:i=this._valueMin();break;case V.ui.keyCode.END:i=this._valueMax();break;case V.ui.keyCode.PAGE_UP:i=this._trimAlignValue(e+(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.PAGE_DOWN:i=this._trimAlignValue(e-(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:if(e===this._valueMax())return;i=this._trimAlignValue(e+s);break;case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(e===this._valueMin())return;i=this._trimAlignValue(e-s)}this._slide(t,n,i)},keyup:function(t){var e=V(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,e),this._change(t,e),this._removeClass(V(t.target),null,"ui-state-active"))}}}),V.widget("ui.sortable",V.ui.mouse,{version:"1.13.0",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t*{ cursor: "+o.cursor+" !important; }").appendTo(n)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!i)for(s=this.containers.length-1;0<=s;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return V.ui.ddmanager&&(V.ui.ddmanager.current=this),V.ui.ddmanager&&!o.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this.helper.parent().is(this.appendTo)||(this.helper.detach().appendTo(this.appendTo),this.offset.parent=this._getParentOffset()),this.position=this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,this.lastPositionAbs=this.positionAbs=this._convertPositionTo("absolute"),this._mouseDrag(t),!0},_scroll:function(t){var e=this.options,i=!1;return this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageYt[this.floating?"width":"height"]?h&&c:o",i.document[0]);return i._addClass(t,"ui-sortable-placeholder",s||i.currentItem[0].className)._removeClass(t,"ui-sortable-helper"),"tbody"===n?i._createTrPlaceholder(i.currentItem.find("tr").eq(0),V("",i.document[0]).appendTo(t)):"tr"===n?i._createTrPlaceholder(i.currentItem,t):"img"===n&&t.attr("src",i.currentItem.attr("src")),s||t.css("visibility","hidden"),t},update:function(t,e){s&&!o.forcePlaceholderSize||(e.height()&&(!o.forcePlaceholderSize||"tbody"!==n&&"tr"!==n)||e.height(i.currentItem.innerHeight()-parseInt(i.currentItem.css("paddingTop")||0,10)-parseInt(i.currentItem.css("paddingBottom")||0,10)),e.width()||e.width(i.currentItem.innerWidth()-parseInt(i.currentItem.css("paddingLeft")||0,10)-parseInt(i.currentItem.css("paddingRight")||0,10)))}}),i.placeholder=V(o.placeholder.element.call(i.element,i.currentItem)),i.currentItem.after(i.placeholder),o.placeholder.update(i,i.placeholder)},_createTrPlaceholder:function(t,e){var i=this;t.children().each(function(){V(" ",i.document[0]).attr("colspan",V(this).attr("colspan")||1).appendTo(e)})},_contactContainers:function(t){for(var e,i,s,n,o,a,r,l,h,c=null,u=null,d=this.containers.length-1;0<=d;d--)V.contains(this.currentItem[0],this.containers[d].element[0])||(this._intersectsWith(this.containers[d].containerCache)?c&&V.contains(this.containers[d].element[0],c.element[0])||(c=this.containers[d],u=d):this.containers[d].containerCache.over&&(this.containers[d]._trigger("out",t,this._uiHash(this)),this.containers[d].containerCache.over=0));if(this.innermostContainer=c)if(1===this.containers.length)this.containers[u].containerCache.over||(this.containers[u]._trigger("over",t,this._uiHash(this)),this.containers[u].containerCache.over=1);else{for(i=1e4,s=null,n=(l=c.floating||this._isFloating(this.currentItem))?"left":"top",o=l?"width":"height",h=l?"pageX":"pageY",e=this.items.length-1;0<=e;e--)V.contains(this.containers[u].element[0],this.items[e].item[0])&&this.items[e].item[0]!==this.currentItem[0]&&(a=this.items[e].item.offset()[n],r=!1,t[h]-a>this.items[e][o]/2&&(r=!0),Math.abs(t[h]-a)this.containment[2]&&(i=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(s=this.containment[3]+this.offset.click.top)),e.grid&&(t=this.originalPageY+Math.round((s-this.originalPageY)/e.grid[1])*e.grid[1],s=!this.containment||t-this.offset.click.top>=this.containment[1]&&t-this.offset.click.top<=this.containment[3]?t:t-this.offset.click.top>=this.containment[1]?t-e.grid[1]:t+e.grid[1],t=this.originalPageX+Math.round((i-this.originalPageX)/e.grid[0])*e.grid[0],i=!this.containment||t-this.offset.click.left>=this.containment[0]&&t-this.offset.click.left<=this.containment[2]?t:t-this.offset.click.left>=this.containment[0]?t-e.grid[0]:t+e.grid[0])),{top:s-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop()),left:i-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function n(e,i,s){return function(t){s._trigger(e,t,i._uiHash(i))}}for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;0<=i;i--)e||s.push(n("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(n("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var s=this._super(),n=this.element;return V.each(["min","max","step"],function(t,e){var i=n.attr(e);null!=i&&i.length&&(s[e]=i)}),s},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t))},mousewheel:function(t,e){var i=V.ui.safeActiveElement(this.document[0]);if(this.element[0]===i&&e){if(!this.spinning&&!this._start(t))return!1;this._spin((0").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&0e.max?e.max:null!==e.min&&t"},_buttonHtml:function(){return""}});var ct;V.ui.spinner;V.widget("ui.tabs",{version:"1.13.0",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:(ct=/#.*$/,function(t){var e=t.href.replace(ct,""),i=location.href.replace(ct,"");try{e=decodeURIComponent(e)}catch(t){}try{i=decodeURIComponent(i)}catch(t){}return 1?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,e=this.tablist.children(":has(a[href])");t.disabled=V.map(e.filter(".ui-state-disabled"),function(t){return e.index(t)}),this._processTabs(),!1!==t.active&&this.anchors.length?this.active.length&&!V.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=V()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=V()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var l=this,t=this.tabs,e=this.anchors,i=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(t){V(this).is(".ui-state-disabled")&&t.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){V(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return V("a",this)[0]}).attr({tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=V(),this.anchors.each(function(t,e){var i,s,n,o=V(e).uniqueId().attr("id"),a=V(e).closest("li"),r=a.attr("aria-controls");l._isLocal(e)?(n=(i=e.hash).substring(1),s=l.element.find(l._sanitizeSelector(i))):(n=a.attr("aria-controls")||V({}).uniqueId()[0].id,(s=l.element.find(i="#"+n)).length||(s=l._createPanel(n)).insertAfter(l.panels[t-1]||l.tablist),s.attr("aria-live","polite")),s.length&&(l.panels=l.panels.add(s)),r&&a.data("ui-tabs-aria-controls",r),a.attr({"aria-controls":n,"aria-labelledby":o}),s.attr("aria-labelledby",o)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),t&&(this._off(t.not(this.tabs)),this._off(e.not(this.anchors)),this._off(i.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(t){return V("
      ").attr("id",t).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(t){var e,i;for(Array.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1),i=0;e=this.tabs[i];i++)e=V(e),!0===t||-1!==V.inArray(i,t)?(e.attr("aria-disabled","true"),this._addClass(e,null,"ui-state-disabled")):(e.removeAttr("aria-disabled"),this._removeClass(e,null,"ui-state-disabled"));this.options.disabled=t,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===t)},_setupEvents:function(t){var i={};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,e=this.element.parent();"fill"===t?(i=e.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=V(this).outerHeight(!0)}),this.panels.each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,V(this).height("").height())}).height(i))},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget).closest("li"),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():this._getPanelForTab(s),r=i.length?this._getPanelForTab(i):V(),i={oldTab:i,oldPanel:r,newTab:o?V():s,newPanel:a};t.preventDefault(),s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||n&&!e.collapsible||!1===this._trigger("beforeActivate",t,i)||(e.active=!o&&this.tabs.index(s),this.active=n?V():s,this.xhr&&this.xhr.abort(),r.length||a.length||V.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,i))},_toggle:function(t,e){var i=this,s=e.newPanel,n=e.oldPanel;function o(){i.running=!1,i._trigger("activate",t,e)}function a(){i._addClass(e.newTab.closest("li"),"ui-tabs-active","ui-state-active"),s.length&&i.options.show?i._show(s,i.options.show,o):(s.show(),o())}this.running=!0,n.length&&this.options.hide?this._hide(n,this.options.hide,function(){i._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),a()}):(this._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n.hide(),a()),n.attr("aria-hidden","true"),e.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),s.length&&n.length?e.oldTab.attr("tabIndex",-1):s.length&&this.tabs.filter(function(){return 0===V(this).attr("tabIndex")}).attr("tabIndex",-1),s.attr("aria-hidden","false"),e.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var t=this._findActive(t);t[0]!==this.active[0]&&(t=(t=!t.length?this.active:t).find(".ui-tabs-anchor")[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return!1===t?V():this.tabs.eq(t)},_getIndex:function(t){return t="string"==typeof t?this.anchors.index(this.anchors.filter("[href$='"+V.escapeSelector(t)+"']")):t},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){V.data(this,"ui-tabs-destroy")?V(this).remove():V(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var t=V(this),e=t.data("ui-tabs-aria-controls");e?t.attr("aria-controls",e).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var t=this.options.disabled;!1!==t&&(t=void 0!==i&&(i=this._getIndex(i),Array.isArray(t)?V.map(t,function(t){return t!==i?t:null}):V.map(this.tabs,function(t,e){return e!==i?e:null})),this._setOptionDisabled(t))},disable:function(t){var e=this.options.disabled;if(!0!==e){if(void 0===t)e=!0;else{if(t=this._getIndex(t),-1!==V.inArray(t,e))return;e=Array.isArray(e)?V.merge([t],e).sort():[t]}this._setOptionDisabled(e)}},load:function(t,s){t=this._getIndex(t);function n(t,e){"abort"===e&&o.panels.stop(!1,!0),o._removeClass(i,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===o.xhr&&delete o.xhr}var o=this,i=this.tabs.eq(t),t=i.find(".ui-tabs-anchor"),a=this._getPanelForTab(i),r={tab:i,panel:a};this._isLocal(t[0])||(this.xhr=V.ajax(this._ajaxSettings(t,s,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(i,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,i){setTimeout(function(){a.html(t),o._trigger("load",s,r),n(i,e)},1)}).fail(function(t,e){setTimeout(function(){n(t,e)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href").replace(/#.*$/,""),beforeSend:function(t,e){return n._trigger("beforeLoad",i,V.extend({jqXHR:t,ajaxSettings:e},s))}}},_getPanelForTab:function(t){t=V(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+t))}}),!1!==V.uiBackCompat&&V.widget("ui.tabs",V.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}});V.ui.tabs;V.widget("ui.tooltip",{version:"1.13.0",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var t=V(this).attr("title");return V("").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(t,e){var i=(t.attr("aria-describedby")||"").split(/\s+/);i.push(e),t.data("ui-tooltip-id",e).attr("aria-describedby",String.prototype.trim.call(i.join(" ")))},_removeDescribedBy:function(t){var e=t.data("ui-tooltip-id"),i=(t.attr("aria-describedby")||"").split(/\s+/),e=V.inArray(e,i);-1!==e&&i.splice(e,1),t.removeData("ui-tooltip-id"),(i=String.prototype.trim.call(i.join(" ")))?t.attr("aria-describedby",i):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=V("
      ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=V([])},_setOption:function(t,e){var i=this;this._super(t,e),"content"===t&&V.each(this.tooltips,function(t,e){i._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event("blur");i.target=i.currentTarget=e.element[0],s.close(i,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var t=V(this);if(t.is("[title]"))return t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var t=V(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))}),this.disabledTitles=V([])},open:function(t){var i=this,e=V(t?t.target:this.element).closest(this.options.items);e.length&&!e.data("ui-tooltip-id")&&(e.attr("title")&&e.data("ui-tooltip-title",e.attr("title")),e.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&e.parents().each(function(){var t,e=V(this);e.data("ui-tooltip-open")&&((t=V.Event("blur")).target=t.currentTarget=this,i.close(t,!0)),e.attr("title")&&(e.uniqueId(),i.parents[this.id]={element:this,title:e.attr("title")},e.attr("title",""))}),this._registerCloseHandlers(t,e),this._updateContent(e,t))},_updateContent:function(e,i){var t=this.options.content,s=this,n=i?i.type:null;if("string"==typeof t||t.nodeType||t.jquery)return this._open(i,e,t);(t=t.call(e[0],function(t){s._delay(function(){e.data("ui-tooltip-open")&&(i&&(i.type=n),this._open(i,e,t))})}))&&this._open(i,e,t)},_open:function(t,e,i){var s,n,o,a=V.extend({},this.options.position);function r(t){a.of=t,n.is(":hidden")||n.position(a)}i&&((s=this._find(e))?s.tooltip.find(".ui-tooltip-content").html(i):(e.is("[title]")&&(t&&"mouseover"===t.type?e.attr("title",""):e.removeAttr("title")),s=this._tooltip(e),n=s.tooltip,this._addDescribedBy(e,n.attr("id")),n.find(".ui-tooltip-content").html(i),this.liveRegion.children().hide(),(i=V("
      ").html(n.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),i.removeAttr("id").find("[id]").removeAttr("id"),i.appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:r}),r(t)):n.position(V.extend({of:e},this.options.position)),n.hide(),this._show(n,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(o=this.delayedShow=setInterval(function(){n.is(":visible")&&(r(a.of),clearInterval(o))},13)),this._trigger("open",t,{tooltip:n})))},_registerCloseHandlers:function(t,e){var i={keyup:function(t){t.keyCode===V.ui.keyCode.ESCAPE&&((t=V.Event(t)).currentTarget=e[0],this.close(t,!0))}};e[0]!==this.element[0]&&(i.remove=function(){this._removeTooltip(this._find(e).tooltip)}),t&&"mouseover"!==t.type||(i.mouseleave="close"),t&&"focusin"!==t.type||(i.focusout="close"),this._on(!0,e,i)},close:function(t){var e,i=this,s=V(t?t.currentTarget:this.element),n=this._find(s);n?(e=n.tooltip,n.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),n.hiding=!0,e.stop(!0),this._hide(e,this.options.hide,function(){i._removeTooltip(V(this))}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&V.each(this.parents,function(t,e){V(e.element).attr("title",e.title),delete i.parents[t]}),n.closing=!0,this._trigger("close",t,{tooltip:e}),n.hiding||(n.closing=!1))):s.removeData("ui-tooltip-open")},_tooltip:function(t){var e=V("
      ").attr("role","tooltip"),i=V("
      ").appendTo(e),s=e.uniqueId().attr("id");return this._addClass(i,"ui-tooltip-content"),this._addClass(e,"ui-tooltip","ui-widget ui-widget-content"),e.appendTo(this._appendTo(t)),this.tooltips[s]={element:t,tooltip:e}},_find:function(t){t=t.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(t){clearInterval(this.delayedShow),t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){t=t.closest(".ui-front, dialog");return t=!t.length?this.document[0].body:t},_destroy:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event("blur"),e=e.element;i.target=i.currentTarget=e[0],s.close(i,!0),V("#"+t).remove(),e.data("ui-tooltip-title")&&(e.attr("title")||e.attr("title",e.data("ui-tooltip-title")),e.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==V.uiBackCompat&&V.widget("ui.tooltip",V.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}});V.ui.tooltip}); \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/jquery.min.js b/docs/css/api-ref/public_sys-resources/jquery.min.js new file mode 100644 index 000000000..b0614034a --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
      ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}); \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/macFFBgHack.png b/docs/css/api-ref/public_sys-resources/macFFBgHack.png new file mode 100644 index 000000000..c6473b324 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/macFFBgHack.png differ diff --git a/docs/css/api-ref/public_sys-resources/note_3.0-en-us.png b/docs/css/api-ref/public_sys-resources/note_3.0-en-us.png new file mode 100644 index 000000000..57a0e1f53 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/note_3.0-en-us.png differ diff --git a/docs/css/api-ref/public_sys-resources/notice_3.0-en-us.png b/docs/css/api-ref/public_sys-resources/notice_3.0-en-us.png new file mode 100644 index 000000000..fa4b64990 Binary files /dev/null and b/docs/css/api-ref/public_sys-resources/notice_3.0-en-us.png differ diff --git a/docs/css/api-ref/public_sys-resources/popup.js b/docs/css/api-ref/public_sys-resources/popup.js new file mode 100644 index 000000000..a550862ed --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/popup.js @@ -0,0 +1 @@ +var i=0;var dhtmlgoodies_tooltipFlag=false;var dhtmlgoodies_tooltip="";var dhtmlgoodies_tooltipShadow="";var dhtmlgoodies_shadowSize=3;var dhtmlgoodies_tooltipMaxWidth=500;var dhtmlgoodies_tooltipMinWidth=100;var dhtmlgoodies_iframe=false;var timeId;var clickFlag=false;var tooltip_is_msie=(navigator.userAgent.indexOf("MSIE")>=0&&navigator.userAgent.indexOf("opera")==-1&&document.all)?true:false;var xPos;var yPos;window.document.onmousemove=function(a){a=a||window.event;if(a.pageX){xPos=a.pageX;yPos=a.pageY}else{if(document.body!==null&&typeof document.body!=="undefined"){xPos=a.clientX+document.body.scrollLeft-document.body.clientLeft;yPos=a.clientY+document.body.scrollTop-document.body.clientTop}}};function showTooltip(e){if(document.body===null||typeof document.body==="undefined"){return}if(i==0){return}clickFlag=true;var f=Json.parse("jsonData."+e);var a=Math.max(document.body.clientWidth,document.documentElement.clientWidth)-20;if(!dhtmlgoodies_tooltipFlag){dhtmlgoodies_tooltip=document.createElement("DIV");dhtmlgoodies_tooltip.id="dhtmlgoodies_tooltip";dhtmlgoodies_tooltipShadow=document.createElement("DIV");dhtmlgoodies_tooltipShadow.id="dhtmlgoodies_tooltipShadow";document.body.appendChild(dhtmlgoodies_tooltip);document.body.appendChild(dhtmlgoodies_tooltipShadow);if(tooltip_is_msie){dhtmlgoodies_iframe=document.createElement("IFRAME");dhtmlgoodies_iframe.frameborder="5";dhtmlgoodies_iframe.style.backgroundColor="#FFFFFF";dhtmlgoodies_iframe.src="#";dhtmlgoodies_iframe.style.zIndex=100;dhtmlgoodies_iframe.style.position="absolute";document.body.appendChild(dhtmlgoodies_iframe)}}dhtmlgoodies_tooltip.style.display="block";dhtmlgoodies_tooltipShadow.style.display="block";if(tooltip_is_msie){dhtmlgoodies_iframe.style.display="block"}var b=Math.max(document.body.scrollTop,document.documentElement.scrollTop);if(navigator.userAgent.toLowerCase().indexOf("safari")>=0){b=0}var c=xPos+10;dhtmlgoodies_tooltip.style.width=null;dhtmlgoodies_tooltip.innerHTML=f;dhtmlgoodies_tooltip.style.left=c+"px";if(tooltip_is_msie){dhtmlgoodies_tooltip.style.top=yPos+20+b+"px"}else{dhtmlgoodies_tooltip.style.top=yPos+20+"px"}dhtmlgoodies_tooltipShadow.style.left=c+dhtmlgoodies_shadowSize+"px";if(tooltip_is_msie){dhtmlgoodies_tooltipShadow.style.top=yPos+20+b+dhtmlgoodies_shadowSize+"px"}else{dhtmlgoodies_tooltipShadow.style.top=yPos+20+dhtmlgoodies_shadowSize+"px"}if(dhtmlgoodies_tooltip.offsetWidth>dhtmlgoodies_tooltipMaxWidth){dhtmlgoodies_tooltip.style.width=dhtmlgoodies_tooltipMaxWidth+"px"}var d=dhtmlgoodies_tooltip.offsetWidth;if(da){dhtmlgoodies_tooltip.style.left=(dhtmlgoodies_tooltipShadow.style.left.replace("px","")-((c+d)-a))+"px";dhtmlgoodies_tooltipShadow.style.left=(dhtmlgoodies_tooltipShadow.style.left.replace("px","")-((c+d)-a)+dhtmlgoodies_shadowSize)+"px"}if(tooltip_is_msie){dhtmlgoodies_iframe.style.left=dhtmlgoodies_tooltip.style.left;dhtmlgoodies_iframe.style.top=dhtmlgoodies_tooltip.style.top;dhtmlgoodies_iframe.style.width=dhtmlgoodies_tooltip.offsetWidth+"px";dhtmlgoodies_iframe.style.height=dhtmlgoodies_tooltip.offsetHeight+"px"}}function hideTooltip(){i=0;clickFlag=false;if((dhtmlgoodies_tooltip!==null&&typeof dhtmlgoodies_tooltip!=="undefined")&&+(dhtmlgoodies_tooltip.style!==null&&typeof dhtmlgoodies_tooltip.style!=="undefined")){dhtmlgoodies_tooltip.style.display="none";dhtmlgoodies_tooltipShadow.style.display="none";if(tooltip_is_msie){dhtmlgoodies_iframe.style.display="none"}}if(timeId!==null&&typeof timeId!=="undefined"&&timeId!=""){clearTimeout(timeId)}}function showText(a){i=1;timeId=setTimeout(function(){showTooltip(a)},500)}function showText2(a){if(!clickFlag){i=1;showTooltip(a);i=0;if(timeId!==null&&typeof timeId!=="undefined"&&timeId!=""){clearTimeout(timeId)}}}function anchorScroll(b){var d=document.getElementsByName(b);if(d!=null&&d.length>0){var c=d[0];var a=c.getBoundingClientRect().left+(document.body.scrollLeft||(document.documentElement&&document.documentElement.scrollLeft));var e=c.getBoundingClientRect().top+(document.body.scrollTop||(document.documentElement&&document.documentElement.scrollTop));window.scrollTo(a,e-30)}}; \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/thickbox.css b/docs/css/api-ref/public_sys-resources/thickbox.css new file mode 100644 index 000000000..aa0cf3743 --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/thickbox.css @@ -0,0 +1 @@ +#TB_window{font:12px Arial,Helvetica,sans-serif;color:#333333;}#TB_secondLine{font:10px Arial,Helvetica,sans-serif;color:#666666;}#TB_window a:link{color:#666666;}#TB_window a:visited{color:#666666;}#TB_window a:hover{color:#000;}#TB_window a:active{color:#666666;}#TB_window a:focus{color:#666666;}#TB_overlay{position:fixed;z-index:100;top:0;left:0;height:100%;width:100%;}.TB_overlayMacFFBGHack{background:url(macFFBgHack.png) repeat;}.TB_overlayBG{background-color:#000;filter:alpha(opacity=30);-moz-opacity:.75;opacity:.75;}* html #TB_overlay{position:absolute;height:expression(document.body.scrollHeight>document.body.offsetHeight ? document.body.scrollHeight:document.body.offsetHeight+'px');}#TB_window{position:fixed;background:#ffffff;z-index:102;color:#000000;display:none;border:2px solid #525252;text-align:left;top:50%;left:50%;}* html #TB_window{position:absolute;margin-top:expression(0 - parseInt(this.offsetHeight / 2)+(TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop)+'px');}#TB_window img#TB_Image{display:block;margin:0 auto;border-right:1px solid #ccc;border-bottom:1px solid #ccc;border-top:1px solid #666;border-left:1px solid #666;cursor:pointer;}#TB_caption{padding:7px 30px 10px 25px;float:left;}#TB_closeWindow{color:#999999;padding:8px 0 25px;font-size:12px;}#TB_closeWindow a{float:left;height:17px;line-height:100px;margin-left:10px;overflow:hidden;width:17px;}#TB_closeWindow a:hover{float:left;height:17px;line-height:100px;margin-left:10px;overflow:hidden;width:17px;}#TB_closeWindow a.imgadjust{background:url(imagemax.gif) no-repeat 0 top;}#TB_closeWindow a.imgclose{background:url(imageclose.gif) no-repeat 0 top;}#TB_closeWindow a.imgadjust:hover{background:url(imagemaxhover.gif) no-repeat 0 top;}#TB_closeWindow a.imgclose:hover{background:url(imageclosehover.gif) no-repeat 0 top;}.TB_padding{padding:5px 10px 10px;}#TB_closeAjaxWindow{padding:7px 10px 5px 0;margin-bottom:1px;text-align:right;float:right;}#TB_ajaxWindowTitle{float:left;padding:7px 0 5px 10px;margin-bottom:1px;}#TB_title{background-color:#e8e8e8;height:27px;}#TB_ajaxContent{clear:both;padding:2px 15px 15px 15px;overflow:auto;text-align:left;line-height:1.4em;}#TB_ajaxContent.TB_modal{padding:15px;}#TB_ajaxContent p{padding:5px 0 5px 0;}#TB_load{position:fixed;display:none;height:13px;width:208px;z-index:103;top:50%;left:50%;margin:-6px 0 0 -104px;}* html #TB_load{position:absolute;margin-top:expression(0 - parseInt(this.offsetHeight / 2)+(TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop)+'px');}#TB_HideSelect{z-index:99;position:fixed;top:0;left:0;background-color:#fff;border:none;filter:alpha(opacity=0);-moz-opacity:0;opacity:0;height:100%;width:100%;}* html #TB_HideSelect{position:absolute;height:expression(document.body.scrollHeight>document.body.offsetHeight ? document.body.scrollHeight:document.body.offsetHeight+'px');}#TB_iframeContent{clear:both;border:none;margin-bottom:-1px;margin-top:1px;_margin-bottom:1px;} \ No newline at end of file diff --git a/docs/css/api-ref/public_sys-resources/thickbox.js b/docs/css/api-ref/public_sys-resources/thickbox.js new file mode 100644 index 000000000..2b294b4a5 --- /dev/null +++ b/docs/css/api-ref/public_sys-resources/thickbox.js @@ -0,0 +1,8 @@ +/* + * Thickbox 3.1 - One Box To Rule Them All. + * By Cody Lindley (http://www.codylindley.com) + * Copyright (c) 2007 cody lindley + * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php +*/ +$$$(document).ready(function(){tb_init("a.thickbox, area.thickbox, input.thickbox");imgLoader=new Image();});function tb_init(a){$$$(a).click(function(){var c=this.title||this.name||null;var b=this.href||this.alt;var d=this.rel||false;tb_show(c,b,d);this.blur();return false})}function tb_show(j,b,h){try{if(typeof document.body.style.maxHeight==="undefined"){$$$("body","html").css({height:"100%",width:"100%"});$$$("html").css("overflow","hidden");if(document.getElementById("TB_HideSelect")===null){$$$("body").append("
      ");$$$("#TB_overlay").click(tb_remove)}}else{if(document.getElementById("TB_overlay")===null){$$$("body").append("
      ");$$$("#TB_overlay").click(tb_remove)}}if(tb_detectMacXFF()){$$$("#TB_overlay").addClass("TB_overlayMacFFBGHack")}else{$$$("#TB_overlay").addClass("TB_overlayBG")}if(j===null){j=""}$$$("body").append("
      ");$$$("#TB_load").show();var c;if(b.indexOf("?")!==-1){c=b.substr(0,b.indexOf("?"))}else{c=b}var f=/\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;var k=c.toLowerCase().match(f);if(k==".jpg"||k==".jpeg"||k==".png"||k==".gif"||k==".bmp"){TB_PrevCaption="";TB_PrevURL="";TB_PrevHTML="";TB_NextCaption="";TB_NextURL="";TB_NextHTML="";TB_imageCount="";TB_FoundURL=false;if(h){TB_TempArray=$$$("a[@rel="+h+"]").get();for(TB_Counter=0;((TB_Counter  Next >"}else{TB_PrevCaption=TB_TempArray[TB_Counter].title;TB_PrevURL=TB_TempArray[TB_Counter].href;TB_PrevHTML="  < Prev"}}else{TB_FoundURL=true;TB_imageCount="Image "+(TB_Counter+1)+" of "+(TB_TempArray.length)}}}imgPreloader=new Image();imgPreloader.onload=function(){imgPreloader.onload=null;var e=tb_getPageSize();var v=e[0]-150;var s=e[1]-150;var r=imgPreloader.width;var o=imgPreloader.height;var t=r;var l=o;if(r>v){o=o*(v/r);r=v;if(o>s){r=r*(s/o);o=s}}else{if(o>s){r=r*(s/o);o=s;if(r>v){o=o*(v/r);r=v}}}var m=r;var n=o;$$$("#TB_window").bind("mousewheel",function(y,A){var x=Math.abs(A);var w=m;var z=n;if(A>0){m*=(x/10+1);n*=(x/10+1)}else{m*=(1-x/10);n*=(1-x/10);if(t<=v){}else{if(m<=r){n=l*(m/t)}}}if(m<210){m=w;n=z}$$$("#TB_Image").attr("width",m).attr("height",n);TB_WIDTH=m+30;TB_HEIGHT=o+60;tb_position();return false});TB_WIDTH=r+30;TB_HEIGHT=o+60;var q="
      ";$$$("#TB_window").append(q+""+j+"
      "+j+"
      "+TB_imageCount+TB_PrevHTML+TB_NextHTML+"
      ");$$$("#TB_window").addClass("ui-draggable");$$$("#TB_closeWindowButton").click(tb_remove);$$$(".imgadjust").click(function(){$$$("#TB_Image").attr("width",t).attr("height",l);TB_WIDTH=t+30;m=t;n=l;tb_position();return false});$$$("#TB_window").draggable();if(!(TB_PrevHTML==="")){function p(){if($$$(document).unbind("click",p)){$$$(document).unbind("click",p)}$$$("#TB_window").remove();$$$("body").append("
      ");tb_show(TB_PrevCaption,TB_PrevURL,h);return false}$$$("#TB_prev").click(p)}if(!(TB_NextHTML==="")){function u(){$$$("#TB_window").remove();$$$("body").append("
      ");tb_show(TB_NextCaption,TB_NextURL,h);return false}$$$("#TB_next").click(u)}document.onkeydown=function(w){if(w==null){keycode=event.keyCode}else{keycode=w.which}if(keycode==27){tb_remove()}else{if(keycode==190){if(!(TB_NextHTML=="")){document.onkeydown="";u()}}else{if(keycode==188){if(!(TB_PrevHTML=="")){document.onkeydown="";p()}}}}};tb_position();$$$("#TB_load").remove();$$$("#TB_ImageOff").click(tb_remove);$$$("#TB_window").css({display:"block"})};imgPreloader.src=b}else{var a=b.replace(/^[^\?]+\??/,"");var d=tb_parseQuery(a);TB_WIDTH=(d.width*1)+30||630;TB_HEIGHT=(d.height*1)+40||440;ajaxContentW=TB_WIDTH-30;ajaxContentH=TB_HEIGHT-45;if(b.indexOf("TB_iframe")!=-1){urlNoQuery=b.split("TB_");$$$("#TB_iframeContent").remove();if(d.modal!="true"){$$$("#TB_window").append("
      "+j+"
      close or Esc Key
      ")}else{$$$("#TB_overlay").unbind();$$$("#TB_window").append("")}}else{if($$$("#TB_window").css("display")!="block"){if(d.modal!="true"){$$$("#TB_window").append("
      "+j+"
      close or Esc Key
      ")}else{$$$("#TB_overlay").unbind();$$$("#TB_window").append("
      ")}}else{$$$("#TB_ajaxContent")[0].style.width=ajaxContentW+"px";$$$("#TB_ajaxContent")[0].style.height=ajaxContentH+"px";$$$("#TB_ajaxContent")[0].scrollTop=0;$$$("#TB_ajaxWindowTitle").html(j)}}$$$("#TB_closeWindowButton").click(tb_remove);if(b.indexOf("TB_inline")!=-1){$$$("#TB_ajaxContent").append($$$("#"+d.inlineId).children());$$$("#TB_window").unload(function(){$$$("#"+d.inlineId).append($$$("#TB_ajaxContent").children())});tb_position();$$$("#TB_load").remove();$$$("#TB_window").css({display:"block"})}else{if(b.indexOf("TB_iframe")!=-1){tb_position();if($$$.browser.safari){$$$("#TB_load").remove();$$$("#TB_window").css({display:"block"})}}else{$$$("#TB_ajaxContent").load(b+="&random="+(new Date().getTime()),function(){tb_position();$$$("#TB_load").remove();tb_init("#TB_ajaxContent a.thickbox");$$$("#TB_window").css({display:"block"})})}}}if(!d.modal){document.onkeyup=function(l){if(l==null){keycode=event.keyCode}else{keycode=l.which}if(keycode==27){tb_remove()}}}}catch(i){}}function tb_showIframe(){$$$("#TB_load").remove();$$$("#TB_window").css({display:"block"})}function tb_remove(){$$$("#TB_imageOff").unbind("click");$$$("#TB_closeWindowButton").unbind("click");$$$("#TB_window").fadeOut("fast",function(){$$$("#TB_window,#TB_overlay,#TB_HideSelect").trigger("unload").unbind().remove()});$$$("#TB_load").remove();if(typeof document.body.style.maxHeight=="undefined"){$$$("body","html").css({height:"auto",width:"auto"});$$$("html").css("overflow","")}document.onkeydown="";document.onkeyup="";return false}function tb_position(){if(TB_WIDTH<210){TB_WIDTH=210}$$$("#TB_window").css({marginLeft:"-"+parseInt((TB_WIDTH/2),10)+"px",width:TB_WIDTH+"px"});if(!(jQueryHW2.browser.msie&&jQueryHW2.browser.version<7)){$$$("#TB_window").css({marginTop:"-"+parseInt((TB_HEIGHT/2),10)+"px"})}}function tb_parseQuery(d){var e={};if(!d){return e}var a=d.split(/[;&]/);for(var c=0;c
      ");$$$("#TB_overlay").click(tb_remove)}}else{if(document.getElementById("TB_overlay")===null){$$$("body").append("
      ");$$$("#TB_overlay").click(tb_remove)}}if(tb_detectMacXFF()){$$$("#TB_overlay").addClass("TB_overlayMacFFBGHack")}else{$$$("#TB_overlay").addClass("TB_overlayBG")}if(j===null){j=""}$$$("body").append("
      ");$$$("#TB_load").show();var c;if(b.indexOf("?")!==-1){c=b.substr(0,b.indexOf("?"))}else{c=b}var f=/\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;var k=c.toLowerCase().match(f);if(k==".jpg"||k==".jpeg"||k==".png"||k==".gif"||k==".bmp"){TB_PrevCaption="";TB_PrevURL="";TB_PrevHTML="";TB_NextCaption="";TB_NextURL="";TB_NextHTML="";TB_imageCount="";TB_FoundURL=false;if(h){TB_TempArray=$$$("a[@rel="+h+"]").get();for(TB_Counter=0;((TB_Counter  Next >"}else{TB_PrevCaption=TB_TempArray[TB_Counter].title;TB_PrevURL=TB_TempArray[TB_Counter].href;TB_PrevHTML="  < Prev"}}else{TB_FoundURL=true;TB_imageCount="Image "+(TB_Counter+1)+" of "+(TB_TempArray.length)}}}imgPreloader=new Image();imgPreloader.onload=function(){imgPreloader.onload=null;var e=tb_getPageSize();var v=e[0]-150;var s=e[1]-150;var r=imgPreloader.width;var o=imgPreloader.height;var t=r;var l=o;if(r>v){o=o*(v/r);r=v;if(o>s){r=r*(s/o);o=s}}else{if(o>s){r=r*(s/o);o=s;if(r>v){o=o*(v/r);r=v}}}var m=r;var n=o;$$$("#TB_window").bind("mousewheel",function(y,A){var x=Math.abs(A);var w=m;var z=n;if(A>0){m*=(x/10+1);n*=(x/10+1)}else{m*=(1-x/10);n*=(1-x/10);if(t<=v){}else{if(m<=r){n=l*(m/t)}}}if(m<210){m=w;n=z}$$$("#TB_Image").attr("width",m).attr("height",n);TB_WIDTH=m+30;TB_HEIGHT=o+60;tb_position();return false});TB_WIDTH=r+30;TB_HEIGHT=o+60;var q="
      ";$$$("#TB_window").append(q+""+j+"
      "+j+"
      "+TB_imageCount+TB_PrevHTML+TB_NextHTML+"
      ");$$$("#TB_window").addClass("ui-draggable");$$$("#TB_closeWindowButton").click(tb_remove);$$$(".imgadjust").click(function(){$$$("#TB_Image").attr("width",t).attr("height",l);TB_WIDTH=t+30;m=t;n=l;tb_position();return false});$$$("#TB_window").draggable();if(!(TB_PrevHTML==="")){function p(){if($$$(document).unbind("click",p)){$$$(document).unbind("click",p)}$$$("#TB_window").remove();$$$("body").append("
      ");tb_show(TB_PrevCaption,TB_PrevURL,h);return false}$$$("#TB_prev").click(p)}if(!(TB_NextHTML==="")){function u(){$$$("#TB_window").remove();$$$("body").append("
      ");tb_show(TB_NextCaption,TB_NextURL,h);return false}$$$("#TB_next").click(u)}document.onkeydown=function(w){if(w==null){keycode=event.keyCode}else{keycode=w.which}if(keycode==27){tb_remove()}else{if(keycode==190){if(!(TB_NextHTML=="")){document.onkeydown="";u()}}else{if(keycode==188){if(!(TB_PrevHTML=="")){document.onkeydown="";p()}}}}};tb_position();$$$("#TB_load").remove();$$$("#TB_ImageOff").click(tb_remove);$$$("#TB_window").css({display:"block"})};imgPreloader.src=b}else{var a=b.replace(/^[^\?]+\??/,"");var d=tb_parseQuery(a);TB_WIDTH=(d.width*1)+30||630;TB_HEIGHT=(d.height*1)+40||440;ajaxContentW=TB_WIDTH-30;ajaxContentH=TB_HEIGHT-45;if(b.indexOf("TB_iframe")!=-1){urlNoQuery=b.split("TB_");$$$("#TB_iframeContent").remove();if(d.modal!="true"){$$$("#TB_window").append("
      "+j+"
      close or Esc Key
      ")}else{$$$("#TB_overlay").unbind();$$$("#TB_window").append("")}}else{if($$$("#TB_window").css("display")!="block"){if(d.modal!="true"){$$$("#TB_window").append("
      "+j+"
      close or Esc Key
      ")}else{$$$("#TB_overlay").unbind();$$$("#TB_window").append("
      ")}}else{$$$("#TB_ajaxContent")[0].style.width=ajaxContentW+"px";$$$("#TB_ajaxContent")[0].style.height=ajaxContentH+"px";$$$("#TB_ajaxContent")[0].scrollTop=0;$$$("#TB_ajaxWindowTitle").html(j)}}$$$("#TB_closeWindowButton").click(tb_remove);if(b.indexOf("TB_inline")!=-1){$$$("#TB_ajaxContent").append($$$("#"+d.inlineId).children());$$$("#TB_window").unload(function(){$$$("#"+d.inlineId).append($$$("#TB_ajaxContent").children())});tb_position();$$$("#TB_load").remove();$$$("#TB_window").css({display:"block"})}else{if(b.indexOf("TB_iframe")!=-1){tb_position();if($$$.browser.safari){$$$("#TB_load").remove();$$$("#TB_window").css({display:"block"})}}else{$$$("#TB_ajaxContent").load(b+="&random="+(new Date().getTime()),function(){tb_position();$$$("#TB_load").remove();tb_init("#TB_ajaxContent a.thickbox");$$$("#TB_window").css({display:"block"})})}}}if(!d.modal){document.onkeyup=function(l){if(l==null){keycode=event.keyCode}else{keycode=l.which}if(keycode==27){tb_remove()}}}}catch(i){}}function tb_showIframe(){$$$("#TB_load").remove();$$$("#TB_window").css({display:"block"})}function tb_remove(){$$$("#TB_imageOff").unbind("click");$$$("#TB_closeWindowButton").unbind("click");$$$("#TB_window").fadeOut("fast",function(){$$$("#TB_window,#TB_overlay,#TB_HideSelect").trigger("unload").unbind().remove()});$$$("#TB_load").remove();if(typeof document.body.style.maxHeight=="undefined"){$$$("body","html").css({height:"auto",width:"auto"});$$$("html").css("overflow","")}document.onkeydown="";document.onkeyup="";return false}function tb_position(){if(TB_WIDTH<210){TB_WIDTH=210}$$$("#TB_window").css({marginLeft:"-"+parseInt((TB_WIDTH/2),10)+"px",width:TB_WIDTH+"px"});if(!(jQueryHW2.browser.msie&&jQueryHW2.browser.version<7)){$$$("#TB_window").css({marginTop:"-"+parseInt((TB_HEIGHT/2),10)+"px"})}}function tb_parseQuery(d){var e={};if(!d){return e}var a=d.split(/[;&]/);for(var c=0;c + +

      Overview

      +
      + + diff --git a/docs/css/umn/css_01_0002.html b/docs/css/umn/css_01_0002.html new file mode 100644 index 000000000..36c7b5f83 --- /dev/null +++ b/docs/css/umn/css_01_0002.html @@ -0,0 +1,120 @@ + + +

      Change History

      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Released On

      +

      Description

      +

      2022-06-30

      +

      Added cluster version 7.9.3.

      +

      Supported the VPC endpoint service: VPC Endpoint Service

      +

      Optimized the following content based on use scenarios and operation processes:

      + +

      2020-08-30

      +
      +

      2019-03-15

      +
      +

      2019-01-26

      +
      • Accepted in OTC-3.2/Agile-01.2019.
      +

      2019-01-17

      +
      +

      2018-12-17

      +
      +

      2018-12-03

      +
      +

      2018-11-02

      +
      +

      2018-10-19

      +
      +

      2018-10-12

      +
      +

      2018-10-08

      +
      • Accepted in OTC-3.2.
      +

      2018-09-28

      +
      +

      2018-09-14

      +
      +

      2018-08-20

      +
      +

      2018-07-31

      +

      This issue is the first official release.

      +
      +
      +
      + diff --git a/docs/css/umn/css_01_0006.html b/docs/css/umn/css_01_0006.html new file mode 100644 index 000000000..50e4ad0e0 --- /dev/null +++ b/docs/css/umn/css_01_0006.html @@ -0,0 +1,11 @@ + + +

      Getting Started

      +
      + + diff --git a/docs/css/umn/css_01_0007.html b/docs/css/umn/css_01_0007.html new file mode 100644 index 000000000..ec378c555 --- /dev/null +++ b/docs/css/umn/css_01_0007.html @@ -0,0 +1,308 @@ + + +

      Getting Started with Elasticsearch

      +

      This section describes how to use Elasticsearch to provide the search function for users. You can use the Elasticsearch search engine of CSS to search for data based on the scenario example. The basic operation process is as follows:

      + +

      Scenario Description

      A women's clothing brand builds an e-commerce website. It uses traditional databases to provide a product search function for users. However, due to an increase in the number of users and business growth, the traditional databases have slow response and low accuracy. To improve user experience and user retention, the e-commerce website plans to use Elasticsearch to provide the product search function for users.

      +

      This section describes how to use Elasticsearch to provide the search function for users.

      +

      Assume that the e-commerce website provides the following data:

      +
      {
      +"products":[
      +{"productName":"Latest art shirts for women in 2017 autumn","size":"L"}
      +{"productName":"Latest art shirts for women in 2017 autumn","size":"M"}
      +{"productName":"Latest art shirts for women in 2017 autumn","size":"S"}
      +{"productName":"Latest jeans for women in spring 2018","size":"M"}
      +{"productName":"Latest jeans for women in spring 2018","size":"S"}
      +{"productName":"Latest casual pants for women in spring 2017","size":"L"}
      +{"productName":"Latest casual pants for women in spring 2017","size":"S"}
      +]
      +}
      +
      +

      Step 1: Create a Cluster

      Create a cluster using Elasticsearch as the search engine. In this example, suppose that you create a cluster named Es-xfx. This cluster is used only for getting started with Elasticsearch. For this cluster, you are advised to select css.medium.8 for Node Specifications, Common I/O for Node Storage Type, and 40 GB for Node Storage Capacity. For details, see Creating an Elasticsearch Cluster in Non-Security Mode.

      +

      After you create the cluster, switch to the cluster list to view the created cluster. If the Status of the cluster is Available, the cluster is created successfully.

      +
      Figure 1 Creating a cluster
      +
      +

      Step 2: Import Data

      CSS supports importing data to Elasticsearch using Logstash, Kibana, or APIs. Kibana lets you visualize your Elasticsearch data. The following procedure illustrates how to import data to Elasticsearch using Kibana.

      +
      1. On the Clusters page of the CSS management console, locate the row containing the target cluster and click Access Kibana in the Operation column.
      2. In the left navigation pane of Kibana, choose Dev Tools.

        The text box on the left is the input box. The triangle icon in the upper right corner of the input box is the command execution button. The text box on the right area is the result output box.

        +
        Figure 2 Console page
        +

        The Kibana UI varies depending on the Kibana version.

        +
        +
      3. On the Console page, run the following command to create index named my_store:
        (Versions earlier than 7.x)
        PUT /my_store
        +{
        +  "settings": {
        +    "number_of_shards": 1
        +  },
        +  "mappings": {
        +    "products": {
        +      "properties": {
        +        "productName": {
        +          "type": "text",
        +          "analyzer": "ik_smart"
        +        },
        +        "size": {
        +          "type": "keyword"
        +        }
        +      }
        +    }
        +  }
        +}
        +
        +

        (Versions later than 7.x)

        +
        PUT /my_store
        +{
        +  "settings": {
        +    "number_of_shards": 1
        +  },
        +  "mappings": {
        +          "properties": {
        +        "productName": {
        +          "type": "text",
        +          "analyzer": "ik_smart"
        +        },
        +        "size": {
        +          "type": "keyword"
        +        }
        +      }
        +    }
        +  }
        +

        The command output is similar to the following:

        +
        {
        +  "acknowledged" : true,
        +  "shards_acknowledged" : true,
        +  "index" : "my_store"
        +}
        +
      4. On the Console page, run the following command to import data to index named my_store:

        (Versions earlier than 7.x)

        +
        POST /my_store/products/_bulk
        +{"index":{}}
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"L"}
        +{"index":{}}
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"M"}
        +{"index":{}}
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"S"}
        +{"index":{}}
        +{"productName":"Latest jeans for women in spring 2018","size":"M"}
        +{"index":{}}
        +{"productName":"Latest jeans for women in spring 2018","size":"S"}
        +{"index":{}}
        +{"productName":"Latest casual pants for women in spring 2017","size":"L"}
        +{"index":{}}
        +{"productName":"Latest casual pants for women in spring 2017","size":"S"}
        +
        +

        (Versions later than 7.x)

        +
        POST /my_store/_doc/_bulk
        +{"index":{}}
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"L"}
        +{"index":{}}
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"M"}
        +{"index":{}}
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"S"}
        +{"index":{}}
        +{"productName":"Latest jeans for women in spring 2018","size":"M"}
        +{"index":{}}
        +{"productName":"Latest jeans for women in spring 2018","size":"S"}
        +{"index":{}}
        +{"productName":"Latest casual pants for women in spring 2017","size":"L"}
        +{"index":{}}{"productName":"Latest casual pants for women in spring 2017","size":"S"}
        +

        If the value of the errors field in the command output is false, the data is imported successfully.

        +
      +
      +

      Step 3: Search for Data

      • Full-text search

        If you access the e-commerce website and want to search for commodities whose names include "spring jeans", enter "spring jeans" to begin your search. The following text provides the command to be executed on Kibana and the command output.

        +

        Command to be executed on Kibana:

        +

        (Versions earlier than 7.x)

        +
        GET /my_store/products/_search
        +{
        +  "query": {"match": {
        +    "productName": "spring jeans"
        +  }}
        +}
        +

        (Versions later than 7.x)

        +
        GET /my_store/_search
        +{
        +  "query": {"match": {
        +    "productName": "spring jeans"
        +  }}
        +}
        +

        The command output is similar to the following:

        +
        {
        +  "took": 80,
        +  "timed_out": false,
        +  "_shards": {
        +    "total": 1,
        +    "successful": 1,
        +    "skipped": 0,
        +    "failed": 0
        +  },
        +  "hits": {
        +    "total": 4,
        +    "max_score": 1.8069603,
        +    "hits": [
        +      {
        +        "_index": "my_store",
        +        "_type": "products",
        +        "_id": "yTG1QWUBRuneTTG2KJSq",
        +        "_score": 1.8069603,
        +        "_source": {
        +          "productName": "Latest jeans for women in spring 2018",
        +          "size": "M"
        +        }
        +      },
        +      {
        +        "_index": "my_store",
        +        "_type": "products",
        +        "_id": "yjG1QWUBRuneTTG2KJSq",
        +        "_score": 1.8069603,
        +        "_source": {
        +          "productName": "Latest jeans for women in spring 2018",
        +          "size": "S"
        +        }
        +      },
        +      {
        +        "_index": "my_store",
        +        "_type": "products",
        +        "_id": "yzG1QWUBRuneTTG2KJSq",
        +        "_score": 0.56677663,
        +        "_source": {
        +          "productName": "Latest casual pants for women in spring 2017",
        +          "size": "L"
        +        }
        +      },
        +      {
        +        "_index": "my_store",
        +        "_type": "products",
        +        "_id": "zDG1QWUBRuneTTG2KJSq",
        +        "_score": 0.56677663,
        +        "_source": {
        +          "productName": "Latest casual pants for women in spring 2017",
        +          "size": "S"
        +        }
        +      }
        +    ]
        +  }
        +}
        +
        • Elasticsearch supports full-text search. The preceding command searches for the information about all commodities whose names include "spring" or "jeans".
        • Unlike traditional databases, Elasticsearch can return results in milliseconds by using inverted indices.
        • Elasticsearch supports sorting by score. In the command output, information about the first two commodities contains both "spring" and "jeans", while that about the last two products contains only "spring". Therefore, the first two commodities rank prior to the last two due to high keyword match.
        +
      +
      • Aggregation result display

        The e-commerce website provides the function of displaying aggregation results. For example, it classifies commodities corresponding to "spring" based on the size so that you can collect the number of products of different sizes. The following provides the command to be executed on Kibana and the command output.

        +

        Command to be executed on Kibana:

        +

        (Versions earlier than 7.x)

        +
        GET /my_store/products/_search
        +{
        +"query": {
        +"match": { "productName": "spring" }
        +},
        +"size": 0,
        +"aggs": {
        +"sizes": {
        +"terms": { "field": "size" }
        +}
        +}
        +}
        +

        +

        (Versions later than 7.x)

        +
        GET /my_store/_search
        +{
        +"query": {
        +"match": { "productName": "spring" }
        +},
        +"size": 0,
        +"aggs": {
        +"sizes": {
        +"terms": { "field": "size" }
        +}
        +}
        +}
        +

        The command output is similar to the following:

        +

        (Versions earlier than 7.x)

        +
        {
        +  "took": 66,
        +  "timed_out": false,
        +  "_shards": {
        +    "total": 1,
        +    "successful": 1,
        +    "skipped": 0,
        +    "failed": 0
        +  },
        +  "hits": {
        +    "total": 4,
        +    "max_score": 0,
        +    "hits": []
        +  },
        +  "aggregations": {
        +    "sizes": {
        +      "doc_count_error_upper_bound": 0,
        +      "sum_other_doc_count": 0,
        +      "buckets": [
        +        {
        +          "key": "S",
        +          "doc_count": 2
        +        },
        +        {
        +          "key": "L",
        +          "doc_count": 1
        +        },
        +        {
        +          "key": "M",
        +          "doc_count": 1
        +        }
        +      ]
        +    }
        +  }
        +}
        +

        (Versions later than 7.x)

        +
        {
        +  "took" : 27,
        +  "timed_out" : false,
        +  "_shards" : {
        +    "total" : 1,
        +    "successful" : 1,
        +    "skipped" : 0,
        +    "failed" : 0
        +  },
        +  "hits" : {
        +    "total" : {
        +      "value" : 3,
        +      "relation" : "eq"
        +    },
        +    "max_score" : null,
        +    "hits" : [ ]
        +  },
        +  "aggregations" : {
        +    "sizes" : {
        +      "doc_count_error_upper_bound" : 0,
        +      "sum_other_doc_count" : 0,
        +      "buckets" : [
        +        {
        +          "key" : "L",
        +          "doc_count" : 1
        +        },
        +        {
        +          "key" : "M",
        +          "doc_count" : 1
        +        },
        +        {
        +          "key" : "S",
        +          "doc_count" : 1
        +        }
        +      ]
        +    }
        +  }
        +}
        +
      +
      +

      Step 4: Delete the Cluster

      Once you understand the process and method of using Elasticsearch, you can perform the following steps to delete the cluster you created for the example and its data to avoid resource wastage.

      +

      After you delete a cluster, its data cannot be restored. Exercise caution when deleting a cluster.

      +
      1. Log in to the CSS management console. In the left navigation pane, click Clusters to switch to the Clusters page.
      2. Locate the row that contains cluster Es-xfx and click More > Delete in the Operation column.
      3. In the displayed dialog box, enter the name of the cluster to be deleted and click OK.
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0008.html b/docs/css/umn/css_01_0008.html new file mode 100644 index 000000000..7cc0ab416 --- /dev/null +++ b/docs/css/umn/css_01_0008.html @@ -0,0 +1,15 @@ + + +

      Creating and Accessing a Cluster

      +
      + + diff --git a/docs/css/umn/css_01_0009.html b/docs/css/umn/css_01_0009.html new file mode 100644 index 000000000..1538d654a --- /dev/null +++ b/docs/css/umn/css_01_0009.html @@ -0,0 +1,41 @@ + + +

      Managing Elasticsearch Clusters

      +
      + + diff --git a/docs/css/umn/css_01_0011.html b/docs/css/umn/css_01_0011.html new file mode 100644 index 000000000..da38943a2 --- /dev/null +++ b/docs/css/umn/css_01_0011.html @@ -0,0 +1,219 @@ + + +

      Creating an Elasticsearch Cluster in Security Mode

      +

      You can enable security mode when you create a cluster of version 6.5.4 and later versions.

      +
      • You can enable security mode only when you create a cluster. The security mode setting of an existing cluster cannot be modified.
      • Public IP address access and Kibana public access can be used only after security mode is enabled.
      +
      +

      Procedure

      1. Log in to the CSS management console.
      2. Click Create Cluster in the upper right corner. The Create Cluster page is displayed.
      3. Specify Region and AZ. +
        + + + + + + + + + + +
        Table 1 Parameter description for Region and AZ

        Parameter

        +

        Description

        +

        Region

        +

        Select a region for the cluster from the drop-down list on the right. Currently, only eu-de is supported.

        +

        AZ

        +

        Select an AZ associated with the cluster region.

        +

        You can select one or more AZs. For details, see Multi-AZ HA.

        +
        +
        +
      4. Set basic information about the cluster. Specifically, specify Version and Name. +
        + + + + + + + + + + +
        Table 2 Description of basic parameters

        Parameter

        +

        Description

        +

        Version

        +

        Select a cluster version from the drop-down list box.

        +

        Name

        +

        Name of a cluster. Cluster names contain 4 to 32 characters. Only letters, numbers, hyphens (-), and underscores (_) are allowed and the value must start with a letter.

        +
        NOTE:

        After a cluster is created, you can modify the cluster name as required. Click the name of a cluster to be modified. On the displayed Basic Information page, click next to the cluster name. After the modification is completed, click to save the modification. If you want to cancel the modification, click .

        +
        +
        +
        +
        Figure 1 Configuring basic information
        +
      5. Set host specifications of the cluster. +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Table 3 Parameter description

        Parameter

        +

        Description

        +

        Nodes

        +

        Number of nodes in a cluster.

        +
        • If neither a master node nor client node is enabled, the nodes specified by this parameter are used to serve as both the master node and client node. Nodes provide the cluster management, data storage, cluster access, and data analysis functions. To ensure data stability in the cluster, it is recommended that you set this parameter to a value no less than 3.
        • If only the master node function is enabled, nodes specified by this parameter are used to store data and provide functions of client nodes.
        • If both the master and client node functions are enabled, the nodes specified by this parameter are only used for storing data.
        • If only the client node function is enabled, nodes specified by this parameter are used to store data and provide functions of the master node.
        +

        CPU Architecture

        +

        Currently, x86 and Kunpeng are supported. The supported type is determined by the actual regional environment.

        +

        Node Specifications

        +

        Specifications of nodes in a cluster. You can select a specified specification based on your needs. Only one node specification can be selected for each cluster. You cannot select the CPU and memory resources that have been sold out.

        +

        Currently, the following flavors are supported: css.medium.8, css.large.8, css.xlarge.8, css.2xlarge.8, and css.4xlarge.8.

        +

        After you select a flavor, the CPU and memory corresponding to the current specification are displayed below the parameter. For example, if you select css.medium.8, then 1 vCPUs | 8 GB will be displayed, indicating that the node flavor you select contains one vCPU and 8 GB memory.

        +

        Node Storage Type

        +

        In the current version, the following options are available: Common I/O, High I/O, and Ultra-high I/O.

        +

        Node Storage Capacity

        +

        Storage space. Its value varies with node specifications.

        +
        • Value range of flavor css.medium.8: 40 GB to 640 GB
        • Value range of flavor css.large.8: 40 GB to 1,280 GB
        • Value range of flavor css.xlarge.8: 40 GB to 2,560 GB
        • Value range of flavor css.2xlarge.8: 80 GB to 5,120 GB
        • Value range of flavor css.4xlarge.8: 160 GB to 10,240 GB
        +

        Disk Encryption

        +

        If you select this option, the nodes in the cluster you create will use encrypted EVS disks to protect data. By default, this option is not selected. Note that you cannot modify this setting after the cluster is created. Therefore, exercise caution when performing the setting.

        +

        After you select this option, you need to select an available key from the Key Name drop-down list. If no key is available, click Create/View Key to go to the KMS management console and create or modify a key. For details, see Creating a CMK.

        +

        Enabling disk encryption has no impact on your operations on a cluster (such as accessing the cluster and importing data to the cluster). However, after you enable disk encryption, operation performance deteriorates by about 10%.

        +
        NOTE:
        • If the cluster is in the Available status and the key used for disk encryption is in the Pending deletion or disable status or has been deleted after a cluster is created, cluster scale-out is not allowed. However, other operations on the cluster, such as restarting the cluster, creating snapshots, restoring the cluster, and importing data to the cluster are not affected. In addition, this key cannot be used for cluster creation in the future.
        • After a cluster is created, do not delete the key used by the cluster. Otherwise, the cluster will become unavailable.
        • The Default Master Keys cannot be used to create grants. Specifically, you cannot use Default Master Keys whose aliases end with /default in KMS to create clusters.
        +
        +

        Master node

        +

        The master node manages all nodes in the cluster. If 20 or more nodes are required to store and analyze the large amount of data, you are advised to enable the master node to ensure cluster stability. Otherwise, you are advised to set only the Nodes parameter and use the nodes as both master and client nodes..

        +

        After enabling the master node, specify Node Specifications, Nodes, and Node Storage Type. The value of Nodes must be an odd number equal to or greater than 3. You can set a maximum of nine nodes. The value of Node Storage Capacity is fixed. You can select a storage type based on your needs. By default, the node storage type is High I/O and the node storage capacity is 40 GB.

        +

        Client node

        +

        The client node allows clients to access clusters and analyze data. If more than 20 nodes are required to store and analyze a large amount of data, you are advised to enable the client node to ensure cluster stability. Otherwise, you are advised to set only the Nodes parameter and use the nodes as both master and client nodes..

        +

        After enabling the client node, specify Node Specifications, Nodes and Node Storage Type. The value of Nodes ranges from 1 to 32. The value of Node Storage Capacity is fixed. You can select a storage type based on your needs. By default, the node storage type is High I/O and the node storage capacity is 40 GB.

        +

        Cold data node

        +

        The cold data node is used to store historical data, for which query responses can be returned in minutes. If you do not quire a quick query response, store historical data on cold data nodes to reduce costs.

        +

        After enabling cold data node, configure Node Specifications, Nodes, Node Storage Type, and Node Storage Capacity. The value of Nodes ranges from 1 to 32. Select Node Storage Type and Node Storage Capacity as requirement.

        +

        After the cold data node is enabled, CSS automatically adds cold and hot tags to related nodes.

        +
        +
        +
        Figure 2 Configuring node specifications
        +
      6. Set network specifications of the cluster. +
        + + + + + + + + + + + + + + + + + + + + + + +
        Table 4 Parameter description

        Parameter

        +

        Description

        +

        VPC

        +

        A VPC is a secure, isolated, and logical network environment.

        +

        Select the target VPC. Click View VPC to enter the VPC management console and view the created VPC names and IDs. If no VPC is available, create a VPC.

        +
        NOTE:

        The VPC must contain CIDRs. Otherwise, cluster creation will fail. By default, a VPC will contain CIDRs.

        +
        +

        Subnet

        +

        A subnet provides dedicated network resources that are isolated from other networks, improving network security.

        +

        Select the target subnet. You can access the VPC management console to view the names and IDs of the existing subnets in the VPC.

        +

        Security Group

        +

        A security group is a collection of access control rules for ECSs that have the same security protection requirements and are mutually trusted in a VPC. To view more details about the security group, click View Security Group.

        +
        NOTE:
        • For cluster access purposes, ensure that the security group contains port 9200.
        • If your cluster version is 7.6.2 or 7.9.3, ensure that all the ports used for communication between nodes in the same security group are allowed. If such settings cannot be configured, ensure at least the access to port 9300 is allowed.
        • After a cluster is created, its security group cannot be changed.
        +
        +

        Security Mode

        +

        This parameter is supported in version 6.5.4 and later versions. After enabling security mode, communication is encrypted and authentication is required for the cluster. The default administrator username is admin, and the password needs to be set and confirmed. For details about the security mode, see Clusters in Security Mode.

        +
        NOTE:

        You can enable Security Mode only when you create a cluster. After a cluster is created, its security mode cannot be changed.

        +
        +

        HTTPS Access

        +

        When security mode is enabled for a cluster, HTTPS access is enabled by default. A security cluster uses HTTPS for communication. Compared with a non-security cluster that uses HTTP for communication, the read performance of a security cluster is much slower. If you need fast read performance and user permission isolation for a security cluster for the purpose of isolating resources (such as indices, documents, and fields), you can disable HTTPS access. After HTTPS access is disabled, HTTP is used to communicate with the cluster. In this case, data security cannot be ensured and public IP address access cannot be enabled.

        +

        After a cluster is created, HTTPS access status cannot be changed.

        +

        Public IP Address

        +

        You can configure this parameter only when the cluster has the Security Mode enabled. After enabling this function, you can obtain an IP address for accessing the cluster from the Internet. For details, see Public Network Access.

        +
        +
        +
        Figure 3 Configuring network specifications
        +
      7. Set the enterprise project of the cluster.

        When creating a CSS cluster, you can bind an enterprise project to the cluster if you have enabled enterprise project. You can select an enterprise project created by the current user from the drop-down list or click View Project Project to go to the Enterprise Project Management console and create a new project or view existing projects.

        +
      8. Configure automatic snapshot creation for the cluster.

        By default, the cluster snapshot function is enabled. If you do not need this function, you can disable Cluster Snapshot.

        +
        Basic Configuration
        • OBS Bucket: name of the OBS bucket used for storing snapshots.
        • Backup Path: storage path of the snapshot in the OBS bucket.
        • IAM Agency: authorized by the current account for CSS to access or maintain data stored in the OBS bucket.
        +
        +

        For details, see Managing Automatic Snapshot Creation.

        +

        Automatic Snapshot Creation

        +

        You can customize Snapshot Name Prefix, Backup Start Time, and Retention Period (days) as required.

        +
        • Snapshot Name Prefix: Enter a maximum of 32 characters starting with a lowercase letter. Only lowercase letters, digits, hyphens (-), and underscores (_) are allowed.. A snapshot name consists of a snapshot name prefix and a timestamp. For example, snapshot-1566921603720.
        • Backup Started: indicates the time when the backup starts automatically every day. You can specify this parameter only in hours, for example, 00:00 or 01:00. The value ranges from 00:00 to 23:00. Select a time from the drop-down list box.
        • Retention Period (days): indicates the duration when snapshots are retained in the OBS bucket, in days. The value ranges from 1 to 90. You can specify this parameter as required. The system automatically deletes expired snapshots every hour at half past the hour.
        +
      9. Configure advanced settings for the cluster.
        • Default: The the VPC Endpoint Service, Kibana Public Access, and Tag functions are disabled by default. You can manually enable these functions after the cluster is created.
        • Custom: You can enable the VPC Endpoint Service, Kibana Public Access, and Tag functions as required.
        + +
        + + + + + + + + + + + + + +
        Table 5 Parameters for advanced settings

        Parameter

        +

        Description

        +

        VPC Endpoint Service

        +

        After enabling this function, you can obtain a private domain name for accessing the cluster in the same VPC. For details, see VPC Endpoint Service.

        +

        Kibana Public Access

        +

        You can configure this parameter only when security mode is enabled for a cluster. After enabling this function, you can obtain a public IP address for accessing Kibana. For details, see Kibana Public Access.

        +

        Tag

        +

        Adding tags to clusters can help you identify and manage your cluster resources. You can customize tags or use tags predefined by Tag Management Service (TMS). For details, see Managing Tags.

        +
        +
        +
      10. Click Next to switch to the Confirm page.
      11. After the specifications are confirmed, click Submit.
      12. Click Back to Cluster List to switch to the Clusters page. The cluster you created is listed on the displayed page and its status is Creating. If the cluster is successfully created, its status will change to Available.

        If the cluster creation fails, create the cluster again.

        +
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0012.html b/docs/css/umn/css_01_0012.html new file mode 100644 index 000000000..57f4ce398 --- /dev/null +++ b/docs/css/umn/css_01_0012.html @@ -0,0 +1,1000 @@ + + +

      Accessing a Cluster

      +

      After a cluster is created, you can access the cluster to use Elasticsearch and perform operations, such as, defining index data, importing data, and searching for data. For more information about Elasticsearch, see the Elasticsearch Reference. You can use any of the following methods to access a cluster:

      + +

      Accessing a Cluster Using Kibana on the Management Console

      1. Log in to the CSS management console.
      2. In the left navigation pane, click Clusters.
      3. On the displayed Clusters page, locate the row containing the target cluster and click Access Kibana in the Operation column.

        +
      4. On the Kibana page that is displayed, you can create indices, query indices and documents, and analyze document fields. For details about Kibana, see Kibana. For details about how to import data to Elasticsearch, see the following sections: +
      +
      +

      Accessing a Cluster by Calling Elasticsearch APIs on the ECS That Is Located in the Same VPC as the Cluster

      The ECS that you use to access the cluster by calling Elasticsearch APIs, must meet the following requirements. For details about how to create and log in to an ECS, see Logging In to a Linux ECS or Logging In to a Windows ECS.

      +
      • Sufficient disk space is allocated for the ECS.
      • The ECS and the cluster must be in the same VPC.
      • The security group of the ECS must be the same as that of the cluster.

        If this requirement is not met, modify the ECS security group or configure the inbound and outbound rules of the ECS security group to allow the ECS security group to be accessed by all security groups of the cluster. For details, see Configuring Security Group Rules.

        +
      • Configure security group rule settings of the target CSS cluster. Set Protocol to TCP and Port Range to 9200 or a port range including port 9200 for both the outbound and inbound directions.
      +

      To access a cluster by calling Elasticsearch APIs on the ECS that is located in the same VPC as the cluster, perform the following steps:

      +
      1. Create and then log in to an ECS that meets the requirements.
      2. To access a cluster, use the private network address and port number of one node in the cluster. You can obtain the private network addresses of nodes from the Private Network Address column in the cluster list. If there is only one node in the cluster, the private network address and port number of this node are displayed. If there are multiple nodes in the cluster, private network addresses and port numbers of all nodes are displayed.

        Assume that there are two nodes in a cluster. Value 10.62.179.32:9200 10.62.179.33:9200 indicates that the private network addresses of the two nodes are 10.62.179.32 and 10.62.179.33 respectively, and port 9200 is used to access both nodes.

        +
      3. Run the cURL command to execute the API or call the API by using a program before accessing the cluster. For details about Elasticsearch operations and APIs, see the Elasticsearch Reference.
        For example, run the following cURL command to view the index information in the cluster. In this example, the private access IP address of one node in the cluster is 10.62.179.32 and the port number is 9200.
        • If the cluster you access has the communication encryption function enabled, you need to access the cluster using HTTPS and add -k to the cURL command.
          If communication encryption is enabled, the CSS server uses a shared self-signed certificate. In this case, the client cannot authenticate the certificate. You are advised to disable certificate verification on the client.
          curl -k 'https://10.62.179.32:9200/_cat/indices'
          +
          +
        • If encryption has not been enabled for the communication with the cluster, run the following command:
          curl 'http://10.62.179.32:9200/_cat/indices'
          +
        +
        +

        In the preceding command, the private network address and port number of only one node in the cluster are used. If the node fails, the command will fail to be executed. If the cluster contains multiple nodes, you can replace the private network address and port number of the faulty node with those of any available node in the cluster. If the cluster contains only one node, restore the node and execute the command again.

        +
        +

        If encryption has not been enabled for the communication with the cluster, the command output is similar to that shown in the following figure.

        +
        Figure 1 Command output
        +
      +
      +

      Accessing a Cluster Using Java API in Non-security Mode

      For clusters in the non-security mode, you are advised to use use RestHighLevelClient.

      +
      • Create a client using the default method of the RestHighLevelClient class.
        1
        +2
        +3
        RestHighLevelClient client = new RestHighLevelClient(
        +        RestClient.builder(
        +                new HttpHost("localhost", 9200, "http")));
        +
        +
        +
      +
      +

      Accessing a Cluster Using the Java API in Security Mode with Elasticsearch

      After enabling the security mode function for Elasticsearch 7.1.1 and later versions, accessing a cluster requires the use of HTTPS and the username and password for authentication.

      +

      You need to use clusters 7.1.1 and later versions as well as related APIs if you use the Java API to access a cluster, because the TransportClient class in the earlier version cannot access a cluster using the username and password.

      +

      Two access modes are available: Create a client using either the TransportClient or RestHighLevelClient class. RestHighLevelClient is recommended.

      +
      • Create a client using the TransportClient class.
        Run the following commands on the client to generate the keystore and truststore files. The certificate (CloudSearchService.cer) downloaded from the cluster management page is used.
        1
        +2
        keytool -genkeypair -alias certificatekey -keyalg RSA -keystore transport-keystore.jks
        +keytool -import -alias certificatekey -file CloudSearchService.cer  -keystore truststore.jks
        +
        +
        +
        +

        Use the keystore and truststore files to access the cluster, create the TransportClient class using the PreBuiltTransportClient method, and add the settings in the client thread.

        +

        +
        The key code is as follows:
         1
        + 2
        + 3
        + 4
        + 5
        + 6
        + 7
        + 8
        + 9
        +10
        +11
        +12
        +13
        +14
        +15
        +16
        String userPw = "username:password";
        +String path = Paths.get(SecurityTransportClientDemo.class.getClassLoader().getResource(".").toURI()).toString();
        + 
        +Settings settings = Settings.builder()
        +                 .put("opendistro_security.ssl.transport.enforce_hostname_verification", false)
        +                 .put("opendistro_security.ssl.transport.keystore_filepath", path + "/transport-keystore.jks")
        +                 .put("opendistro_security.ssl.transport.keystore_password", "tscpass")
        +                 .put("opendistro_security.ssl.transport.truststore_filepath", path + "/truststore.jks")
        +                 .put("client.transport.ignore_cluster_name", "true")
        +                 .put("client.transport.sniff", false).build();
        + 
        +TransportClient client = (new PreBuiltTransportClient(settings, new Class[]{OpenDistroSecurityPlugin.class})).addTransportAddress(new
        +                      TransportAddress(InetAddress.getByName(ip), 9300));
        + 
        +String base64UserPw = Base64.getEncoder().encodeToString(userPw.getBytes("utf-8")); 
        +               client.threadPool().getThreadContext().putHeader("Authorization", "Basic " + base64UserPw);
        +
        +
        +
        +
      • Create a client using the RestHighLevelClient class.

        The HttpHost class is used to process HTTP requests. In the HttpHost class, the CredentialsProvider and SSLIOSessionStrategy configuration parameter classes are encapsulated in the customized SecuredHttpClientConfigCallback class to configure request connection parameters.

        +

        SecuredHttpClientConfigCallback: encapsulates all user-defined connection parameters.

        +

        CredentialsProvider: Elasticsearch API, which is used to encapsulate the username and password using the method provided by Elasticsearch.

        +

        SSLIOSessionStrategy: Configure SSL parameters, including the SSL domain name authentication mode and certificate processing mode. The SSLContext class is used to encapsulate related settings.

        +

        You can access a cluster through either of the following modes: ignore certificates and use certificates.

        +
        • Ignore all certificates and skip certificate authentication.

          Construct the TrustManager. Use the default X509TrustManager. Do not rewrite any method. That is, ignore all related operations.

          +
          Construct the SSLContext. Use TrustManager in the preceding step as the parameter and construct the SSLContext with the default method.
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          +29
          +30
          +31
          +32
          +33
          +34
          static TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
          +        @Override
          +        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
          +            
          +        }
          +        @Override
          +        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
          +            
          +        }
          +        @Override
          +        public X509Certificate[] getAcceptedIssuers() {
          +            return null;
          +        }
          +    }};
          + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
          +        credentialsProvider.setCredentials(AuthScope.ANY,
          +                new UsernamePasswordCredentials(userName, password));
          +        SSLContext sc = null;
          +        try{
          +            sc = SSLContext.getInstance("SSL");
          +            sc.init(null, trustAllCerts, new SecureRandom());
          +        }catch(KeyManagementException e){ 
          +                e.printStackTrace();
          +        }catch(NoSuchAlgorithmException e){ 
          +                e.printStackTrace();
          +        }
          +        SSLIOSessionStrategy sessionStrategy = new SSLIOSessionStrategy(sc, new NullHostNameVerifier());
          + 
          +        SecuredHttpClientConfigCallback httpClientConfigCallback = new SecuredHttpClientConfigCallback(sessionStrategy,credentialsProvider);
          + 
          +        RestClientBuilder builder = RestClient.builder(new HttpHost(clusterAddress, 9200,
          +                                "https")).setHttpClientConfigCallback(httpClientConfigCallback);
          + 
          +        RestHighLevelClient client = new RestHighLevelClient(builder);
          +
          +
          +
          +
        • Upload the downloaded certificate (CloudSearchService.cer) for accessing the cluster.
          Upload the certificate to the client and use the keytool to convert the certificate into a format that can be read by Java. (The default password of the keytool is changeit).
          keytool -import -alias custom name -keystore path for exporting the certificate and its new name -file path for uploading the certificate
          +
          +

          Customize the TrustManager class, which is inherited from the X509TrustManager. Read the certificate generated in the preceding step, add it to the trust certificate, and rewrite the three methods of the X509TrustManager interface.

          +
          Construct the SSLContext. Use TrustManager in the preceding step as the parameter and construct the SSLContext with the default method.
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          +29
          +30
          +31
          +32
          +33
          +34
          +35
          +36
          +37
          +38
          +39
          +40
          +41
          +42
          +43
          +44
          public static class MyX509TrustManager implements X509TrustManager {
          + 
          +        X509TrustManager sunJSSEX509TrustManager;
          +        MyX509TrustManager() throws Exception {
          +            File file = new File("certification file path");
          +            if (file.isFile() == false) {
          +                throw new Exception("Wrong Certification Path");
          +            }
          +            System.out.println("Loading KeyStore " + file + "...");
          +            InputStream in = new FileInputStream(file);
          +            KeyStore ks = KeyStore.getInstance("JKS");
          +            ks.load(in, "changeit".toCharArray());
          +            TrustManagerFactory tmf =
          +                    TrustManagerFactory.getInstance("SunX509", "SunJSSE");
          +            tmf.init(ks);
          +            TrustManager tms [] = tmf.getTrustManagers();
          +            for (int i = 0; i < tms.length; i++) {
          +                if (tms[i] instanceof X509TrustManager) {
          +                    sunJSSEX509TrustManager = (X509TrustManager) tms[i];
          +                    return;
          +                }
          +            }
          +            throw new Exception("Couldn't initialize");
          +        }
          + 
          +final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
          +        credentialsProvider.setCredentials(AuthScope.ANY,
          +                new UsernamePasswordCredentials(userName, password));
          + 
          +        SSLContext sc = null;
          +        try{
          +            TrustManager[] tm = {new MyX509TrustManager()};
          +            sc = SSLContext.getInstance("SSL", "SunJSSE");
          +            sc.init(null, tm, new SecureRandom());
          +        }catch (Exception e) { 
          +            e.printStackTrace();
          +        }
          + 
          +        SSLIOSessionStrategy sessionStrategy = new SSLIOSessionStrategy(sc, new NullHostNameVerifier());
          + 
          +        SecuredHttpClientConfigCallback httpClientConfigCallback = new SecuredHttpClientConfigCallback(sessionStrategy,credentialsProvider);
          +        RestClientBuilder builder = RestClient.builder(new HttpHost(clusterAddress, 9200, "https"))
          +                .setHttpClientConfigCallback(httpClientConfigCallback);
          +        RestHighLevelClient client = new RestHighLevelClient(builder);
          +
          +
          +
          +
        +
        • Sample code

          When the code is running, transfer three parameters: access address, cluster login username, and password. The request is GET /_search{"query": {"match_all": {}}}.

          +

          The access address of a cluster with security mode enabled usually starts with https.

          +
          +

          ESSecuredClient class (Ignore certificates)

          +
            1
          +  2
          +  3
          +  4
          +  5
          +  6
          +  7
          +  8
          +  9
          + 10
          + 11
          + 12
          + 13
          + 14
          + 15
          + 16
          + 17
          + 18
          + 19
          + 20
          + 21
          + 22
          + 23
          + 24
          + 25
          + 26
          + 27
          + 28
          + 29
          + 30
          + 31
          + 32
          + 33
          + 34
          + 35
          + 36
          + 37
          + 38
          + 39
          + 40
          + 41
          + 42
          + 43
          + 44
          + 45
          + 46
          + 47
          + 48
          + 49
          + 50
          + 51
          + 52
          + 53
          + 54
          + 55
          + 56
          + 57
          + 58
          + 59
          + 60
          + 61
          + 62
          + 63
          + 64
          + 65
          + 66
          + 67
          + 68
          + 69
          + 70
          + 71
          + 72
          + 73
          + 74
          + 75
          + 76
          + 77
          + 78
          + 79
          + 80
          + 81
          + 82
          + 83
          + 84
          + 85
          + 86
          + 87
          + 88
          + 89
          + 90
          + 91
          + 92
          + 93
          + 94
          + 95
          + 96
          + 97
          + 98
          + 99
          +100
          +101
          +102
          +103
          +104
          +105
          +106
          +107
          +108
          +109
          +110
          +111
          package securitymode;
          +
          +import org.apache.http.auth.AuthScope;
          +import org.apache.http.auth.UsernamePasswordCredentials;
          +import org.apache.http.client.CredentialsProvider;
          +import org.apache.http.impl.client.BasicCredentialsProvider;
          +import org.apache.http.HttpHost;
          +import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
          +import org.elasticsearch.action.search.SearchRequest;
          +import org.elasticsearch.action.search.SearchResponse;
          +import org.elasticsearch.client.RequestOptions;
          +import org.elasticsearch.client.RestClient;
          +import org.elasticsearch.client.RestClientBuilder;
          +import org.elasticsearch.client.RestHighLevelClient;
          +import org.elasticsearch.index.query.QueryBuilders;
          +import org.elasticsearch.search.SearchHit;
          +import org.elasticsearch.search.SearchHits;
          +import org.elasticsearch.search.builder.SearchSourceBuilder;
          +
          +import java.io.IOException;
          +import java.security.KeyManagementException;
          +import java.security.NoSuchAlgorithmException;
          +import java.security.SecureRandom;
          +import java.security.cert.CertificateException;
          +import java.security.cert.X509Certificate;
          +
          +import javax.net.ssl.HostnameVerifier;
          +import javax.net.ssl.SSLContext;
          +import javax.net.ssl.SSLSession;
          +import javax.net.ssl.TrustManager;
          +import javax.net.ssl.X509TrustManager;
          +
          +public class ESSecuredClientIgnoreCerDemo {
          +
          +    public static void main(String[] args) {
          +        String clusterAddress = args[0];
          +        String userName = args[1];
          +        String password = args[2];
          +       // Create a client.
          +        RestHighLevelClient client = initESClient(clusterAddress, userName, password);
          +        try {
          +         // Search match_all, which is equivalent to {\"query\": {\"match_all\": {}}}.
          +            SearchRequest searchRequest = new SearchRequest();
          +            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
          +            searchSourceBuilder.query(QueryBuilders.matchAllQuery());
          +            searchRequest.source(searchSourceBuilder);
          +
          +            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
          +            System.out.println("query result: " + searchResponse.toString());
          +            SearchHits hits = searchResponse.getHits();
          +            for (SearchHit hit : hits) {
          +                System.out.println(hit.getSourceAsString());
          +            }
          +            System.out.println("query success");
          +            Thread.sleep(2000L);
          +        } catch (InterruptedException | IOException e) {
          +            e.printStackTrace();
          +        } finally {
          +            try {
          +                client.close();
          +                System.out.println("close client");
          +            } catch (IOException e) {
          +                e.printStackTrace();
          +            }
          +        }
          +    }
          +
          +    private static RestHighLevelClient initESClient(String clusterAddress, String userName, String password) {
          +        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
          +        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
          +        SSLContext sc = null;
          +        try {
          +            sc = SSLContext.getInstance("SSL");
          +            sc.init(null, trustAllCerts, new SecureRandom());
          +        } catch (KeyManagementException | NoSuchAlgorithmException e) {
          +            e.printStackTrace();
          +        }
          +        SSLIOSessionStrategy sessionStrategy = new SSLIOSessionStrategy(sc, new NullHostNameVerifier());
          +        SecuredHttpClientConfigCallback httpClientConfigCallback = new SecuredHttpClientConfigCallback(sessionStrategy,
          +            credentialsProvider);
          +        RestClientBuilder builder = RestClient.builder(new HttpHost(clusterAddress, 9200, "https"))
          +            .setHttpClientConfigCallback(httpClientConfigCallback);
          +        RestHighLevelClient client = new RestHighLevelClient(builder);
          +        return client;
          +    }
          +
          +    static TrustManager[] trustAllCerts = new TrustManager[] {
          +        new X509TrustManager() {
          +            @Override
          +            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
          +            }
          +
          +            @Override
          +            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
          +            }
          +
          +            @Override
          +            public X509Certificate[] getAcceptedIssuers() {
          +                return null;
          +            }
          +        }
          +    };
          +
          +    public static class NullHostNameVerifier implements HostnameVerifier {
          +        @Override
          +        public boolean verify(String arg0, SSLSession arg1) {
          +            return true;
          +        }
          +    }
          +
          +}
          +
          +
          +

          ESSecuredClient class (Uses certificates)

          +
            1
          +  2
          +  3
          +  4
          +  5
          +  6
          +  7
          +  8
          +  9
          + 10
          + 11
          + 12
          + 13
          + 14
          + 15
          + 16
          + 17
          + 18
          + 19
          + 20
          + 21
          + 22
          + 23
          + 24
          + 25
          + 26
          + 27
          + 28
          + 29
          + 30
          + 31
          + 32
          + 33
          + 34
          + 35
          + 36
          + 37
          + 38
          + 39
          + 40
          + 41
          + 42
          + 43
          + 44
          + 45
          + 46
          + 47
          + 48
          + 49
          + 50
          + 51
          + 52
          + 53
          + 54
          + 55
          + 56
          + 57
          + 58
          + 59
          + 60
          + 61
          + 62
          + 63
          + 64
          + 65
          + 66
          + 67
          + 68
          + 69
          + 70
          + 71
          + 72
          + 73
          + 74
          + 75
          + 76
          + 77
          + 78
          + 79
          + 80
          + 81
          + 82
          + 83
          + 84
          + 85
          + 86
          + 87
          + 88
          + 89
          + 90
          + 91
          + 92
          + 93
          + 94
          + 95
          + 96
          + 97
          + 98
          + 99
          +100
          +101
          +102
          +103
          +104
          +105
          +106
          +107
          +108
          +109
          +110
          +111
          +112
          +113
          +114
          +115
          +116
          +117
          +118
          +119
          +120
          +121
          +122
          +123
          +124
          +125
          +126
          +127
          +128
          +129
          +130
          +131
          +132
          +133
          +134
          +135
          +136
          +137
          +138
          +139
          +140
          +141
          +142
          +143
          +144
          package securitymode;
          +
          +import org.apache.http.auth.AuthScope;
          +import org.apache.http.auth.UsernamePasswordCredentials;
          +import org.apache.http.client.CredentialsProvider;
          +import org.apache.http.impl.client.BasicCredentialsProvider;
          +import org.apache.http.HttpHost;
          +import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
          +import org.elasticsearch.action.search.SearchRequest;
          +import org.elasticsearch.action.search.SearchResponse;
          +import org.elasticsearch.client.RequestOptions;
          +import org.elasticsearch.client.RestClient;
          +import org.elasticsearch.client.RestClientBuilder;
          +import org.elasticsearch.client.RestHighLevelClient;
          +import org.elasticsearch.index.query.QueryBuilders;
          +import org.elasticsearch.search.SearchHit;
          +import org.elasticsearch.search.SearchHits;
          +import org.elasticsearch.search.builder.SearchSourceBuilder;
          +
          +import java.io.File;
          +import java.io.FileInputStream;
          +import java.io.IOException;
          +import java.io.InputStream;
          +import java.security.KeyStore;
          +import java.security.SecureRandom;
          +import java.security.cert.CertificateException;
          +import java.security.cert.X509Certificate;
          +
          +import javax.net.ssl.HostnameVerifier;
          +import javax.net.ssl.SSLContext;
          +import javax.net.ssl.SSLSession;
          +import javax.net.ssl.TrustManager;
          +import javax.net.ssl.TrustManagerFactory;
          +import javax.net.ssl.X509TrustManager;
          +
          +public class ESSecuredClientWithCerDemo {
          +
          +    public static void main(String[] args) {
          +        String clusterAddress = args[0];
          +        String userName = args[1];
          +        String password = args[2];
          +        String cerFilePath = args[3];
          +        String cerPassword = args[4];
          +       // Create a client.
          +        RestHighLevelClient client = initESClient(clusterAddress, userName, password, cerFilePath, cerPassword);
          +        try {
          +         // Search match_all, which is equivalent to {\"query\": {\"match_all\": {}}}.
          +            SearchRequest searchRequest = new SearchRequest();
          +            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
          +            searchSourceBuilder.query(QueryBuilders.matchAllQuery());
          +            searchRequest.source(searchSourceBuilder);
          +
          +            // query
          +            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
          +            System.out.println("query result: " + searchResponse.toString());
          +            SearchHits hits = searchResponse.getHits();
          +            for (SearchHit hit : hits) {
          +                System.out.println(hit.getSourceAsString());
          +            }
          +            System.out.println("query success");
          +            Thread.sleep(2000L);
          +        } catch (InterruptedException | IOException e) {
          +            e.printStackTrace();
          +        } finally {
          +            try {
          +                client.close();
          +                System.out.println("close client");
          +            } catch (IOException e) {
          +                e.printStackTrace();
          +            }
          +        }
          +    }
          +
          +    private static RestHighLevelClient initESClient(String clusterAddress, String userName, String password,
          +        String cerFilePath, String cerPassword) {
          +        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
          +        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
          +        SSLContext sc = null;
          +        try {
          +            TrustManager[] tm = {new MyX509TrustManager(cerFilePath, cerPassword)};
          +            sc = SSLContext.getInstance("SSL", "SunJSSE");
          +            //You can also use SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
          +            sc.init(null, tm, new SecureRandom());
          +        } catch (Exception e) {
          +            e.printStackTrace();
          +        }
          +
          +        SSLIOSessionStrategy sessionStrategy = new SSLIOSessionStrategy(sc, new NullHostNameVerifier());
          +        SecuredHttpClientConfigCallback httpClientConfigCallback = new SecuredHttpClientConfigCallback(sessionStrategy,
          +            credentialsProvider);
          +        RestClientBuilder builder = RestClient.builder(new HttpHost(clusterAddress, 9200, "https"))
          +            .setHttpClientConfigCallback(httpClientConfigCallback);
          +        RestHighLevelClient client = new RestHighLevelClient(builder);
          +        return client;
          +    }
          +
          +    public static class MyX509TrustManager implements X509TrustManager {
          +        X509TrustManager sunJSSEX509TrustManager;
          +
          +        MyX509TrustManager(String cerFilePath, String cerPassword) throws Exception {
          +            File file = new File(cerFilePath);
          +            if (!file.isFile()) {
          +                throw new Exception("Wrong Certification Path");
          +            }
          +            System.out.println("Loading KeyStore " + file + "...");
          +            InputStream in = new FileInputStream(file);
          +            KeyStore ks = KeyStore.getInstance("JKS");
          +            ks.load(in, cerPassword.toCharArray());
          +            TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509", "SunJSSE");
          +            tmf.init(ks);
          +            TrustManager[] tms = tmf.getTrustManagers();
          +            for (TrustManager tm : tms) {
          +                if (tm instanceof X509TrustManager) {
          +                    sunJSSEX509TrustManager = (X509TrustManager) tm;
          +                    return;
          +                }
          +            }
          +            throw new Exception("Couldn't initialize");
          +        }
          +
          +        @Override
          +        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
          +
          +        }
          +
          +        @Override
          +        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
          +
          +        }
          +
          +        @Override
          +        public X509Certificate[] getAcceptedIssuers() {
          +            return new X509Certificate[0];
          +        }
          +    }
          +
          +    public static class NullHostNameVerifier implements HostnameVerifier {
          +        @Override
          +        public boolean verify(String arg0, SSLSession arg1) {
          +            return true;
          +        }
          +    }
          +
          +}
          +
          +
          +

          SecuredHttpClientConfigCallback class

          +
           1
          + 2
          + 3
          + 4
          + 5
          + 6
          + 7
          + 8
          + 9
          +10
          +11
          +12
          +13
          +14
          +15
          +16
          +17
          +18
          +19
          +20
          +21
          +22
          +23
          +24
          +25
          +26
          +27
          +28
          +29
          +30
          +31
          +32
          +33
          +34
          +35
          +36
          +37
          +38
          +39
          +40
          +41
          +42
          +43
          +44
          +45
          +46
          +47
          +48
          +49
          +50
          +51
          +52
          +53
          +54
          +55
          +56
          +57
          +58
          +59
          import org.apache.http.client.CredentialsProvider;
          +import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
          +import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
          +import org.elasticsearch.client.RestClientBuilder;
          +import org.elasticsearch.common.Nullable;
          +import java.util.Objects;
          +class SecuredHttpClientConfigCallback implements RestClientBuilder.HttpClientConfigCallback {
          +    @Nullable
          +    private final CredentialsProvider credentialsProvider;
          +    /**
          +     * The {@link SSLIOSessionStrategy} for all requests to enable SSL / TLS encryption.
          +     */
          +    private final SSLIOSessionStrategy sslStrategy;
          +    /**
          +     * Create a new {@link SecuredHttpClientConfigCallback}.
          +     *
          +     * @param credentialsProvider The credential provider, if a username/password have been supplied
          +     * @param sslStrategy         The SSL strategy, if SSL / TLS have been supplied
          +     * @throws NullPointerException if {@code sslStrategy} is {@code null}
          +     */
          +    SecuredHttpClientConfigCallback(final SSLIOSessionStrategy sslStrategy,
          +                                    @Nullable final CredentialsProvider credentialsProvider) {
          +        this.sslStrategy = Objects.requireNonNull(sslStrategy);
          +        this.credentialsProvider = credentialsProvider;
          +    }
          +    /**
          +     * Get the {@link CredentialsProvider} that will be added to the HTTP client.
          +     *
          +     * @return Can be {@code null}.
          +     */
          +    @Nullable
          +    CredentialsProvider getCredentialsProvider() {
          +        return credentialsProvider;
          +    }
          +    /**
          +     * Get the {@link SSLIOSessionStrategy} that will be added to the HTTP client.
          +     *
          +     * @return Never {@code null}.
          +     */
          +    SSLIOSessionStrategy getSSLStrategy() {
          +        return sslStrategy;
          +    }
          +    /**
          +     * Sets the {@linkplain HttpAsyncClientBuilder#setDefaultCredentialsProvider(CredentialsProvider) credential provider},
          +     *
          +     * @param httpClientBuilder The client to configure.
          +     * @return Always {@code httpClientBuilder}.
          +     */
          +    @Override
          +    public HttpAsyncClientBuilder customizeHttpClient(final HttpAsyncClientBuilder httpClientBuilder) {
          +        // enable SSL / TLS
          +        httpClientBuilder.setSSLStrategy(sslStrategy);
          +        // enable user authentication
          +        if (credentialsProvider != null) {
          +            httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
          +        }
          +        return httpClientBuilder;
          +    }
          +}
          +
          +
          +
          pom.xml file
          <?xml version="1.0" encoding="UTF-8"?>
          +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          +         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          +    <modelVersion>4.0.0</modelVersion>
          +    <groupId>1</groupId>
          +    <artifactId>ESClient</artifactId>
          +    <version>1.0-SNAPSHOT</version>
          +    <name>ESClient</name>
          +    <!-- FIXME change it to the project's website -->
          +    <url>http://www.example.com</url>
          +    <properties>
          +        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          +        <maven.compiler.source>1.7</maven.compiler.source>
          +        <maven.compiler.target>1.7</maven.compiler.target>
          +    </properties>
          +    <dependencies>
          +        <dependency>
          +            <groupId>junit</groupId>
          +            <artifactId>junit</artifactId>
          +            <version>4.11</version>
          +            <scope>test</scope>
          +        </dependency>
          +        <dependency>
          +            <groupId>org.elasticsearch.client</groupId>
          +            <artifactId>transport</artifactId>
          +            <version>6.5.4</version>
          +        </dependency>
          +        <dependency>
          +            <groupId>org.elasticsearch</groupId>
          +            <artifactId>elasticsearch</artifactId>
          +            <version>6.5.4</version>
          +        </dependency>
          +        <dependency>
          +            <groupId>org.elasticsearch.client</groupId>
          +            <artifactId>elasticsearch-rest-high-level-client</artifactId>
          +            <version>6.5.4</version>
          +        </dependency>
          +        <dependency>
          +            <groupId>org.apache.logging.log4j</groupId>
          +            <artifactId>log4j-api</artifactId>
          +            <version>2.7</version>
          +        </dependency>
          +        <dependency>
          +            <groupId>org.apache.logging.log4j</groupId>
          +            <artifactId>log4j-core</artifactId>
          +            <version>2.7</version>
          +        </dependency>
          +    </dependencies>
          +    <build>
          +        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          +            <plugins>
          +                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
          +                <plugin>
          +                    <artifactId>maven-clean-plugin</artifactId>
          +                    <version>3.1.0</version>
          +                </plugin>
          +                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
          +                <plugin>
          +                    <artifactId>maven-resources-plugin</artifactId>
          +                    <version>3.0.2</version>
          +                </plugin>
          +                <plugin>
          +                    <artifactId>maven-compiler-plugin</artifactId>
          +                    <version>3.8.0</version>
          +                </plugin>
          +                <plugin>
          +                    <artifactId>maven-surefire-plugin</artifactId>
          +                    <version>2.22.1</version>
          +                </plugin>
          +                <plugin>
          +                    <artifactId>maven-jar-plugin</artifactId>
          +                    <version>3.0.2</version>
          +                </plugin>
          +                <plugin>
          +                    <artifactId>maven-install-plugin</artifactId>
          +                    <version>2.5.2</version>
          +                </plugin>
          +                <plugin>
          +                    <artifactId>maven-deploy-plugin</artifactId>
          +                    <version>2.8.2</version>
          +                </plugin>
          +                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
          +                <plugin>
          +                    <artifactId>maven-site-plugin</artifactId>
          +                    <version>3.7.1</version>
          +                </plugin>
          +                <plugin>
          +                    <artifactId>maven-project-info-reports-plugin</artifactId>
          +                    <version>3.0.0</version>
          +                </plugin>
          +            </plugins>
          +        </pluginManagement>
          +    </build>
          +</project>
          +
          +
        +

        +
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0014.html b/docs/css/umn/css_01_0014.html new file mode 100644 index 000000000..44b761523 --- /dev/null +++ b/docs/css/umn/css_01_0014.html @@ -0,0 +1,18 @@ + + +

      Restarting a Cluster

      +

      If a cluster becomes faulty, you can restart it to check if it can run normally. Only clusters in the Available or Abnormal status can be restarted.

      +

      Quick Restart

      • The cluster is in the Available or Abnormal status.
      • There are no running tasks, such as importing data, searching for data on the cluster.
      +
      • The cluster will be unavailable during quick restart. If quick restart fails, data may be lost or the cluster may become unavailable. Therefore, exercise caution when performing this operation.
      • If the cluster you want to restart is available, you are advised to stop all data processing tasks on the cluster before restarting it. If there are running tasks, for example, importing data, searching for data, the transmitted data may be lost upon the restart. Therefore you are advised to stop all cluster tasks before the quick restart.
      +
      +
      1. Log in to the CSS management console.
      2. Click Clusters to switch to the Clusters page. In the row that contains the cluster you want to restart, click More > Restart in the Operation column. The Restart Cluster page is displayed. Select Quick Restart.

        +
        • You can quick restart nodes by Node type or Node name. If you select Node type, then you can select multiple node types and perform quick restart at the time. If you select Node name, you can perform quick restart only on one node at a time.
        • The cluster is unavailable during quick restart.
        +
      3. Refresh the page and check the cluster status. During the restart, the cluster status is Processing, and the task status is Restarting. If the cluster status changes to Available, the cluster has been restarted successfully. If the cluster status changes to Abnormal, contact the technical support for troubleshooting.
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0015.html b/docs/css/umn/css_01_0015.html new file mode 100644 index 000000000..5d4ef7b44 --- /dev/null +++ b/docs/css/umn/css_01_0015.html @@ -0,0 +1,15 @@ + + +

      Deleting a Cluster

      +

      You can delete clusters you no longer require. If you delete a cluster, snapshots created for the cluster will not be deleted and will be saved in the OBS bucket.

      +

      After you delete a cluster, its data cannot be restored. Exercise caution when deleting a cluster.

      +
      +

      Procedure

      1. Log in to the CSS management console.
      2. Click Clusters to switch to the Clusters page. In the row that contains the cluster you want to restart, click More > Delete in the Operation column.
      3. In the displayed dialog box, enter the name of the cluster to be deleted and click OK.
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0024.html b/docs/css/umn/css_01_0024.html new file mode 100644 index 000000000..89f4526c6 --- /dev/null +++ b/docs/css/umn/css_01_0024.html @@ -0,0 +1,145 @@ + + +

      Using Kibana or APIs to Import Data to Elasticsearch

      +

      You can import data in various formats, such as JSON and CSV, to Elasticsearch in CSS by using Kibana or APIs.

      +

      Importing Data Using Kibana

      Before importing data, ensure that you can use Kibana to access the cluster. The following procedure illustrates how to use the POST command to import data.
      1. Log in to the CSS management console.
      2. Locate the target cluster and click Access Kibana in the Operation column to log in to Kibana.
      3. Click Dev Tools in the navigation tree on the left.
      4. (Optional) On the Console page, run the related command to create an index for the data to be stored and specify a custom mapping to define the data type:

        If there is an available index in the cluster where you want to import data, skip this step. If there is no available index, create an index by referring to the following sample code.

        +

        For example, on the Console page of Kibana, run the following command to create an index named my_store and specify a user-defined mapping to define the data type:

        +
        Versions earlier than 7.x
        PUT /my_store
        +{
        +    "settings": {
        +        "number_of_shards": 1
        +    },
        +    "mappings": {
        +        "products": {
        +            "properties": {
        +                "productName": {
        +                    "type": "text"
        +                },
        +                "size": {
        +                    "type": "keyword"
        +                }
        +            }
        +        }
        +    }
        +}
        +
        +

        Versions later than 7.x

        +
        PUT /my_store
        +{
        +    "settings": {
        +        "number_of_shards": 1
        +    },
        +    "mappings": {
        +        "properties": {
        +            "productName": {
        +                "type": "text"
        +            },
        +            "size": {
        +                "type": "keyword"
        +            }
        +        }
        +    }
        +}
        +
      5. Run commands to import data. For example, run the following command to import a piece of data:
        Versions earlier than 7.x
        POST /my_store/products/_bulk 
        +{"index":{}} 
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"L"}
        +
        +

        Versions later than 7.x

        +
        POST /my_store/_bulk  
        +{"index":{}}  
        +{"productName":"Latest art shirts for women in 2017 autumn","size":"L"}
        +

        The command output is similar to that shown in Figure 1. If the value of the errors field in the result is false, the data is successfully imported.

        +
        Figure 1 Response message
        +
      +
      +
      +

      Importing Data Using APIs

      The following procedure illustrates how you can import a JSON data file using bulk APIs through the cURL command.

      +

      You are advised to import a file smaller than 50 MB.

      +
      +
      1. Log in to the ECS that you use to access the cluster.

        For details about how to access a cluster, see Accessing a Cluster by Calling Elasticsearch APIs on the ECS That Is Located in the Same VPC as the Cluster.

        +
      2. Run the following command to import JSON data:
        In the command, replace the value of {Private network address and port number of the node} with the private network address and port number of a node in the cluster. If the node fails to work, the command will fail to be executed. If the cluster contains multiple nodes, you can replace the value of {Private network address and port number of the node} with the private network address and port number of any available node in the cluster. If the cluster contains only one node, restore the node and execute the command again. test.json indicates the JSON file whose data is to be imported.
        curl -X PUT "http://{Private network address and port number of the node} /_bulk" -H 'Content-Type: application/json' --data-binary @test.json
        +
        +

        If communication encryption has been enabled on the cluster where you will import data, you need to send HTTPS requests and add -k to the cURL command.

        +
        curl -X PUT -k "https://{Private network address and port number of the node} /_bulk" -H 'Content-Type: application/json' --data-binary @test.json
        +

        The value of the -X parameter is a command and that of the -H parameter is a message header. In the preceding command, PUT is the value of the -X parameter and 'Content-Type: application/json' --data-binary @test.json is the value of the -H parameter. Do not add -k between a parameter and its value.

        +
        +

        Example 1: In this example, assume that you need to import data in the testdata.json file to an Elasticsearch cluster, where communication encryption is disabled and the private network address and port number of one node are 192.168.0.90 and 9200 respectively. The data in the testdata.json file is as follows:

        +

        Versions earlier than 7.x

        +
        {"index": {"_index":"my_store","_type":"products"}}
        +{"productName":"Autumn new woman blouses 2019","size":"M"}
        +{"index": {"_index":"my_store","_type":"products"}}
        +{"productName":"Autumn new woman blouses 2019","size":"L"}
        +

        Versions later than 7.x

        +
        {"index": {"_index":"my_store"}}
        +{"productName":"Autumn new woman blouse 2019","size":"M"}
        +{"index": {"_index":"my_store"}}
        +{"productName":"Autumn new woman blouse 2019","size":"L"}
        +

        Perform the following steps to import the data:

        +
        1. Run the following command to create an index named my_store:
          Versions earlier than 7.x
          curl -X PUT http://192.168.0.90:9200/my_store -H 'Content-Type: application/json' -d '
          + { 
          +   "settings": { 
          +     "number_of_shards": 1 
          +   }, 
          +   "mappings": { 
          +     "products": { 
          +       "properties": { 
          +         "productName": { 
          +           "type": "text" 
          +           }, 
          +         "size": { 
          +           "type": "keyword" 
          +         } 
          +       } 
          +     } 
          +   } 
          + }'
          +
          +

          Versions later than 7.x

          +
          curl -X PUT http://192.168.0.90:9200/my_store -H 'Content-Type: application/json' -d '
          +{
          +    "settings": {
          +        "number_of_shards": 1
          +    },
          +    "mappings": {
          +        "properties": {
          +            "productName": {
          +                "type": "text"
          +            },
          +            "size": {
          +                "type": "keyword"
          +            }
          +        }
          +    }
          +}'
          +
        2. Run the following command to import the data in the testdata.json file:
          curl -X PUT "http://192.168.0.90:9200/_bulk" -H 'Content-Type: application/json' --data-binary @testdata.json
          +
        +

        Example 2: In this example, assume that you need to import data in the testdata.json file to an Elasticsearch cluster, where communication encryption has been enabled and the node access address and content in the testdata.json are the same as those in example 1. Perform the following steps to import the data:

        +
        1. Run the following command to create an index named my_store:
          curl -X PUT -k https://192.168.0.90:9200/my_store -H 'Content-Type: application/json' -d '
          + { 
          +   "settings": { 
          +     "number_of_shards": 1 
          +   }, 
          +   "mappings": { 
          +     "products": { 
          +       "properties": { 
          +         "productName": { 
          +           "type": "text" 
          +           }, 
          +         "size": { 
          +           "type": "keyword" 
          +         } 
          +       } 
          +     } 
          +   } 
          + }'
          +
        2. Run the following command to import the data in the testdata.json file:
          curl -X PUT -k "https://192.168.0.90:9200/_bulk" -H 'Content-Type: application/json' --data-binary @testdata.json
          +
        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0031.html b/docs/css/umn/css_01_0031.html new file mode 100644 index 000000000..d91ccd6d7 --- /dev/null +++ b/docs/css/umn/css_01_0031.html @@ -0,0 +1,29 @@ + + +

      Modifying Specifications

      +

      You can scale-in/out your cluster nodes to improve resource utilization and reduce O&M costs.

      +

      Scaling out Clusters

      1. Log in to the CSS management console.
      2. Choose Clusters. Locate the row containing the target cluster and click Modify in the Operation column.
      3. On the displayed Modify Configuration page, specify New Nodes and Node Storage Capacity.

        If none of the master nodes, client nodes, and cold data nodes are enabled in your cluster, you can modify the number of nodes or the node storage capacity. You can add 1 to 32 nodes.

        +

        If your cluster has a master node, client node, or cold data node enabled, you can modify the number of master nodes, client nodes, cold data nodes, or the node storage capacity. You can add 1 to 200 nodes, including a maximum of nine master nodes and 32 client nodes.

        +
        • If you only expand the node quantity, the Node Specifications and Node Storage Capacity settings of newly added nodes will be the same as the settings you specified during cluster creation.
        • If none of the master nodes, client nodes, and cold data nodes are enabled in your cluster, and you increase both the node quantity and the storage capacity, the Node Specifications settings of newly added nodes will be the same as the settings you specified during cluster creation, whereas the Node Storage Capacity settings of all nodes will be changed to the new storage capacity.
        • If master nodes, client nodes, or cold data nodes are enabled in your cluster, you can increase the quantity and storage capacity of a certain type of nodes, for example, master nodes.
        • If none of the master nodes, client nodes, and cold data nodes are enabled in your cluster, and you only change the Node Storage Capacity, the storage capacity of all the nodes in the cluster will be changed.
        • If master nodes, client nodes, or cold data nodes are enabled in your cluster, you can increase the storage capacity of a certain type of nodes, for example, master nodes.
        • You can expand the storage capacity six times at most.
        • Services will not be interrupted during the cluster scale-out process.
        +
        +
        Figure 1 Modifying specifications
        +
      4. Click Next.
      5. On the displayed Details page, confirm the specifications and click Submit.
      6. Click Back to Cluster List to switch to the Clusters page. If Scaling out is displayed in the Task Status column, the cluster specifications are being modified. If Available is displayed in the Cluster Status column, the modification is successful.
      +
      +

      Scaling in Clusters

      1. Log in to the CSS management console.
      2. Click Clusters. Locate the row containing the target cluster and click Modify in the Operation column.
      3. On the displayed Modify Configuration page, specify New Nodes.
        • For a cluster without master nodes, the number of remaining data nodes (including cold data nodes and other types of nodes) after scale-in must be greater than half of the original node number, and greater than the maximum number of index replicas.
        • Ensure each AZ under each node type has at least one node after the scale-in.
        • For a cluster with master nodes, after scale-in, there has to be an odd number of master nodes, and there has to be at least three of them.
        • Ensure that the disk usage after scale-in is less than 80%.
        • Services will not be interrupted during the cluster scale-in process.
        • During scale-in, data on the node to be brought offline must be migrated to other nodes within 5 hours. Otherwise, the scale-in fails. If the data volume of a cluster is large, you are advised to perform the scale-in for multiple times.
        +
        +
      4. Click Next.
      5. On the displayed Details page, confirm the specifications and click Submit.
      6. Click Back to Cluster List to switch to the Clusters page. If Scaling in is displayed in the Task Status column, the cluster specifications are being modified. If Available is displayed in the Cluster Status column, the scale-in is successful.
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0032.html b/docs/css/umn/css_01_0032.html new file mode 100644 index 000000000..24a0a6a07 --- /dev/null +++ b/docs/css/umn/css_01_0032.html @@ -0,0 +1,259 @@ + + +

      Suggestions on Using Elasticsearch

      +

      Elasticsearch is an open-source search engine. This section provides some suggestions on using Elasticsearch to help you better use CSS.

      +

      Improving Indexing Efficiency

      • Sending data to Elasticsearch through multiple processes or threads

        A single thread that sends bulk requests is unlikely to max out the indexing capability of a cluster. However, to maximize utilization of cluster resources and improve data processing efficiency, send data through multiple threads or processes.

        +

        By testing, you can determine the optimal number of threads for bulk requests of the same size. You can progressively increase the number of threads until the CPU is saturated in the cluster. You are advised to use the nodes stats API to view the CPU status of a node. View the os.cpu.percent, os.cpu.load_average.1m, os.cpu.load_average.5m, and os.cpu.load_average.15m parameter settings for more details. For information on how to use the nodes stats API and parameter descriptions, see https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-nodes-stats.html#os-stats.

        +

        For example, check whether the CPU is saturated if two threads are used during execution of bulk requests. If it is not saturated, increase the number of threads. If the load or CPU is saturated when the number of threads reaches N, you are advised to use N threads (the optimal number according to your testing) to execute bulk requests and improve indexing efficiency.

        +
      • Increasing the refresh interval

        By default, each shard is automatically refreshed once per second. However, the refresh frequency is not applicable to all scenarios. If you use Elasticsearch to index a large number of log files and want to increase the indexing speed instead of obtaining near-real-time search performance, you can reduce the refresh frequency of each index.

        +
        PUT /my_logs
        +{
        +  "settings": {
        +    "refresh_interval": "30s"
        +  }
        +}
        +
      • Disabling refresh and replicas for initial loads

        If you need to import a large amount of data at a time, it is recommended that you disable refresh and replicas by setting refresh_interval to -1 and number_of_replicas to 0. After you import the data, set refresh_interval and number_of_replicas to the original values.

        +
      +
      +

      Selecting Appropriate Number of Shards and Replicas

      When you create index data, you are advised to specify the number of shards and replicas. Otherwise, default settings (five shards and one replica) will be used.

      +

      The shard quantity is strongly relevant to the indexing speed. Too many or too few shards will lead to slow indexing. If you specify too many shards, numerous files will be opened during retrieval, slowing down the communication between servers. If you specify too few shards, the index size of a single shard may be too large, slowing down the indexing speed.

      +

      Specify the shard quantity based on the node quantity, disk quantity, and index size. It is recommended that the size of a single shard not exceed 30 GB. The shard size is calculated using the following formula: Size of a shard = Total amount of data/Shard quantity

      +
      PUT /my_index
      +{
      +  "settings": {
      +    "number_of_shards":   1,
      +    "number_of_replicas":  0
      +  }
      +}
      +
      +

      Storing Data in Different Indices

      Elasticsearch relies on Lucene to index and store data and it suits dense data, which means that all documents have the same field.

      +
      • Avoiding putting unrelated data in the same index

        Do not put documents that have different data structures into the same index. You can consider creating some smaller indices and use fewer shards to store the documents into the indices.

        +
      • Avoiding putting different types in the same index

        It may save time and efforts to put different types of documents into an index. However, be aware that Elasticsearch does not store documents based on type. Therefore, putting different types into one index will slow down indexing. If your document types do not have similar mappings, put them in the same index.

        +
      • Avoiding field conflicts between different document types in an index

        Avoid two different types that have fields of the same name but different mappings.

        +
      +
      +

      Creating Indices by Time Range

      You are advised to create indices to store time-related data, such as log data, by time range, instead of storing all data in a super large index.

      +

      For example, you can store data in an index named by year (example: logs_2014) or by month (example: logs_2014-10). When the volume of data becomes very large, you can store data in an index named by day (example: logs_2014-10-24).

      +

      Creating indices by time range has the following advantages:

      +
      • Specifying a suitable number of shards and replicas based on the current volume of data

        You can flexibly set the number of shards and replicas for each index created by time range so that there is no need to set a large shard at the beginning. After the cluster capacity is expanded, the time range can be set to adapt to the cluster scale.

        +
      • Deleting old data by deleting old indices
        DELETE /logs_2014-09
        +
      • Switching between indices using the alias mechanism
        The following example illustrates how to delete index logs_2014-09 from alias mechanism logs_current and add index logs_2014-10.
        POST /_aliases
        +{
        +  "actions": [
        +    { "add":    { "alias": "logs_current",  "index": "logs_2014-10" }},
        +    { "remove": { "alias": "logs_current",  "index": "logs_2014-09" }}
        +  ]
        +}
        +
        +
      • Optimizing the indices that are no longer updated, such as indices generated last week or month, to increase query efficiency

        Combine multiple segments in the logs_2014-09-30 index into a shard, improving the query efficiency.

        +
        Versions earlier than 7.x
        PUT /logs_2014-09-30/_settings
        +{ "number_of_replicas": 0 }
        +
        +POST /logs_2014-09-30/_forcemerge?max_num_segments=1
        +
        +PUT /logs_2014-09-30/_settings
        +{ "number_of_replicas": 1 }
        +
        +

        Versions later than 7.x

        +
        PUT /logs_2014-09-30/_settings 
        +{ "number_of_replicas": 0 } 
        +
        +POST /logs_2014-09-30/_forcemerge
        +{
        +  "max_num_segments":1
        +}
        +
        +PUT /logs_2014-09-30/_settings 
        +{ "number_of_replicas": 1 }
        +
      +
      +

      Optimizing Index Configurations

      • Distinguishing between texts and keywords

        In Elasticsearch, the string field is divided into two new data types: text used for full-text search and keyword used for keyword search.

        +

        You are advised to configure exact-value fields without word segmentation, such as tags or enumerated values, as the keyword type.

        +

        Versions earlier than 7.x

        +
        PUT my_index1
        +{
        +  "mappings": {
        +    "my_type": {
        +      "properties": {
        +        "tags": {
        +          "type":  "keyword"
        +        },
        +        "full_name": {
        +          "type":  "text"
        +        }
        +      }
        +    }
        +  }
        +}
        +

        Versions later than 7.x

        +
        PUT my_index1 
        +{ 
        +  "mappings": { 
        +         "properties": { 
        +        "tags": { 
        +          "type":  "keyword" 
        +        }, 
        +        "full_name": { 
        +          "type":  "text" 
        +        } 
        +      } 
        +    } 
        +  }
        +
      • Aggregated statistics based on the text field

        Aggregated statistics based on the text field is not a common requirement. In Elasticsearch, to use aggregated statistics based on the text field, you need to enable fielddata (disabled by default). However, enabling fielddata will consume significant memory.

        +

        You are advised to conduct multifield mapping on the sub-word string to a text field for full-text search and a keyword field for aggregated statistics.

        +

        Versions earlier than 7.x

        +
        PUT my_index2
        +{
        +  "mappings": {
        +    "my_type": {
        +      "properties": {
        +        "full_name": {
        +          "type": "text",
        +          "fields": {
        +            "raw": { 
        +              "type":  "keyword"
        +            }
        +          }
        +        }
        +      }
        +    }
        +  }
        +}
        +

        Versions later than 7.x

        +
        PUT my_index2
        +{
        +    "mappings": {
        +            "properties": {
        +                "full_name": {
        +                    "type": "text",
        +                    "fields": {
        +                        "raw": {
        +                            "type": "keyword"
        +                        }
        +                    }
        +                }
        +            }
        +        }
        +  }
        +
      +
      +

      Using Index Templates

      Elasticsearch allows you to use index templates to control settings and mappings of certain created indices, for example, controlling the shard quantity to 1 and disabling the _all field. You can use the index template to control the settings you want to apply to the created indices.

      +
      • In the index template, you can use the template field to specify a wildcard.
      • If there are multiple index templates, you can use order to specify the overwriting sequence. The greater the value, the higher the priority.
      +

      In the following example, the index matching logstash-* uses the my_logs template, and the priority value of the my_logs template is 1.

      +

      Versions earlier than 7.x

      +
      PUT /_template/my_logs 
      +{
      +  "template": "logstash-*", 
      +  "order":    1, 
      +  "settings": {
      +    "number_of_shards": 1 
      +  },
      +  "mappings": {
      +    "_default_": { 
      +      "_all": {
      +        "enabled": false
      +      }
      +    }
      +  },
      +  "aliases": {
      +    "last_3_months": {} 
      +  }
      +}
      +
      +

      Versions later than 7.x

      +
      PUT /_template/my_logsa
      +{
      +  "index_patterns": ["logstasaah-*"],
      +  "order": 1,
      +  "settings": {
      +    "number_of_shards": 1
      +  },
      +  "mappings": {
      +    "properties": {
      +      "_all": {
      +        "enabled": false
      +      }
      +    }
      +  },
      +  "aliases": {
      +    "last_3_months": {}
      +  }
      +}
      +

      Data Backup and Restoration

      Elasticsearch replicas provide high availability during runtime, which ensures service continuity even when sporadic data loss occurs.

      +

      However, replicas do not protect against failures. In case of a failure, you need a backup of your cluster so that you can restore data.

      +

      To back up cluster data, create snapshots and save them in OBS buckets. This backup process is "smart". You are advised to use your first snapshot to store a copy of your data. All subsequent snapshots will save the differences between the existing snapshots and the new data. As the number of snapshots increases, backups are added or deleted accordingly. This means that subsequent backups will take a shorter time because only a small volume of data needs to be transferred.

      +
      +

      Improving Query Efficiency by Filtering

      Filters are important because they are fast. They do not calculate relevance (skipping the entire scoring phase) and are easily cached.

      +

      Usually, when you look for an exact value, you will not want to score the query. You would want to include/exclude documents, so you will use a constant_score query to execute the term query in a non-scoring mode and apply a uniform score of one.

      +
      GET /my_store/products/_search
      +{
      +    "query" : {
      +        "constant_score" : { 
      +            "filter" : {
      +                "term" : { 
      +                    "city" : "London"
      +                }
      +            }
      +        }
      +    }
      +}
      +

      +
      +

      Retrieving Large Amount of Data Through Scroll API

      In the scenario where a large amount of data is returned, the query-then-fetch process supports pagination with the from and size parameters, but within limits. Results are sorted on each shard before being returned. However, with larger from values, the sorting process can become very heavy, using vast amounts of CPU, memory, and bandwidth. For this reason, deep pagination is not recommended.

      +

      You can use a scroll query to retrieve large numbers of documents from Elasticsearch efficiently, without affecting system performance. Scrolling allows you to do an initial search and to keep pulling batches of results from Elasticsearch until there are no more results left.

      +
      +

      Differences Between Query and Filter

      In general, a filter will outperform a scoring query.

      +

      When used in filtering context, the query is said to be a non-scoring or filtering query. That is, the query simply asks the question: Does this document match? The answer is always a simple, binary yes|no.

      +

      Typical filtering cases are listed as follows:

      +
      • Is the created time in the range from 2013 to 2014?
      • Does the status field contain the term "published"?
      • Is the lat_lon field within 10 km of a specified point?
      +

      When used in a querying context, the query becomes a "scoring" query. Similar to the non-scoring query, this query also determines if a document matches and how well the document matches. A typical use for a scoring query is to find documents:

      +
      • Matching the words "full text search"
      • Containing the word "run", but also matching "runs", "running", "jog", or "sprint"
      • Containing the words "quick", "brown", and "fox" – the closer together they are, the more relevant the document
      • Tagged with lucene, search, or java – the more tags, the more relevant the document
      +
      +

      Checking Whether a Query Is Valid

      Queries can become quite complex. Especially, when they are combined with different analyzers and field mappings, they can become a little difficult to follow. You can use the validate-query API to check whether a query is valid.

      +

      For example, on the Kibana Console page, run the following command to check whether the query is valid. In this example, the validate request tells you that the query is invalid.

      +

      Versions earlier than 7.x

      +
      GET /gb/tweet/_validate/query 
      +{   
      + "query": {      
      + "tweet" : {       
      +   "match" : "really powerful"     
      +  }    
      +} 
      +}
      +

      Versions later than 7.x

      +
      GET /gb/tweet/_validate/query  
      +{ 
      +"query": { 
      +   "productName" : { 
      +  "match" : "really powerful" 
      +  } 
      +  } 
      + }
      +

      The response to the preceding validate request tells us that the query is invalid. To find out why it is invalid, add the explain parameter to the query string and execute the following command.

      +

      Versions earlier than 7.x

      +
      GET /gb/tweet/_validate/query?explain 
      +{
      +"query": {
      +   "tweet" : {
      +  "match" : "really powerful"
      +  }
      +  }
      + }
      +

      Versions later than 7.x

      +
      GET /gb/tweet/_validate/query?explain
      +{    
      + "query": {       
      + "productName" : {        
      +   "match" : "really powerful"      
      +  }     
      +}  
      +}
      +

      According to the command output shown in the following, the type of query (match) is mixed up with the name of the field (tweet).

      +
      {
      +  "valid": false,
      +  "error": "org.elasticsearch.common.ParsingException: no [query] registered for [tweet]"
      +}
      +

      Using the explain parameter has the added advantage of returning a human-readable description of the (valid) query, which helps in understanding exactly how CSS interprets your query.

      +
      +
      + diff --git a/docs/css/umn/css_01_0033.html b/docs/css/umn/css_01_0033.html new file mode 100644 index 000000000..32d8787a1 --- /dev/null +++ b/docs/css/umn/css_01_0033.html @@ -0,0 +1,108 @@ + + +

      Index Backup and Restoration

      +

      You can back up index data in clusters. If data loss occurs or you want to retrieve data of a specified duration, you can restore the index data. Index backup is implemented by creating cluster snapshots. When creating a backup for the first time, you are advised to back up data of all indices.

      +
      • Managing Automatic Snapshot Creation: Snapshots are automatically created at a specified time each day according to the rules you create. You can enable or disable the automatic snapshot creation function and set the automatic snapshot creation policy.
      • Manually creating a snapshot: You can manually create a snapshot at any time to back up all data or data of specified indices.
      • Restoring data: You can use existing snapshots to restore the backup index data to a specified cluster.
      • Deleting a snapshot: Delete snapshots you do not require and release resources.
      +
      • Before creating a snapshot, you need to perform basic configurations, including configuring the OBS bucket for storing snapshots and IAM agency used for security authentication.
      • If there are available snapshots in the snapshot list when you configure the OBS bucket for storing cluster snapshots for the first time, you cannot change the bucket for snapshots that are subsequently created automatically or manually. Therefore, exercise caution when you configure the OBS bucket.
      • If you want to change the OBS bucket where there are snapshots, do as follows: Disable the snapshot function, enable it, and specify a new OBS bucket. After you disable the snapshot function, you cannot use previously created snapshots to restore the cluster.
      • If a cluster is in the Unavailable status, you can use the cluster snapshot function only to restore clusters and view existing snapshot information.
      • During backup and restoration of a cluster, you can perform only certain operations, including scaling out, accessing Kibana, viewing metric, and deleting other snapshots of clusters. However, you cannot perform the following operations: restarting or deleting the cluster, deleting a snapshot that is in the Creating or Restoring status, and creating or restoring another snapshot. If a snapshot is being created or restored for a cluster, any automatic snapshot creation task initiated for the cluster will be canceled.
      +
      +

      Prerequisites

      To use the function of creating or restoring snapshots, the account or IAM user that logs in to the CSS management console must have both of the following permissions:

      +
      • Tenant Administrator for project OBS in region Global service
      • CSS Administrator in the current region
      +
      +

      Managing Automatic Snapshot Creation

      1. In the left navigation pane of the CSS management console, click Clusters.
      2. On the Clusters page that is displayed, click the name of the target cluster. On the displayed page, click Cluster Snapshots.

        Alternatively, on the Clusters page, locate the row that contains the target cluster and click More > Back Up and Restore in the Operation column to switch to the Cluster Snapshots page.

        +
      3. On the displayed Cluster Snapshots page, click the icon to the right of Cluster Snapshot to enable the cluster snapshot function.

        indicates that the cluster snapshot function is disabled.

        +

        indicates that the cluster snapshot function is enabled.

        +
      4. (Optional) After the cluster snapshot function is enabled, CSS automatically creates the OBS bucket and IAM agency for you to store snapshots. The automatically created OBS bucket and IAM agency are displayed on the page. If you want to change the OBS bucket and IAM agency, click to the right of Basic Configuration. To ensure the security of snapshot data, you can select a key to encrypt the snapshot.

        In the displayed Edit Basic Configuration dialog box, you can either select an existing OBS bucket and IAM agency or create an OBS bucket and IAM agency. To create an OBS bucket, click Create Bucket. To create an IAM agency, click Create IAM Agency. For details, see Creating a Bucket and Creating an Agency. To encrypt the snapshot, select Snapshot Encryption and select a key.

        +
        +
        + + + + + + + + + + + + + + + + + +
        Table 1 Parameter description

        Parameter

        +

        Description

        +

        Restrictions

        +

        OBS Bucket

        +

        Name of the OBS bucket used for storing snapshots.

        +

        The following requirements must be met for existing OBS buckets or those that will be created:

        +
        • Storage Class must be Standard or Warm.
        • When creating a bucket, do not enable the encryption function.
        +
        NOTE:

        To let an IAM user access an OBS bucket, you need to grant the GetBucketStoragePolicy, GetBucketLocation, ListBucket, and ListAllMyBuckets permissions to the user.

        +
        +

        IAM Agency

        +

        IAM agency authorized by the current account to CSS access or maintain data stored in the OBS bucket.

        +

        The following requirements must be met for existing IAM agencies or those that will be created:

        +
        • Agency Type must be Cloud service.
        • Set Cloud Service to CSS.
        • The agency must have the Tenant Administrator permission for the OBS(S3) project in OBS(S3).
        +

        Snapshot Encryption

        +

        Whether to enable the snapshot encryption function. Enabling the snapshot encryption function ensures the security of your snapshot data.

        +

        After selecting Snapshot Encryption, select a key from the Key Name drop-down list. If no key is available, click Create/View Key to switch to the KMS management console to create a key or modify an existing key. For details, see Creating a CMK.

        +
        • You cannot use default master keys whose aliases end with /default in KMS to encrypt snapshots.
        • If a snapshot has been stored in the OBS bucket, you cannot modify the parameters used for encrypting the snapshot.
        • If the key used for encryption is in the Pending deletion or disable status, you cannot perform backup and restoration operations on the cluster. Specifically, you cannot create new snapshots for the cluster, or use existing snapshots to restore clusters. In this case, switch to the KMS management console and change the status of the target key to enable so that backup and restore operations are allowed on the cluster.
        • If you delete the key used for encryption, you cannot perform backup and restore operations on the cluster. In addition, you cannot restore the deleted key. Therefore, exercise caution when deleting a key.
        • You are advised to disable the automatic snapshot creation function if the key is deleted or is in the Pending deletion or disable status. In this case, automatic snapshots will be created based on the configured snapshot policy. However, all automatic snapshot creation tasks will fail, and the failed tasks will be displayed in the Failed Tasks dialog box.
        +
        +
        +
        +
        Figure 1 Edit Basic configuration
        +

        +
      5. Click the icon to the right of Automatic Snapshot Creation to enable the automatic snapshot creation function.

        indicates that the automatic snapshot function is enabled.

        +

        indicates that the automatic snapshot function is disabled.

        +
      6. In the displayed Edit Snapshot Policy dialog box, specify parameters as required.
        • Snapshot Name Prefix: Enter a maximum of 31 characters starting with a letter. Only lowercase letters, digits, hyphens (-), and underscores (_) are allowed.. A snapshot name consists of a snapshot name prefix and a timestamp. For example, snapshot-2018022405925.
        • Time Zone: indicates the time zone for the backup time. Specify Backup Started based on the time zone.
        • Index: Enter the name of an index. The automatic snapshot creation function supports backup of certain indices in the cluster. Uppercase letters, spaces, and certain special characters (including "\<|>/?) are not allowed. Use commas (,) to separate multiple indices. If you do not specify this parameter, data of all indices in the cluster is backed up by default. You can use the asterisk (*) to back up data of certain indices. For example, if you enter index*, then data of indices with the name prefix of index will be backed up.

          You can run the GET /_cat/indices command in Kibana to query names of all indices in the cluster. You can then enter the names of the indices you want to back up.

          +
        • Backup Started: indicates the time when the backup starts automatically every day. You can specify this parameter only in hours and not minutes, for example, 00:00 or 01:00. The value ranges from 00:00 to 23:00. Select the backup time from the drop-down list box.
        • Retention Period (days): indicates the duration when snapshots are retained in the OBS bucket, in days. The value ranges from 1 to 90. You can specify this parameter as required. The system automatically deletes snapshots that are retained over the specified retention period on the half hour. For example, if you set the snapshot policy as shown in Figure 2, the system will automatically delete in 35 days at 00:30 the automated snapshots that were created 35 days earlier at 00:00.
        +
        Figure 2 Automatic snapshot creation
        +
      7. Click OK.

        After the policy for automatic snapshot creation is created, the policy information will be displayed on the Cluster Snapshots page. If you need to change the policy due to business changes, click .

        +

        Snapshots that are automatically created according to the snapshot policy are displayed in the snapshot list, along with manually created snapshots. You can distinguish them by the Snapshot Type setting. In the upper right corner of the snapshot list, enter the keyword of the snapshot name or snapshot ID to search for the desired snapshots. You can also click to sort snapshots based on related parameter settings.

        +
        Figure 3 Automatic snapshot creation
        +
      8. (Optional) Disable the automatic snapshot creation function.

        After you disable the automatic snapshot creation function, the system stops automatic creation of snapshots. If the system is creating a snapshot based on the automatic snapshot creation policy and the snapshot is not yet displayed in the snapshot list, you cannot disable the automatic snapshot creation function. In this case, if you click the button next to Automatic Snapshot Creation, a message is displayed, indicating that you cannot disable the function. You are advised to disable the function after the system completes automatic creation of the snapshot, and the created snapshot is displayed in the snapshot list.

        +

        When disabling the automatic snapshot creation function, you can choose whether to delete the snapshots that have been automatically created by selecting Delete automated snapshots in the displayed dialog box. By default, automatically created snapshots are not deleted.

        +
        • If you do not select Delete automated snapshots, automatically created snapshots are not deleted when you disable the automatic snapshot creation function. You can manually delete them later. For details, see Deleting a Snapshot. If you do not manually delete the automatically created snapshots and enable the automatic snapshot creation function again, then all snapshots with Snapshot Type set to Automated in the snapshot list of the cluster can only be automatically deleted by the system. Specifically, the system automatically deletes snapshots based on the snapshot policy configured when you enable the automatic snapshot creation function again. For example, if you set Retention Period (days) to 10, the system will automatically delete the snapshots that have been retained for more than 10 days.
        • If you select Delete automated snapshots, all snapshots with Snapshot Type set to Automated in the snapshot list will be deleted when you disable the automatic snapshot creation function.
        +
      +
      +

      Manually Creating a Snapshot

      1. In the left navigation pane of the CSS management console, click Clusters.
      2. On the Clusters page that is displayed, click the name of the target cluster. On the displayed page, click Cluster Snapshots.

        Alternatively, on the Clusters page, locate the row that contains the target cluster and click More > Back Up and Restore in the Operation column to switch to the Cluster Snapshots page.

        +
      3. On the displayed Cluster Snapshots page, click the icon to the right of Cluster Snapshot to enable the cluster snapshot function.

        indicates that the cluster snapshot function is disabled.

        +

        indicates that the cluster snapshot function is enabled.

        +
      4. (Optional) After the cluster snapshot function is enabled, CSS automatically creates the OBS bucket and IAM agency for you to store snapshots. The automatically created OBS bucket and IAM agency are displayed on the page. If you want to change the OBS bucket and IAM agency, click to the right of Basic Configuration. For details about how to configure parameters involved in the basic configuration, see 4.
      5. After basic configurations are completed, click Create.
        • Name indicates the name of the manually created snapshot, which can contain 4 to 64 characters and must start with a lowercase letter. Only lowercase letters, digits, hyphens (-), and underscores (_) are allowed. For snapshots you create manually, you can specify the snapshot name. The system will not automatically add the time information to the snapshot name.
        • Index: Enter the name of an index. The manually created snapshot can back up data of certain indices in the cluster. The value can contain 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?) are not allowed. Multiple index names are separated by commas (,). If you do not specify this parameter, data of all indices in the cluster is backed up by default. You can use the asterisk (*) to back up data of certain indices. For example, if you enter 2018-06*, then data of indices with the name prefix of 2018-06 will be backed up.

          Run the GET /_cat/indices command in Kibana to query all index names in the cluster.

          +
          +
        • Description: indicates the description of the created snapshot. The value contains 0 to 256 characters, and certain special characters (<>) are not allowed.
        +
        Figure 4 Creating a snapshot
        +
      6. Click OK.

        After the snapshot is created, it will be displayed in the snapshot list. The status Available indicates that the snapshot is created successfully. All automatically and manually created snapshots are displayed in the snapshot list. You can distinguish them by the Snapshot Type setting. In the upper right corner of the snapshot list, enter the keyword of the snapshot name or snapshot ID to search for the desired snapshots. You can also click to sort snapshots based on related parameter settings.

        +
      +
      +

      Restoring Data

      You can use snapshots whose Snapshot Status is Available to restore cluster data. The stored snapshot data can be restored to other clusters.

      +

      Restoring data will overwrite current data in clusters. Therefore, exercise caution when restoring data.

      +
      1. In the Snapshots area, locate the row that contains the snapshot you want to restore and click Restore in the Operation column.
      2. In the displayed dialog box, specify parameters as required.

        Index: Enter the name of the index you want to restore. If you do not specify any index name, data of all indices will be restored. The value can contain 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?) are not allowed.

        +

        Rename Pattern: Enter a regular expression. Indices that match the regular expression are restored. The default value index_(.+) indicates restoring data of all indices. The value contains 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?,) are not allowed.

        +

        Rename Replacement: Enter the index renaming rule. The default value restored_index_$1 indicates that restored_ is added in front of the names of all restored indices. The value can contain 0 to 1,024 characters. Uppercase letters, spaces, and certain special characters (including "\<|>/?,) are not allowed. You can set Rename Replacement only if you have specified Rename Pattern.

        +

        Cluster: Select the cluster that you want to restore. You can select the current cluster or others. However, you can only restore the snapshot to clusters whose status is Available. If the status of the current cluster is Unavailable, you cannot restore the snapshot to the current cluster. If you select another cluster and two or more indices in the cluster have the same name, data of all indices with the same name as the name you specify will be overwritten. Therefore, exercise caution when you set the parameters.

        +
        Figure 5 Restoring a snapshot
        +

        +
      3. Click OK. If restoration succeeds, Task Status of the snapshot in the snapshot list will change to Restoration succeeded, and the index data is generated again according to the snapshot information.
        Figure 6 Successful restoration
        +
      +
      +

      Deleting a Snapshot

      If you no longer need a snapshot, delete it to release storage resources. If the automatic snapshot creation function is enabled, snapshots that are automatically created cannot be deleted manually, and the system automatically deletes these snapshots on the half hour after the time specified by Retention Period (days). If you disable the automatic snapshot creation function while retaining the automated snapshots, then you can manually delete them later. If you do not manually delete the automatically created snapshots and enable the automatic snapshot creation function again, then all snapshots with Snapshot Type set to Automated in the snapshot list of the cluster can only be automatically deleted by the system.

      +

      After a snapshot is deleted, its data cannot be restored. Exercise caution when deleting a snapshot.

      +
      +
      1. In the Snapshots area, locate the row containing the target snapshot and click Delete in the Operation column.
      2. In the Delete Snapshot dialog box that is displayed, click Yes.
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0040.html b/docs/css/umn/css_01_0040.html new file mode 100644 index 000000000..9dac8d900 --- /dev/null +++ b/docs/css/umn/css_01_0040.html @@ -0,0 +1,30 @@ + + +

      Migrating Cluster Data

      +

      You can migrate data from one cluster to another. In certain scenarios, for example, if you cannot get sufficient capacity by changing the specifications of the current cluster, you can create a cluster of higher specifications and migrate all data of the current cluster to the new one. Alternatively, you can merge indices in two clusters to one cluster to meet your business needs. CSS enables you to migrate cluster data by using the index backup and restoration function, specifically, by restoring the snapshot of a cluster to the target cluster.

      +

      Prerequisites

      • The source and target clusters are in the same region.
      • The version of the target cluster is the same as or later than that of the source cluster.
      • The number of nodes in the target cluster must be greater than half of the number of nodes in the source cluster.
      +
      +

      Suggestions

      • The number of nodes in the target cluster should be no less than the number of replicas in the source cluster.
      • The CPU, memory, and disk configurations of the target cluster should be no less than those of the source cluster. This will minimize service loss after migration.
      +
      +

      In this section, assume that data of cluster Es-1 is migrated to cluster Es-2. Cluster Es-2 runs a version later than that of cluster Es-1 and the number of nodes in cluster Es-2 is greater than half of that in cluster Es-1.

      +

      Procedure

      1. On the Clusters page, click Es-1. On the displayed page, click Cluster Snapshots.
      2. Click Create Snapshot to manually create a snapshot. In the displayed dialog box, enter the snapshot name and click OK.

        If you use the index backup and restoration function for the first time, you need to perform basic configurations first. For more details, see Manually Creating a Snapshot.

        +
        Figure 1 Creating a snapshot
        +
      3. In the snapshot list, locate the row that contains the target snapshot and click Restore in the Operation column to restore data to cluster Es-2.
        • Leave the Index option blank (default setting), indicating that you want to restore data of all indices in cluster Es-1.
        • From the Cluster drop-down list, select Es-2.
        +

        Click OK. You can also rename the restored index.

        +
        Figure 2 Restoring a snapshot
        +
      4. After restoration is complete, data in cluster Es-1 will be migrated to cluster Es-2.
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0041.html b/docs/css/umn/css_01_0041.html new file mode 100644 index 000000000..dd23740c2 --- /dev/null +++ b/docs/css/umn/css_01_0041.html @@ -0,0 +1,15 @@ + + +

      Monitoring a Cluster

      +
      + + diff --git a/docs/css/umn/css_01_0042.html b/docs/css/umn/css_01_0042.html new file mode 100644 index 000000000..897c729a0 --- /dev/null +++ b/docs/css/umn/css_01_0042.html @@ -0,0 +1,52 @@ + + +

      Supported Metrics

      +

      You can use Cloud Eye to monitor cluster metrics of CSS in real time and quickly handle exceptions. For details about Cloud Eye, see the Cloud Eye User Guide.

      +

      Table 1 lists the metrics supported by CSS.

      + +
      + + + + + + + + + + + + + + + + + + + +
      Table 1 Supported metrics

      Metric

      +

      Description

      +

      Formula

      +

      Value Range

      +

      Monitoring Interval

      +

      Disk Usage

      +

      Calculates the disk usage of a CSS cluster.

      +

      Unit: %

      +

      Used disk space of a cluster/Total disk space of a cluster

      +

      0 to 100%

      +

      1 minute

      +

      Cluster Health Status

      +

      Measures the health status of a CSS cluster.

      +

      -

      +

      Available values are 0, 1, and 2.

      +
      • 0: All primary and replica shards are allocated. Your cluster is 100% operational.
      • 1: All primary shards are allocated, but at least one replica is missing. No data is missing, so search results will still be complete. However, high availability is compromised to some degree. If more shards disappear, you might lose data. Think of this status as a warning that should prompt investigation.
      • 2: At least one primary shard (and all of its replicas) is missing. This means that you are missing data: searches will return partial results, and indexing into that shard will return an exception.
      +

      1 minute

      +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0043.html b/docs/css/umn/css_01_0043.html new file mode 100644 index 000000000..aa08659ef --- /dev/null +++ b/docs/css/umn/css_01_0043.html @@ -0,0 +1,112 @@ + + +

      Creating Alarm Rules

      +

      You can create the alarm rules for cluster metrics on the Cloud Eye management console. If the monitored metrics meet the specified alarm rule, alarms are reported. In this case, you can learn about cluster exceptions in time and take proper measures.

      +

      Procedure

      1. Log in to the Cloud Eye console.
      2. In the left navigation pane, choose Alarm Management > Alarm Rules.
      3. Click Create Alarm Rule in the upper right corner.
      4. In the displayed Create Alarm Rule page, set parameters as required.

        You can create an alarm rule for a specific metric or use the alarm template to create alarm rules in batches for multiple cloud service instances. In this example, assume that you use the alarm template to create the alarm rule for the CSS cluster.

        +
        1. Configure the name and description of an alarm rule. +
          + + + + + + + + + + + + + +
          Table 1 Parameter description

          Parameter

          +

          Description

          +

          Example Value

          +

          Name

          +

          Name of the alarm rule. The system automatically generates a name, which you can change if required.

          +

          alarm-p8v9

          +

          Description

          +

          Alarm rule description. This parameter is optional.

          +

          -

          +
          +
          +
        2. Select a monitored object and set alarm content parameters. +
          + + + + + + + + + + + + + + + + + +
          Table 2 Parameters for configuring alarms

          Parameter

          +

          Description

          +

          Example Value

          +

          Resource Type

          +

          Name of the service for which the alarm rule is configured

          +

          Cloud Search Service

          +

          Dimension

          +

          Metric dimension of the alarm rule. Currently, the following dimensions are supported:

          +
          • CSS Clusters: Alarm rules are specified by cluster.
          • CSS Clusters - CSS Instances: Alarm rules are specified by node in a cluster.
          +

          CSS clusters

          +

          Monitoring Scope

          +

          Resource range to which the alarm rule applies. You can select Resource groups or Specific resources.

          +

          Note:

          +
          • If you select Resource groups and any resource in the group meets the alarm policy, an alarm is triggered.
          • If you select Specific resources, select one or more monitored objects and click to synchronize the monitored object or objects to the dialog box on the right.
          +

          Specific resources

          +
          +
          +
        3. Specify Method, Template, and Alarm Notification. +
          + + + + + + + + + + + + + + + + + +
          Table 3 Parameter description

          Parameter

          +

          Description

          +

          Example Value

          +

          Method

          +

          Select Use template or Create manually.

          +

          If you set Monitoring Scope to Specific resources, you can set Method to Use template.

          +

          Create manually

          +

          Template

          +

          Template you want to import

          +

          -

          +

          Alarm Notification

          +

          If you enable this function, specify Validity Period, Notification Object, and Trigger Condition.

          +

          -

          +
          +
          +
        4. Click Create.

          After the alarm rule is successfully created, it will be displayed in the alarm rule list

          +
        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0044.html b/docs/css/umn/css_01_0044.html new file mode 100644 index 000000000..7b1d5a5b6 --- /dev/null +++ b/docs/css/umn/css_01_0044.html @@ -0,0 +1,18 @@ + + +

      Viewing Metrics

      +

      Cloud Eye performs daily monitoring on core cluster metrics for CSS. You can log in to the Cloud Eye management console to view cluster metrics.

      +

      Cloud Eye only monitors clusters that have been successfully created in real time.

      +

      Prerequisites

      • The cluster status is Available or Processing.

        You cannot view the metrics for deleted clusters or the metrics for the clusters those whose Status is Abnormal or Creating on the Cloud Eye management console. If the status of a cluster changes from Abnormal or Creating to Available, you can view its metrics in real time after approximately 10 minutes.

        +
        +
      • The cluster has been running for about 10 minutes.
      • You have created alarm rules.
      +
      +

      Procedure

      1. Log in to the CSS management console.
      2. Choose Clusters. Select a cluster. In the Operation column, choose More > View Metric.
      3. Click the tab for the time range you want to view.
      4. View the monitoring data.
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0045.html b/docs/css/umn/css_01_0045.html new file mode 100644 index 000000000..d564c3891 --- /dev/null +++ b/docs/css/umn/css_01_0045.html @@ -0,0 +1,13 @@ + + +

      Importing Data to Elasticsearch

      +
      + + diff --git a/docs/css/umn/css_01_0048.html b/docs/css/umn/css_01_0048.html new file mode 100644 index 000000000..055d149e8 --- /dev/null +++ b/docs/css/umn/css_01_0048.html @@ -0,0 +1,198 @@ + + +

      Using Logstash to Import Data to Elasticsearch

      +

      You can use Logstash to collect data and migrate collected data to Elasticsearch in CSS. This method helps you effectively obtain and manage data through Elasticsearch. Data files can be in the JSON or CSV format.

      +

      Logstash is an open-source, server-side data processing pipeline that ingests data from a multitude of sources simultaneously, transforms it, and then sends it to Elasticsearch. For details about Logstash, visit the following website: https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

      +

      The following two scenarios are involved depending on the Logstash deployment:

      + +

      Prerequisites

      +
      +

      Importing Data When Logstash Is Deployed on the External Network

      Figure 1 illustrates how data is imported when Logstash is deployed on an external network.

      +
      Figure 1 Importing data when Logstash is deployed on an external network
      +

      +
      1. Create a jump host and configure it as follows:
        • The jump host is an ECS running the Linux OS and has been bound with an EIP.
        • The jump host resides in the same VPC as the CSS cluster.
        • SSH local port forwarding is configured for the jump host to forward requests from a chosen local port to port 9200 on one node of the CSS cluster.
        • Refer to SSH documentation for the local port forwarding configuration.
        +
      2. Use PuTTY to log in to the created jump host with the EIP.
      3. Run the following command to perform port mapping and transfer the request sent to the port on the jump host to the target cluster:
        ssh -g -L <Local port of the jump host:Private network address and port number of a node> -N -f root@<Private IP address of the jump host>
        +
        • In the preceding command, <Local port of the jump host> refers to the port obtained in 1.
        • In the preceding command, <Private network address and port number of a node> refers to the private network address and port number of a node in the cluster. If the node is faulty, the command execution will fail. If the cluster contains multiple nodes, you can replace the value of <private network address and port number of a node> with the private network address and port number of any available node in the cluster. If the cluster contains only one node, restore the node and execute the command again.
        • Replace <Private IP address of the jump host> in the preceding command with the IP address (with Private IP) of the created jump host in the IP Address column in the ECS list on the ECS management console.
        +
        +

        For example, port 9200 on the jump host is assigned external network access permissions, the private network address and port number of the node are 192.168.0.81 and 9200, respectively, and the private IP address of the jump host is 192.168.0.227. You need to run the following command to perform port mapping:

        +
        ssh -g -L 9200:192.168.0.81:9200 -N -f root@192.168.0.227
        +
      4. Log in to the server where Logstash is deployed and store the data files to be imported on the server.

        For example, data file access_20181029_log needs to be imported, the file storage path is /tmp/access_log/, and the data file includes the following data:

        +

        Create the access_log folder if it does not exist.

        +
        +
        |   All |               Heap used for segments |                        |     18.6403 |      MB |
        +|   All |             Heap used for doc values |                        |    0.119289 |      MB |
        +|   All |                  Heap used for terms |                        |     17.4095 |      MB |
        +|   All |                  Heap used for norms |                        |   0.0767822 |      MB |
        +|   All |                 Heap used for points |                        |    0.225246 |      MB |
        +|   All |          Heap used for stored fields |                        |    0.809448 |      MB |
        +|   All |                        Segment count |                        |         101 |         |
        +|   All |                       Min Throughput |           index-append |     66232.6 |  docs/s |
        +|   All |                    Median Throughput |           index-append |     66735.3 |  docs/s |
        +|   All |                       Max Throughput |           index-append |     67745.6 |  docs/s |
        +|   All |              50th percentile latency |           index-append |     510.261 |      ms |
        +
        +
      5. In the server where Logstash is deployed, run the following command to create configuration file logstash-simple.conf in the Logstash installation directory:
        cd /<Logstash installation directory>/
        +vi logstash-simple.conf
        +
      6. Input the following content in logstash-simple.conf:
        input {
        +Location of data
        +}
        +filter {
        +Related data processing
        +}
        +output {
        +    elasticsearch {
        +        hosts => "<EIP of the jump host>:<Number of the port assigned external network access permissions on the jump host>"
        +        (Optional) If communication encryption has been enabled on the cluster, you need to add the following configuration:
        +        ssl => true
        +        ssl_certificate_verification => false
        +    }
        +}
        +
        • The input parameter indicates the data source. Set this parameter based on the actual conditions. For details about the input parameter and parameter usage, visit the following website: https://www.elastic.co/guide/en/logstash/current/input-plugins.html
        • The filter parameter specifies the mode in which data is processed. For example, extract and process logs to convert unstructured information into structured information. For details about the filter parameter and parameter usage, visit the following website: https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
        • The output parameter indicates the destination address of the data. For details about the output parameter and parameter usage, visit https://www.elastic.co/guide/en/logstash/current/output-plugins.html. Replace <EIP address of the jump host> with the IP address (with EIP) of the created jump host in the IP Address column in the ECS list on the ECS management console. <Number of the port assigned external network access permissions on the jump host> is the number of the port obtained in 1, for example, 9200.
        +

        Consider the data files in the /tmp/access_log/ path mentioned in 4 as an example. Assume that data import starts from data in the first row of the data file, the filtering condition is left unspecified (indicating no data processing operations are performed), the public IP address and port number of the jump host are 192.168.0.227 and 9200, respectively, and the name of the target index is myindex. Edit the configuration file as follows, and enter :wq to save the configuration file and exit.

        +
        input { 
        +    file{
        +      path => "/tmp/access_log/*"
        +      start_position => "beginning"
        +    }
        +} 
        +filter { 
        +} 
        +output { 
        +    elasticsearch { 
        +      hosts => "192.168.0.227:9200"
        +      index => "myindex"
        +     
        +    } 
        +}
        +

        If a license error is reported, set ilm_enabled to false.

        +
        +

        If the cluster has the security mode enabled, you need to download a certificate first.

        +
        1. Download a certificate on the Basic Information page of the cluster.
          Figure 2 Downloading a certificate
          +
        2. Store the certificate to the server where Logstash is deployed.
        3. Modify the logstash-simple.conf configuration file.
          Consider the data files in the /tmp/access_log/ path mentioned in 4 as an example. Assume that data import starts from data in the first row of the data file, the filtering condition is left unspecified (indicating no data processing operations are performed), and the public IP address and port number of the jump host are 192.168.0.227 and 9200, respectively. The name of the index for importing data is myindex, and the certificate is stored in /logstash/logstash6.8/config/CloudSearchService.cer. Edit the configuration file as follows, and enter :wq to save the configuration file and exit.
          input{
          +    file {
          +        path => "/tmp/access_log/*"
          +        start_position => "beginning"
          +    }
          +}
          +filter {
          +    }
          +output{
          +    elasticsearch{
          +        hosts => ["https://192.168.0.227:9200"]
          +        index => "myindex"
          +        user => "admin"
          +        password => "******"
          +        cacert => "/logstash/logstash6.8/config/CloudSearchService.cer"
          +    }
          +}
          +

          password: password for logging in to the cluster

          +
          +
          +
        +
      7. Run the following command to import the data collected by Logstash to the cluster:
        ./bin/logstash -f logstash-simple.conf
        +

        This command must be executed in the directory where the logstash-simple.conf file is stored. For example, if the logstash-simple.conf file is stored in /root/logstash-7.1.1/, go to the directory before running the command.

        +
        +
      8. Log in to the CSS management console.
      9. In the left navigation pane, click Clusters to switch to the Clusters page.
      10. From the cluster list, locate the row that contains the cluster to which you want to import data and click Access Kibana in the Operation column.
      11. In the left navigation pane of the displayed Kibana window, click Dev Tools.
        Figure 3 Logging in to Dev Tools
        +
      12. On the Console page of Kibana, search for the imported data.

        On the Console page of Kibana, enter the following command to search for data. View the search results. If the searched data is consistent with the imported data, the data has been imported successfully.

        +
        GET myindex/_search
        +
      +
      +

      Importing Data When Logstash Is Deployed on an ECS

      Figure 4 illustrates how data is imported when Logstash is deployed on an ECS that resides in the same VPC as the cluster to which data is to be imported.

      +
      Figure 4 Importing data when Logstash is deployed on an ECS
      +
      1. Ensure that the ECS where Logstash is deployed and the cluster to which data is to be imported reside in the same VPC, port 9200 of the ECS security group has been assigned external network access permissions, and an EIP has been bound to the ECS.
        • If there are multiple servers in a VPC, you do not need to associate EIPs to other servers as long as one server is associated with an EIP. Switch to the node where Logstash is deployed from the node with which the EIP is associated.
        • If a private line or VPN is available, you do not need to associate an EIP.
        +
        +
      2. Use PuTTY to log in to the ECS.
        For example, data file access_20181029_log is stored in the /tmp/access_log/ path of the ECS, and the data file includes the following data:
        |   All |               Heap used for segments |                        |     18.6403 |      MB |
        +|   All |             Heap used for doc values |                        |    0.119289 |      MB |
        +|   All |                  Heap used for terms |                        |     17.4095 |      MB |
        +|   All |                  Heap used for norms |                        |   0.0767822 |      MB |
        +|   All |                 Heap used for points |                        |    0.225246 |      MB |
        +|   All |          Heap used for stored fields |                        |    0.809448 |      MB |
        +|   All |                        Segment count |                        |         101 |         |
        +|   All |                       Min Throughput |           index-append |     66232.6 |  docs/s |
        +|   All |                    Median Throughput |           index-append |     66735.3 |  docs/s |
        +|   All |                       Max Throughput |           index-append |     67745.6 |  docs/s |
        +|   All |              50th percentile latency |           index-append |     510.261 |      ms |
        +
        +
      3. Run the following command to create configuration file logstash-simple.conf in the Logstash installation directory:
        cd /<Logstash installation directory>/
        +vi logstash-simple.conf
        +
        Input the following content in logstash-simple.conf:
        input {
        +Location of data
        +}
        +filter {
        +Related data processing
        +}
        +output {
        +    elasticsearch{
        +        hosts => "<Private network address and port number of the node>"} 
        +        (Optional) If communication encryption has been enabled on the cluster, you need to add the following configuration:
        +        ssl => true
        +        ssl_certificate_verification => false
        +}
        +
        • The input parameter indicates the data source. Set this parameter based on the actual conditions. For details about the input parameter and parameter usage, visit the following website: https://www.elastic.co/guide/en/logstash/current/input-plugins.html
        • The filter parameter specifies the mode in which data is processed. For example, extract and process logs to convert unstructured information into structured information. For details about the filter parameter and parameter usage, visit the following website: https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
        • The output parameter indicates the destination address of the data. For details about the output parameter and parameter usage, visit https://www.elastic.co/guide/en/logstash/current/output-plugins.html. <private network address and port number of a node> refers to the private network address and port number of a node in the cluster.

          If the cluster contains multiple nodes, you are advised to replace the value of <Private network address and port number of a node> with the private network addresses and port numbers of all nodes in the cluster to prevent node faults. Use commas (,) to separate the nodes' private network addresses and port numbers. The following is an example:

          +
          hosts => ["192.168.0.81:9200","192.168.0.24:9200"]
          +

          If the cluster contains only one node, the format is as follows:

          +
          hosts => "192.168.0.81:9200"
          +
        +
        +

        Consider the data files in the /tmp/access_log/ path mentioned in 2 as an example. Assume that data import starts from data in the first row of the data file, the filtering condition is left unspecified (indicating no data processing operations are performed), the private network address and port number of the node in the cluster where data is to be imported are 192.168.0.81 and 9200, respectively, and the name of the target index is myindex. Edit the configuration file as follows, and enter :wq to save the configuration file and exit.

        +
        input { 
        +    file{
        +      path => "/tmp/access_log/*"
        +      start_position => "beginning"
        +    }
        +} 
        +filter { 
        +} 
        +output { 
        +    elasticsearch { 
        +      hosts => "192.168.0.81:9200"
        +      index => "myindex"
        +      
        +    } 
        +}
        +

        If the cluster has the security mode enabled, you need to download a certificate first.

        +
        1. Download a certificate on the Basic Information page of the cluster.
          Figure 5 Downloading a certificate
          +
        2. Store the certificate to the server where Logstash is deployed.
        3. Modify the logstash-simple.conf configuration file.
          Consider the data files in the /tmp/access_log/ path mentioned in 2 as an example. Assume that data import starts from data in the first row of the data file, the filtering condition is left unspecified (indicating no data processing operations are performed), the public IP address and port number of the jump host are 192.168.0.227 and 9200, respectively. The name of the index for importing data is myindex, and the certificate is stored in /logstash/logstash6.8/config/CloudSearchService.cer. Edit the configuration file as follows, and enter :wq to save the configuration file and exit.
          input{
          +    file {
          +        path => "/tmp/access_log/*"
          +        start_position => "beginning"
          +    }
          +}
          +filter {
          +    }
          +output{
          +    elasticsearch{
          +        hosts => ["https://192.168.0.227:9200"]
          +        index => "myindex"
          +        user => "admin"
          +        password => "******"
          +        cacert => "/logstash/logstash6.8/config/CloudSearchService.cer"
          +    }
          +}
          +

          password: password for logging in to the cluster

          +
          +
          +
        +
        +
      4. Run the following command to import the ECS data collected by Logstash to the cluster:
        ./bin/logstash -f logstash-simple.conf
        +
      5. Log in to the CSS management console.
      6. In the left navigation pane, click Clusters to switch to the Clusters page.
      7. From the cluster list, locate the row that contains the cluster to which you want to import data and click Access Kibana in the Operation column.
      8. In the left navigation pane of the displayed Kibana window, click Dev Tools.
        Figure 6 Choosing Dev Tools
        +
      9. On the Console page of Kibana, search for the imported data.

        On the Console page of Kibana, enter the following command to search for data. View the search results. If the searched data is consistent with the imported data, the data has been imported successfully.

        +
        GET myindex/_search
        +
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0049.html b/docs/css/umn/css_01_0049.html new file mode 100644 index 000000000..939fe067a --- /dev/null +++ b/docs/css/umn/css_01_0049.html @@ -0,0 +1,13 @@ + + +

      Querying Cluster Logs

      +
      + + diff --git a/docs/css/umn/css_01_0050.html b/docs/css/umn/css_01_0050.html new file mode 100644 index 000000000..17b4aaaf8 --- /dev/null +++ b/docs/css/umn/css_01_0050.html @@ -0,0 +1,89 @@ + + +

      Key Operations Recorded by CTS

      +

      Cloud Trace Service (CTS) is available on the public cloud platform. With CTS, you can record operations associated with CSS for later query, audit, and backtrack operations.

      +

      Prerequisites

      CTS has been enabled. For details, see Enabling CTS.

      +
      +

      Key Operations Recorded by CTS

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Table 1 Key operations recorded by CTS

      Operation

      +

      Resource Type

      +

      Event Name

      +

      Creating a cluster

      +

      cluster

      +

      createCluster

      +

      Deleting a cluster

      +

      cluster

      +

      deleteCluster

      +

      Expanding the cluster capacity

      +

      cluster

      +

      growCluster

      +

      Restarting a cluster

      +

      cluster

      +

      rebootCluster

      +

      Performing basic configurations for a cluster snapshot

      +

      cluster

      +

      updateSnapshotPolicy

      +

      Setting the automatic snapshot creation policy

      +

      cluster

      +

      updateAutoSnapshotPolicy

      +

      Manually creating a snapshot

      +

      snapshot

      +

      createSnapshot

      +

      Restoring a snapshot

      +

      snapshot

      +

      restoreSnapshot

      +

      Deleting a snapshot

      +

      snapshot

      +

      deleteSnapshot

      +
      +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0051.html b/docs/css/umn/css_01_0051.html new file mode 100644 index 000000000..0ce5903e4 --- /dev/null +++ b/docs/css/umn/css_01_0051.html @@ -0,0 +1,19 @@ + + +

      Viewing Audit Logs

      +

      After you enable CTS, it starts recording operations related to CSS. The CTS management console stores the last seven days of operation records. This section describes how to query the last seven days of operation records on the CTS management console.

      +

      Procedure

      1. Log in to the CTS management console.
      2. Click in the upper left corner and select a region.
      3. In the left navigation pane, click Trace List.
      4. You can use filters to query traces. The following four filter criteria are available:
        • Trace Source, Resource Type, and Search By

          Select a filter criterion from the drop-down list.

          +

          When you select Trace name for Search By, select a specific trace name.

          +

          When you select Resource ID for Search By, enter a specific resource ID.

          +

          When you select Resource name for Search By, select or enter a specific resource name.

          +
        • Operator: Select a specific operator (at user level rather than tenant level).
        • Trace Status: Available options include All trace statuses, normal, warning, and incident. You can only select one of them.
        • Time Range: You can query traces generated during any time range of the last seven days.
        +
      5. Click on the left of a trace to expand its details.
      6. Click View Trace in the Operation column. In the displayed View Trace dialog box, the trace structure details are displayed.

        For details about the key fields in the CTS trace structure, see the Cloud Trace Service User Guide.

        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0053.html b/docs/css/umn/css_01_0053.html new file mode 100644 index 000000000..cb1646550 --- /dev/null +++ b/docs/css/umn/css_01_0053.html @@ -0,0 +1,72 @@ + + +

      Cluster and Storage Capacity Statuses

      +

      On the Dashboard page of the CSS management console, you can view information about the status and storage capacity of existing clusters.

      + +
      + + + + + + + + + + + + + + + + +
      Table 1 Cluster status description

      Status

      +

      Description

      +

      Available

      +

      The cluster is running properly and is providing services.

      +

      Abnormal

      +

      The cluster creation failed or the cluster is unavailable.

      +

      If a cluster is in the unavailable status, you can delete the cluster or use snapshots created when the cluster is available to restore data to other clusters. However, operations such as expanding cluster capacity, accessing Kibana, creating snapshots, and restoring snapshots to the cluster are not allowed. When a cluster is in the unavailable status, data importing is not recommended to avoid data loss. You can view the cluster metrics or restart the cluster. However, the operations may fail. If the operations fail, contact technical support in a timely manner.

      +

      Processing

      +

      The cluster is being restarted, scaled, backed up, or recovered.

      +

      Creating

      +

      The cluster is being created.

      +
      +
      + +
      + + + + + + + + + + + + + + + + +
      Table 2 Cluster storage capacity status description

      Status

      +

      Description

      +

      Normal

      +

      The storage capacity usage of all nodes in a cluster is less than 50%.

      +

      Warning

      +

      The storage capacity usage of any node in a cluster is from 50% to less than 80%.

      +

      Danger

      +

      The storage capacity usage of any node in a cluster is greater than or equal to 80%. You are advised to increase the storage space of the cluster to achieve normal data search or analysis.

      +

      Abnormal

      +

      The cluster storage capacity usage is unknown. For example, if the status of a cluster is Abnormal due to faults, the storage space status of the cluster will be Abnormal.

      +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0056.html b/docs/css/umn/css_01_0056.html new file mode 100644 index 000000000..6bbbd9119 --- /dev/null +++ b/docs/css/umn/css_01_0056.html @@ -0,0 +1,58 @@ + + +

      Introduction to the Cluster List

      +

      The cluster list displays all CSS clusters. If there are a large number of clusters, these clusters will be displayed on multiple pages. You can view clusters of all statuses from the cluster list.

      +

      Clusters are listed in chronological order by default in the cluster list, with the most recent cluster displayed at the top. You can click next to the related parameter in the table heading to modify cluster sorting. Table 1 describes the parameters involved in the cluster list.

      +

      In the upper right corner of the cluster list, you can enter the name or ID of a cluster and click to search for a cluster. You can also click in the upper right corner to refresh the cluster list.

      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + +
      Table 1 Cluster list parameter description

      Parameter

      +

      Description

      +

      Name/ID

      +

      Name and ID of a cluster. You can click a cluster name to switch to the Basic Information page. The cluster ID is automatically generated by the system and uniquely identifies a cluster.

      +

      Cluster Status

      +

      Status of a cluster.

      +

      Task Status

      +

      Status of a task, such as cluster restart, cluster capacity expansion, cluster backup, and cluster restoration.

      +

      Version

      +

      Elasticsearch version of the cluster.

      +

      Created

      +

      Time when the cluster is created.

      +

      Private Network Address

      +

      Private network address and port number of the cluster. You can use these parameters to access the cluster. If the cluster has multiple nodes, the private network addresses and port numbers of all nodes are displayed.

      +

      Operation

      +

      Operations that can be performed on a cluster, including Access Kibana, View Metric, Modify, Restart, Delete, Manage Word Dictionary, Back Up and Restore, Migrate, and Access Cerebro. If an operation is not allowed, the button is gray.

      +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0060.html b/docs/css/umn/css_01_0060.html new file mode 100644 index 000000000..81e6a5576 --- /dev/null +++ b/docs/css/umn/css_01_0060.html @@ -0,0 +1,95 @@ + + +

      Managing Failed Tasks

      +

      In the Failed Tasks dialog box, you can view the failed tasks related to a cluster, such as failing to create, restart, scale out, back up, or restore a cluster. In addition, you can view the failure cause of each task and choose to delete one or all failed tasks.

      +

      Viewing Failed Tasks

      1. Log in to the CSS management console.
      2. Click Clusters to switch to the Clusters page. Click the digit next to Failed Tasks to switch to the Failed Tasks dialog box.
        Figure 1 Clicking the digit next to Failed Tasks
        +
      3. The Failed Tasks dialog box presents all failed tasks of the current account. The following information about the failed tasks is displayed: Name/ID, Task Status, and Failure Time.
      4. Click the question mark in the Task Status column to view the failure cause of a task. You are advised to troubleshoot faults based on failure causes. For details about failure causes, see Error Code.
        Figure 2 Viewing the failure cause of a task
        +
      +
      +

      Deleting a Failed Task

      You can delete one or all failed tasks at a time.

      +
      • To delete a failed task, perform the following operations: Locate the row that contains the target task and click Delete in the Operation column. In the displayed dialog box, confirm the task you want to delete and click Yes.
      • To delete all failed tasks, perform the following operations: In the Failed Tasks dialog box, click Delete All. In the displayed dialog box, confirm the information about all failed tasks and click Yes.
      +
      Figure 3 Deleting a failed task
      +
      +

      Error Code

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Table 1 Failure causes

      Error Code

      +

      Failure Cause

      +

      Solution

      +

      CSS.6000

      +

      Failed to create the cluster because of an internal error. Please try again later. If the problem persists, contact customer service.

      +

      Please try again later or contact customer service.

      +

      CSS.6001

      +

      Failed to scale out the cluster because of an internal error. Please try again later. If the problem persists, contact customer service.

      +

      CSS.6002

      +

      Failed to restart the cluster because of an internal error. Please try again later. If the problem persists, contact customer service.

      +

      CSS.6003

      +

      Failed to restore the cluster because of an internal error. Please try again later. If the problem persists, contact customer service.

      +

      CSS.6004

      +

      Failed to create the node because of ECS exceptions (<ECS error code>). Please try again later. If the problem persists, contact customer service.

      +
      NOTE:

      <ECS error code> indicates the error information reported by ECS. For details about the cause and solution, see ECS Error Code Description.

      +
      +

      CSS.6005

      +

      Failed to initialize the service because of an internal error. Please try again later. If the problem persists, contact customer service.

      +

      CSS.6007

      +

      Failed to create the snapshot because of an internal error. Please try again later. If the problem persists, contact customer service.

      +

      CSS.6008

      +

      Failed to create the snapshot because the OBS bucket you select does not exist or has been deleted.

      +

      Modify the OBS bucket.

      +

      CSS.6009

      +

      Failed to restore the snapshot because the OBS bucket you select does not exist or has been deleted.

      +

      CSS.6010

      +

      Failed to restore the snapshot because the OBS object does not exist or has been deleted.

      +
      +
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_01_0061.html b/docs/css/umn/css_01_0061.html new file mode 100644 index 000000000..46e09ffdf --- /dev/null +++ b/docs/css/umn/css_01_0061.html @@ -0,0 +1,320 @@ + + +

      Elasticsearch SQL

      +

      For Elasticsearch 6.5.4 and later versions, Open Distro for Elasticsearch SQL lets you write queries in SQL rather than in the Elasticsearch query domain-specific language (DSL).

      +

      If you are already familiar with SQL and do not want to learn query DSL, this feature is a great option.

      +

      Basic Operations

      To use this function, send requests to the _opendistro/_sql URI. You can use a request parameter or the request body (recommended).

      +
      GET https://<host>:<port>/_opendistro/_sql?sql=select * from my-index limit 50
      +
      POST https://<host>:<port>/_opendistro/_sql
      +{
      +  "query": "SELECT * FROM my-index LIMIT 50"
      +}
      +

      You can run the cURL command:

      +
      curl -XPOST https://localhost:9200/_opendistro/_sql -u username:password -k -d '{"query": "SELECT * FROM kibana_sample_data_flights LIMIT 10"}' -H 'Content-Type: application/json'
      +

      By default, JSON is returned for query. You can also set the format parameter for the data to be returned in CSV format.

      +
      POST _opendistro/_sql?format=csv
      +{
      +  "query": "SELECT * FROM my-index LIMIT 50"
      +}
      +

      When data is returned in CSV format, each row corresponds to a document and each column corresponds to a field.

      +
      +

      Supported Operations

      Open Distro for Elasticsearch supports the following SQL operations: statements, conditions, aggregations, include and exclude fields, common functions, joins, and show.

      +
      • Statements +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Table 1 Statements

        Statement

        +

        Example

        +

        Select

        +

        SELECT * FROM my-index

        +

        Delete

        +

        DELETE FROM my-index WHERE _id=1

        +

        Where

        +

        SELECT * FROM my-index WHERE ['field']='value'

        +

        Order by

        +

        SELECT * FROM my-index ORDER BY _id asc

        +

        Group by

        +

        SELECT * FROM my-index GROUP BY range(age, 20,30,39)

        +

        Limit

        +

        SELECT * FROM my-index LIMIT 50 (default is 200)

        +

        Union

        +

        SELECT * FROM my-index1 UNION SELECT * FROM my-index2

        +

        Minus

        +

        SELECT * FROM my-index1 MINUS SELECT * FROM my-index2

        +
        +
        +

        As with any complex query, large UNION and MINUS statements can strain or even crash your cluster.

        +
        +
      +
      • Conditions +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Table 2 Conditions

        Condition

        +

        Example

        +

        Like

        +

        SELECT * FROM my-index WHERE name LIKE 'j%'

        +

        And

        +

        SELECT * FROM my-index WHERE name LIKE 'j%' AND age > 21

        +

        Or

        +

        SELECT * FROM my-index WHERE name LIKE 'j%' OR age > 21

        +

        Count distinct

        +

        SELECT count(distinct age) FROM my-index

        +

        In

        +

        SELECT * FROM my-index WHERE name IN ('alejandro', 'carolina')

        +

        Not

        +

        SELECT * FROM my-index WHERE name NOT IN ('jane')

        +

        Between

        +

        SELECT * FROM my-index WHERE age BETWEEN 20 AND 30

        +

        Aliases

        +

        SELECT avg(age) AS Average_Age FROM my-index

        +

        Date

        +

        SELECT * FROM my-index WHERE birthday='1990-11-15'

        +

        Null

        +

        SELECT * FROM my-index WHERE name IS NULL

        +
        +
        +
      • Aggregations +
        + + + + + + + + + + + + + + + + + + + +
        Table 3 Aggregations

        Aggregation

        +

        Example

        +

        avg()

        +

        SELECT avg(age) FROM my-index

        +

        count()

        +

        SELECT count(age) FROM my-index

        +

        max()

        +

        SELECT max(age) AS Highest_Age FROM my-index

        +

        min()

        +

        SELECT min(age) AS Lowest_Age FROM my-index

        +

        sum()

        +

        SELECT sum(age) AS Age_Sum FROM my-index

        +
        +
        +
      +
      • Include and exclude fields +
        + + + + + + + + + + +
        Table 4 Include and exclude fields

        Pattern

        +

        Example

        +

        include()

        +

        SELECT include('a*'), exclude('age') FROM my-index

        +

        exclude()

        +

        SELECT exclude('*name') FROM my-index

        +
        +
        +
      +
      • Functions +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Table 5 Functions

        Function

        +

        Example

        +

        floor

        +

        SELECT floor(number) AS Rounded_Down FROM my-index

        +

        trim

        +

        SELECT trim(name) FROM my-index

        +

        log

        +

        SELECT log(number) FROM my-index

        +

        log10

        +

        SELECT log10(number) FROM my-index

        +

        substring

        +

        SELECT substring(name, 2,5) FROM my-index

        +

        round

        +

        SELECT round(number) FROM my-index

        +

        sqrt

        +

        SELECT sqrt(number) FROM my-index

        +

        concat_ws

        +

        SELECT concat_ws(' ', age, height) AS combined FROM my-index

        +

        /

        +

        SELECT number / 100 FROM my-index

        +

        %

        +

        SELECT number % 100 FROM my-index

        +

        date_format

        +

        SELECT date_format(date, 'Y') FROM my-index

        +
        +
        +

        You must enable fielddata in the document mapping for most string functions to work properly.

        +
        +
      +
      • Joins +
        + + + + + + + + + + + + + +
        Table 6 Joins

        Join

        +

        Example

        +

        Inner join

        +

        SELECT p.firstname, p.lastname, p.gender, dogs.name FROM people p JOIN dogs d ON d.holdersName = p.firstname WHERE p.age > 12 AND d.age > 1

        +

        Left outer join

        +

        SELECT p.firstname, p.lastname, p.gender, dogs.name FROM people p LEFT JOIN dogs d ON d.holdersName = p.firstname

        +

        Cross join

        +

        SELECT p.firstname, p.lastname, p.gender, dogs.name FROM people p CROSS JOIN dogs d

        +
        +
        +

        For details about the constraints and limitations, see Joins.

        +
      +
      • Show

        Show commands display indices and mappings that match an index pattern. You can use * or % for wildcards.

        + +
        + + + + + + + +
        Table 7 Show

        Show

        +

        Example

        +

        Show tables like

        +

        SHOW TABLES LIKE logs-*

        +
        +
        +
      +
      +

      Joins

      Open Distro for Elasticsearch SQL supports inner joins, left outer joins and cross joins. Joins have the following constraints:

      +
      • You can only join two indices.
      +
      • You must use an alias for an index (for example, people p).
      +
      • In an ON clause, you can only use the AND conditions.
      +
      • In a WHERE statement, do not combine trees that contain multiple indices. For example, the following statement will work:
        WHERE (a.type1 > 3 OR a.type1 < 0) AND (b.type2 > 4 OR b.type2 < -1)
        +
        The following statement will not work:
        WHERE (a.type1 > 3 OR b.type2 < 0) AND (a.type1 > 4 OR b.type2 < -1)
        +
        +
      +
      • You cannot use GROUP BY or ORDER BY to obtain results.
      +
      • LIMIT with OFFSET (for example, LIMIT 25 OFFSET 25) is not supported.
      +
      +

      JDBC Driver

      The Java Database Connectivity (JDBC) driver allows you to integrate Open Distro for Elasticsearch with your business intelligence (BI) applications.

      +

      For details about how to download and use JAR files, see GitHub Repositories.

      +
      +
      + diff --git a/docs/css/umn/css_01_0075.html b/docs/css/umn/css_01_0075.html new file mode 100644 index 000000000..06911b57a --- /dev/null +++ b/docs/css/umn/css_01_0075.html @@ -0,0 +1,58 @@ + + +

      Managing Tags

      +

      Tags are cluster identifiers. Adding tags to clusters can help you identify and manage your cluster resources.

      +

      You can add tags to a cluster when creating the cluster or add them on the details page of the created cluster.

      +

      Managing Tags When Creating a New Cluster

      1. Log in to the CSS management console.
      2. Click Create Cluster in the upper right corner. The Create Cluster page is displayed.
      3. On the Create Cluster page, set Advanced Settings to Custom. Add tags for a cluster.

        You can select a predefined tag and set Tag value for the tag. You can click View Predefined Tag to switch to the TMS management console and view existing tags.

        +

        You can also create new tags by specifying Tag key and Tag value.

        +

        You can add a maximum of 10 tags for a CSS cluster. If the entered tag is incorrect, you can click Delete on the right of the tag to delete the tag.

        + +
        + + + + + + + + + + +
        Table 1 Naming rules for a tag key and value

        Parameter

        +

        Description

        +

        Tag key

        +

        Cannot be left blank.

        +

        Must be unique in a cluster.

        +

        Can contain a maximum of 36 characters.

        +

        Can only consist of digits, letters, hyphens (-), and underscores (_).

        +

        Tag value

        +

        Can contain a maximum of 43 characters.

        +

        Can only consist of digits, letters, hyphens (-), and underscores (_).

        +

        Cannot be left blank.

        +
        +
        +
      +
      +

      Managing Tags of Existing Clusters

      You can modify, delete, or add tags for a cluster.

      +
      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of a cluster for which you want to manage tags.

        The Basic Information page is displayed.

        +
      3. Select the Tags tab, then you can add, modify, or delete tags on the displayed page.
        • View

          On the Tags page, you can view details about tags of the cluster, including the number of tags and the key and value of each tag.

          +
        • Add

          Click Add in the upper left corner. In the displayed Add Tag dialog box, enter the key and value of the tag to be added, and click OK.

          +
        • Modify

          You can only change the value of an existing tag.

          +

          In the Operation column of a tag, click Edit. In the displayed Edit Tag page, enter a new tag value and click OK.

          +
        • Delete

          In the Operation column of the tag, click Delete. After confirmation, click Yes on the displayed Delete Tag page.

          +
        +
        +
      +
      +

      Searching for Clusters by Tag

      1. Log in to the CSS management console.
      2. On the Clusters page, click Search by Tag in the upper right corner of the cluster list.
      3. Enter the target tag key and value.

        You can select a tag key or tag value from their drop-down lists. The system returns a list of clusters that exactly match the tag key or tag value. If you enter multiple tags, the cluster that meets requirements of all the tags will be filtered.

        +

        You can add a maximum of 10 tags at one time.

        +
      4. Click Search.

        The system searches for the target cluster by tag key and value.

        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0076.html b/docs/css/umn/css_01_0076.html new file mode 100644 index 000000000..ba56107e8 --- /dev/null +++ b/docs/css/umn/css_01_0076.html @@ -0,0 +1,56 @@ + + +

      Public Network Access

      +

      You can access a cluster that has the security mode enabled through the public IP address provided by the system.

      +

      If public access is enabled for CSS, then EIP and bandwidth resources will be used and billed.

      +
      +

      Configuring Public Network Access

      1. Log in to the CSS management console.
      2. On the Create Cluster page, enable Security Mode.

        You can enable Security Mode for clusters in Version 6.5.4 and later versions.

        +
      3. Select Automatically assign for Public IP Address and set related parameters.
        +
        + + + + + + + + + + + + + +
        Table 1 Public network access parameters

        Parameter

        +

        Description

        +

        Bandwidth

        +

        Bandwidth of the public network access

        +

        Access Control

        +

        If you disable access control, all IP addresses can access the cluster through the public IP address. If you enable access control, only IP addresses in the whitelist can access the cluster through the public IP address.

        +

        Whitelist

        +

        IP address or IP address range allowed to access a cluster. Use commas (,) to separate multiple addresses.

        +
        +
        +
        +
      +
      +

      Managing Public Network Access

      You can configure, modify, view the public network access of, or disassociate the public IP address from a cluster.

      +
      1. Log in to the CSS management console.
      2. On the Clusters page that is displayed, click the name of the target cluster.
        • Configuring public network access

          If you do not configure the public network access during cluster creation, you can configure it on the Basic Information page after configuring the cluster.

          +

          Click Associate next to Public IP Address, set the access bandwidth, and click OK.

          +

          If the association fails, wait for several minutes and try again.

          +
        +
        • Modifying public network access

          For a cluster for which you have configured public network access, you can click Edit next to Bandwidth to modify the bandwidth, or you can click Set next to Access Control to set the access control function and the whitelist for access.

          +
        • Viewing public network access

          On the Basic Information page, you can view the public IP address associated with the current cluster.

          +
        • Disassociating a public IP address from a cluster

          To disassociate the public IP address, click Disassociate next to Public IP Address.

          +
        +
        +
      +
      +

      Accessing a Cluster Through the Public IP Address

      After configuring the public IP address, you can use it to access the cluster. The access address is https://public IP address:9200/interface URL.

      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0077.html b/docs/css/umn/css_01_0077.html new file mode 100644 index 000000000..bc52a9726 --- /dev/null +++ b/docs/css/umn/css_01_0077.html @@ -0,0 +1,98 @@ + + +

      Managing Logs

      +

      CSS provides log backup and search functions to help you locate faults. You can back up cluster logs to OBS buckets and download required log files to analyze and locate faults.

      +

      Enabling Log Management

      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of the cluster whose logs you want to back up. The Basic Information page is displayed.
      3. Click the Logs tab and enable Log Management.

        indicates that the log management function is disabled. indicates that it is enabled.

        +
      4. Enable the Log Management function. In the Edit Log Backup Configuration dialog box, set the parameters.

        In the displayed dialog box, OBS Bucket, Backup Path, and IAM Agency are automatically created for log backup. You can modify the default value by referring to Table 1.

        + +
        + + + + + + + + + + + + + +
        Table 1 Parameter description

        Parameter

        +

        Description

        +

        Remarks

        +

        OBS Bucket

        +

        Select an OBS bucket from the drop-down list for storing logs. You can also click Create Bucket on the right to create a new OBS bucket.

        +

        The OBS bucket and the cluster must be in the same region.

        +
        NOTE:

        To let an IAM user access an OBS bucket, you need to grant the GetBucketStoragePolicy, GetBucketLocation, ListBucket, and ListAllMyBuckets permissions to the user.

        +
        +

        IAM Agency

        +

        IAM agency authorized by the current account for CSS to access or maintain data stored in the OBS bucket. You can also click Create IAM Agency on the right to create a new IAM agency.

        +

        The IAM agency must meet the following requirements:

        +
        • Agency Type must be Cloud service.
        • Set Cloud Service to CSS.
        • Mandatory policies: Tenant Administrator
        +
        +
        +
      5. (Optional) If the Log Management function has been enabled for the cluster, you can modify the log backup parameters.

        Click on the right of Log Backup Configuration. The Edit Log Backup Configuration dialog box is displayed. You can modify the log backup parameters.

        +
      6. Back up logs.
        • Automatically backing up logs

          Click the icon on the right of Auto Backup to enable the auto backup function.

          +

          indicates that the auto backup function is enabled, and indicates that it is disabled.

          +

          After the automatic backup function is enabled, set the backup start time in the Modify Log Backup Policy dialog box. When the scheduled time arrives, the system will back up logs automatically. Click on the right of the switch to change Backup Start Time.

          +
        • Manually backing up logs

          On the Log Backup tab page, click Back Up. On the displayed page, click Yes to start backup.

          +

          If Task Status in the log backup list is Successful, the backup is successful.

          +

          All logs in the cluster are copied to a specified OBS path. You can view or download log files from the path of the OBS bucket.

          +
          +
        +
      7. Search for logs.

        On the Log Search page, select the desired node, log type, and log level, and click . The search results are displayed.

        +

        When you search for logs, the latest 10,000 logs are matched. A maximum of 100 logs are displayed.

        +
      +
      +

      Viewing Logs

      After backing up logs, you can click Backup Path to go to the OBS console and view the logs.

      +

      Backed up logs mainly include deprecation logs, run logs, index slow logs, and search slow logs. Table 2 lists the storage types of the OBS bucket.

      + +
      + + + + + + + + + + + + + + + + + + + + + + +
      Table 2 Log types

      Log Name

      +

      Description

      +

      clustername_deprecation.log

      +

      Deprecation log

      +

      clustername_index_indexing_slowlog.log

      +

      Search slow log

      +

      clustername_index_search_slowlog.log

      +

      Index slow log

      +

      clustername.log

      +

      Elasticsearch run log

      +

      clustername_access.log

      +

      Access log

      +

      clustername_audit.log

      +

      Audit log

      +
      +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0078.html b/docs/css/umn/css_01_0078.html new file mode 100644 index 000000000..c02cd56c5 --- /dev/null +++ b/docs/css/umn/css_01_0078.html @@ -0,0 +1,14 @@ + + +

      Managing Plugins

      +

      CSS allows you to view default plugins.

      +
      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of a cluster for which you want to install a plugin.

        The Basic Information page is displayed.

        +
      3. Click the Plugins tab.
      4. View the information about default plugins.

        On the Default page, view default plugins supported by the current version.

        +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0079.html b/docs/css/umn/css_01_0079.html new file mode 100644 index 000000000..534d40d60 --- /dev/null +++ b/docs/css/umn/css_01_0079.html @@ -0,0 +1,52 @@ + + +

      Hot and Cold Data Storage

      +

      CSS provides you with cold data nodes. You can store data that requires query response in seconds on high-performance nodes and store data that requires query response in minutes on cold data nodes with large capacity and low specifications.

      +
      • When creating a cluster, you need to configure nodes as data nodes. When you enable the cold data node function, data nodes become hot nodes.
      • You can enable the cold data node, master node, and client node functions at the same time.
      • You can increase nodes and expand storage capacity of cold data nodes. The maximum storage capacity is determined by the node specifications. Local disks do not support storage capacity expansion.
      +
      +

      Hot and Cold Data Node Switchover

      After you enable the cold data node function, the cold data node is labeled with cold. In addition, data nodes are labeled with hot and become hot nodes. You can specify indices to distribute data to cold or hot nodes.

      +

      You can configure a template to store indices on the specified cold or hot node.

      +

      The following figure shows this process. Log in to the Kibana Console page of the cluster, modify the template by configuring the index starting with myindex, and store the indices on the cold node. In this case, the myindex* date is stored on the cold data node by modifying the template.

      +
      • For the 5.x version, run the following command to create a template:
        PUT _template/test
        +{
        +    "order": 1,
        +    "template": "myindex*",
        +    "settings": {
        +        "index": {
        +            "refresh_interval": "30s",
        +            "number_of_shards": "3",
        +            "number_of_replicas": "1",
        +            "routing.allocation.require.box_type": "cold"
        +        }
        +    }
        +}
        +
      • For the 6.x and later versions, run the following command to create a template:
        PUT _template/test
        +{
        +  "order": 1,
        +  "index_patterns": "myindex*",
        +  "settings": {
        +    "refresh_interval": "30s",
        +    "number_of_shards": "3",
        +    "number_of_replicas": "1",
        +    "routing.allocation.require.box_type": "cold"
        +  }
        +}
        +
      +

      You can perform operations on the created index.

      +
      PUT myindex/_settings   
      + { 
      +        "index.routing.allocation.require.box_type": "cold"
      +    }
      +

      You can cancel the configurations of hot and cold data nodes.

      +
      PUT myindex/_settings    
      +{ 
      +        "index.routing.allocation.require.box_type": null
      +    }
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0080.html b/docs/css/umn/css_01_0080.html new file mode 100644 index 000000000..bea414e0e --- /dev/null +++ b/docs/css/umn/css_01_0080.html @@ -0,0 +1,115 @@ + + +

      Configuring Parameters

      +

      CSS allows you to modify configurations in the elasticsearch.yml file on the CSS console. You need to restart the cluster for the modifications to take effect.

      +

      Modifying Parameter Configurations

      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of the cluster for which you want to modify parameter configurations. The Basic Information page is displayed.
      3. Click Parameter Configurations and modify parameters of the corresponding module based on your needs.
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Table 1 Module parameters

        Module Name

        +

        Parameter

        +

        Description

        +

        Cross-domain Access

        +

        http.cors.allow-credentials

        +

        Whether to return the Access-Control-Allow-Credentials of the header during cross-domain access

        +

        Value: true and false

        +

        Default value: false

        +

        http.cors.allow-origin

        +

        Origin IP address allowed for cross-domain access, for example, 122.122.122.122:9200

        +

        http.cors.max-age

        +

        Cache duration of the browser. The cache is automatically cleared after the time range you specify.

        +

        Unit: s

        +

        Default value: 1,728,000

        +

        http.cors.allow-headers

        +

        Headers allowed for cross-domain access, including X-Requested-With, Content-Type, and Content-Length. Use commas (,) and spaces to separate headers.

        +

        http.cors.enabled

        +

        Whether to allow cross-domain access

        +

        Value: true and false

        +

        Default value: false

        +

        http.cors.allow-methods

        +

        Methods allowed for cross-domain access, including OPTIONS, HEAD, GET, POST, PUT, and DELETE. Use commas (,) and spaces to separate methods.

        +

        Reindexing

        +

        reindex.remote.whitelist

        +

        Configured for migrating data from the current cluster to the target cluster through the reindex API. The example value is 122.122.122.122:9200.

        +

        Custom Cache

        +

        indices.queries.cache.size

        +

        Cache size in the query phase

        +

        Value range: 1 to 100

        +

        Unit: %

        +

        Default value: 10%

        +

        Queue Size in a Thread Pool

        +

        thread_pool.bulk.queue_size

        +

        Queue size in the bulk thread pool. The value is an integer.

        +

        Default value: 200

        +

        thread_pool.write.queue_size

        +

        Queue size in the write thread pool. The value is an integer.

        +

        Default value: 200

        +

        thread_pool.force_merge.size

        +

        Queue size in the force merge thread pool. The value is an integer.

        +

        Default value: 1

        +

        Customize

        +

        You can add parameters based on your needs.

        +

        Customized parameters

        +
        NOTE:
        • Enter multiple values in the format as [value1, value2, value3...].
        • Separate values by commas (,) and spaces.
        • Colons (:) are not allowed.
        +
        +
        +
        +
        +
      4. Click Submit.

        In the displayed Submit Configuration dialog box, select the box indicating "I understand that the modification will take effect after the cluster is restarted." and click Yes.

        +

        You can view the modification records on the displayed page. The system displays a maximum of 20 records.

        +

        You need to restart the cluster after modification. If you do not restart the cluster after modifying the parameter configurations, Configuration unupdated is displayed in the Task Status column on the Clusters page.

        +

        If you restart the cluster after the modification, Task Status displays Configuration error, the parameter configuration file fails to be modified.

        +
        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0082.html b/docs/css/umn/css_01_0082.html new file mode 100644 index 000000000..2381f387b --- /dev/null +++ b/docs/css/umn/css_01_0082.html @@ -0,0 +1,39 @@ + + +

      VPC Endpoint Service

      +

      The VPC endpoint service allows you to access the cluster through a private domain name. When the VPC endpoint service is enabled, the system creates a VPC endpoint for you by default. To create a VPC endpoint, you must have the required permissions. For details, see .

      +

      The public IP address access and VPC endpoint service share a load balancer. If you have configured a public access whitelist, public and private IP addresses that access the cluster through VPCEP are restricted because the public IP address access shares the load balancer with the VPC endpoint service. In this case, you need to add IP address 198.19.128.0/17 to the public access whitelist to allow traffic through VPCEP.

      +
      +

      Enabling the VPC Endpoint Service

      1. Log in to the CSS management console.
      2. On the Create Cluster page, set Advanced Settings to Custom. Enable the VPC endpoint service.
        • Private Domain Name Creation: If you enable this function, the system automatically creates a private domain name for you, which you can use to access the cluster.
        • VPC Endpoint Service Whitelist: You can add an authorized account ID to the VPC endpoint service whitelist. Then you can access the cluster using the domain name or the node IP address.

          Click to add multiple accounts. You can also click Delete in the Operation column to delete accounts.

          +
        +
        • If the authorization account ID is set to *, all users are allowed to access the cluster.
        • You can view authorized account IDs on the My Credentials page.
        • After the VPC endpoint service is enabled for a cluster, you will be billed per use. For more information, see .
        +
        +
        +
      +
      +

      Managing VPC Endpoint Service

      You can enable the VPC endpoint service while creating a cluster, and also enable it by performing the following steps after cluster creation.

      +
      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of the target cluster.
      3. Click the VPC Endpoint Service tab, and turn on the button next to VPC Endpoint Service.

        indicates disabling the VPC endpoint service and indicates enabling the VPC endpoint service.

        +

        In the displayed dialog box, you can determine whether to enable the private domain name. After a private domain name is created, you can access the cluster using the private domain name.

        +
        +
        +
      4. Click Yes to enable the VPC endpoint service.
      5. (Optional) Click Update next to VPC Endpoint Service Whitelist to update the existing whitelist.
      6. Manage connections of the VPC endpoint.

        The VPC Endpoint Service page displays all VPC endpoints connected to the current VPC endpoint service. You can accept or reject the connection with these endpoints. If you reject the connection with a VPC endpoint, you cannot access the cluster through the private domain name generated by the VPC endpoint.

        +
      +
      +

      Accessing the Cluster Using the Private Domain Name or Node IP Address

      1. Obtain the private domain name or node IP address.
        • Current user

          Log in to the CSS console, click the target cluster name and go to the Basic Information page. Click the VPC Endpoint Service tab and view the private domain name.

          +
        • Other users

          If you have applied for the VPC endpoint service, log in to the and click the target ID to go to the Summary page and view the private domain name.

          +
        +
      2. Run the cURL command to execute the API or call the API by using a program before accessing the cluster. For details about Elasticsearch operations and APIs, see the Elasticsearch Reference.

        The ECS must meet the following requirements:

        +
        • Sufficient disk space is allocated for the ECS.
        • The ECS and the cluster must be in the same VPC. After enabling the VPC endpoint service, you can access the cluster from the ECS even when the cluster is not in the same VPC as the ECS.
        • The security group of the ECS must be the same as that of the cluster.

          If this requirement is not met, modify the ECS security group or configure the inbound and outbound rules of the ECS security group to allow the ECS security group to be accessed by all security groups of the cluster. For details, see Configuring Security Group Rules.

          +
        • Configure security group rule settings of the target CSS cluster. Set Protocol to TCP and Port Range to 9200 or a port range including port 9200 for both the outbound and inbound directions.
        +
        • If the cluster does not have the security mode enabled, run the following command:
          
          +
        • If the cluster you access has the security mode enabled, access the cluster using HTTPS and add the username, password and -u to the cURL command.
          
          +
        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0088.html b/docs/css/umn/css_01_0088.html new file mode 100644 index 000000000..b1fe4f1af --- /dev/null +++ b/docs/css/umn/css_01_0088.html @@ -0,0 +1,87 @@ + + +

      Kibana Public Access

      +

      For CSS clusters that have security mode enabled, you can access Kibana through the Internet after configuring Kibana public access. For a cluster that has security mode enabled, CSS allows you to enable Kibana public access and configure access bandwidth. After the configuration is complete, the cluster obtains a Kibana public IP address that you can use to access Kibana of this cluster.

      +

      You can configure Kibana public access when creating a cluster or configure this function after enabling security mode for a cluster.

      +

      Clusters purchased before rollout of this feature do not support this function.

      +
      +

      Configuring Kibana Public Access When Creating a Cluster

      1. Log in to the CSS management console.
      2. Click Create Cluster in the upper right corner. The Create Cluster page is displayed.
      3. On the Create Cluster page, enable Security Mode.

        You can enable Security Mode for clusters of version 6.5.4 and later versions.

        +
      4. Set Advanced Settings to Custom, enable Kibana Public Access, and set parameters. +
        + + + + + + + + + + + + + +
        Table 1 Kibana public access parameters

        Parameter

        +

        Description

        +

        Bandwidth

        +

        Bandwidth for accessing Kibana with the public IP address

        +

        Value range: 1 to 100

        +

        Unit: Mbit/s

        +

        Access Control

        +

        If you disable this function, any IP addresses can access the cluster through the public IP address. If you enable this function, only IP addresses or IP address ranges in the whitelist can access the cluster through the public IP address.

        +

        Whitelist

        +

        IP address or IP address range allowed to access a cluster. Use commas (,) to separate multiple addresses.

        +

        You are advised to enable this function.

        +
        +
        +

        After the cluster is created, click the cluster name to go to the Basic Information page. On the Kibana Public Access page, you can view the Kibana public IP address.

        +
      +
      +

      Configuring Kibana Public Access for an Existing Cluster

      You can enable, disable, modify, and view Kibana public access for an existing cluster that has security mode enabled.

      +
      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of the target cluster.
      3. Click the Kibana Public Access tab. Turn on the Kibana Public Access switch to enable the Kibana public access function.

        indicates that Kibana public access is disabled. indicates that Kibana public access is enabled.

        +
      4. On the displayed page, set parameters. +
        + + + + + + + + + + + + + +
        Table 2 Kibana public access parameters

        Parameter

        +

        Description

        +

        Bandwidth

        +

        Bandwidth for accessing Kibana with the public IP address

        +

        Value range: 1 to 100

        +

        Unit: Mbit/s

        +

        Access Control

        +

        If you disable this function, any IP addresses can access the cluster through the public IP address. If you enable this function, only IP addresses or IP address ranges in the whitelist can access the cluster through the public IP address.

        +

        Whitelist

        +

        IP address or IP address range allowed to access a cluster. Use commas (,) to separate multiple addresses.

        +

        You are advised to enable this function.

        +
        +
        +
      5. After you set the parameters, click OK.
      +
      +

      Modifying Kibana Public Access

      CSS allows you to modify bandwidth and access control of clusters configured with Kibana public access.

      +
      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of the target cluster.
      3. Click the Kibana Public Access tab and modify the Kibana public access parameters.
        • Modifying bandwidth

          Click Modify on the right of Bandwidth. On the Modify Bandwidth page, modify the bandwidth and click OK.

          +
        • Modifying access control

          Click Modify on the right of Access Control. On the Modify Access Control page, set Access Control and Whitelist, and click OK.

          +
        +
      +
      +

      Accessing Kibana with the Public IP Address

      After configuring Kibana public access, you will obtain a public IP address that you can use to access Kibana of this cluster.

      +
      1. Log in to the CSS management console.
      2. On the Clusters page, click the name of the target cluster.
      3. Click the Kibana Public Access tab to obtain the Kibana public IP address.
      4. Use this IP address to access Kibana of this cluster through the Internet.
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_01_0094.html b/docs/css/umn/css_01_0094.html new file mode 100644 index 000000000..32cbcf1e6 --- /dev/null +++ b/docs/css/umn/css_01_0094.html @@ -0,0 +1,205 @@ + + +

      Creating an Elasticsearch Cluster in Non-Security Mode

      +

      Procedure

      1. Log in to the CSS management console.
      2. Click Create Cluster in the upper right corner. The Create Cluster page is displayed.
      3. Specify Region and AZ. +
        + + + + + + + + + + +
        Table 1 Parameter description for Region and AZ

        Parameter

        +

        Description

        +

        Region

        +

        Select a region for the cluster from the drop-down list on the right. Currently, only eu-de is supported.

        +

        AZ

        +

        Select an AZ associated with the cluster region.

        +

        You can select one or more AZs. For details, see Multi-AZ HA.

        +
        +
        +
      4. Set basic information about the cluster. Specifically, specify Version and Name. +
        + + + + + + + + + + +
        Table 2 Description of basic parameters

        Parameter

        +

        Description

        +

        Version

        +

        Select a cluster version from the drop-down list box.

        +

        Name

        +

        Name of a cluster. Cluster names contain 4 to 32 characters. Only letters, numbers, hyphens (-), and underscores (_) are allowed and the value must start with a letter.

        +
        NOTE:

        After a cluster is created, you can modify the cluster name as required. Click the name of a cluster to be modified. On the displayed Basic Information page, click next to the cluster name. After the modification is completed, click to save the modification. If you want to cancel the modification, click .

        +
        +
        +
        +
        Figure 1 Configuring basic information
        +
      5. Set host specifications of the cluster. +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Table 3 Parameter description

        Parameter

        +

        Description

        +

        Nodes

        +

        Number of nodes in a cluster.

        +
        • If neither a master node nor client node is enabled, the nodes specified by this parameter are used to serve as both the master node and client node. Nodes provide the cluster management, data storage, cluster access, and data analysis functions. To ensure data stability in the cluster, it is recommended that you set this parameter to a value no less than 3.
        • If only the master node function is enabled, nodes specified by this parameter are used to store data and provide functions of client nodes.
        • If both the master and client node functions are enabled, the nodes specified by this parameter are only used for storing data.
        • If only the client node function is enabled, nodes specified by this parameter are used to store data and provide functions of the master node.
        +

        CPU Architecture

        +

        Currently, x86 and Kunpeng are supported. The supported type is determined by the actual regional environment.

        +

        Node Specifications

        +

        Specifications of nodes in a cluster. You can select a specified specification based on your needs. Only one node specification can be selected for each cluster. You cannot select the CPU and memory resources that have been sold out.

        +

        Currently, the following flavors are supported: css.medium.8, css.large.8, css.xlarge.8, css.2xlarge.8, and css.4xlarge.8.

        +

        After you select a flavor, the CPU and memory corresponding to the current specification are displayed below the parameter. For example, if you select css.medium.8, then 1 vCPUs | 8 GB will be displayed, indicating that the node flavor you select contains one vCPU and 8 GB memory.

        +

        Node Storage Type

        +

        In the current version, the following options are available: Common I/O, High I/O, and Ultra-high I/O.

        +

        Node Storage Capacity

        +

        Storage space. Its value varies with node specifications.

        +
        • Value range of flavor css.medium.8: 40 GB to 640 GB
        • Value range of flavor css.large.8: 40 GB to 1,280 GB
        • Value range of flavor css.xlarge.8: 40 GB to 2,560 GB
        • Value range of flavor css.2xlarge.8: 80 GB to 5,120 GB
        • Value range of flavor css.4xlarge.8: 160 GB to 10,240 GB
        +

        Disk Encryption

        +

        If you select this option, the nodes in the cluster you create will use encrypted EVS disks to protect data. By default, this option is not selected. Note that you cannot modify this setting after the cluster is created. Therefore, exercise caution when performing the setting.

        +

        After you select this option, you need to select an available key from the Key Name drop-down list. If no key is available, click Create/View Key to go to the KMS management console and create or modify a key. For details, see Creating a CMK.

        +

        Enabling disk encryption has no impact on your operations on a cluster (such as accessing the cluster and importing data to the cluster). However, after you enable disk encryption, operation performance deteriorates by about 10%.

        +
        NOTE:
        • If the cluster is in the Available status and the key used for disk encryption is in the Pending deletion or disable status or has been deleted after a cluster is created, cluster scale-out is not allowed. However, other operations on the cluster, such as restarting the cluster, creating snapshots, restoring the cluster, and importing data to the cluster are not affected. In addition, this key cannot be used for cluster creation in the future.
        • After a cluster is created, do not delete the key used by the cluster. Otherwise, the cluster will become unavailable.
        • The Default Master Keys cannot be used to create grants. Specifically, you cannot use Default Master Keys whose aliases end with /default in KMS to create clusters.
        +
        +

        Master node

        +

        The master node manages all nodes in the cluster. If 20 or more nodes are required to store and analyze the large amount of data, you are advised to enable the master node to ensure cluster stability. Otherwise, you are advised to set only the Nodes parameter and use the nodes as both master and client nodes..

        +

        After enabling the master node, specify Node Specifications, Nodes, and Node Storage Type. The value of Nodes must be an odd number equal to or greater than 3. You can set a maximum of nine nodes. The value of Node Storage Capacity is fixed. You can select a storage type based on your needs. By default, the node storage type is High I/O and the node storage capacity is 40 GB.

        +

        Client node

        +

        The client node allows clients to access clusters and analyze data. If more than 20 nodes are required to store and analyze a large amount of data, you are advised to enable the client node to ensure cluster stability. Otherwise, you are advised to set only the Nodes parameter and use the nodes as both master and client nodes..

        +

        After enabling the client node, specify Node Specifications, Nodes and Node Storage Type. The value of Nodes ranges from 1 to 32. The value of Node Storage Capacity is fixed. You can select a storage type based on your needs. By default, the node storage type is High I/O and the node storage capacity is 40 GB.

        +

        Cold data node

        +

        The cold data node is used to store historical data, for which query responses can be returned in minutes. If you do not quire a quick query response, store historical data on cold data nodes to reduce costs.

        +

        After enabling cold data node, configure Node Specifications, Nodes, Node Storage Type, and Node Storage Capacity. The value of Nodes ranges from 1 to 32. Select Node Storage Type and Node Storage Capacity as requirement.

        +

        After the cold data node is enabled, CSS automatically adds cold and hot tags to related nodes.

        +
        +
        +
        Figure 2 Configuring node specifications
        +
      6. Set network specifications of the cluster. +
        + + + + + + + + + + + + + + + + +
        Table 4 Parameter description

        Parameter

        +

        Description

        +

        VPC

        +

        A VPC is a secure, isolated, and logical network environment.

        +

        Select the target VPC. Click View VPC to enter the VPC management console and view the created VPC names and IDs. If no VPC is available, create a VPC.

        +
        NOTE:

        The VPC must contain CIDRs. Otherwise, cluster creation will fail. By default, a VPC will contain CIDRs.

        +
        +

        Subnet

        +

        A subnet provides dedicated network resources that are isolated from other networks, improving network security.

        +

        Select the target subnet. You can access the VPC management console to view the names and IDs of the existing subnets in the VPC.

        +

        Security Group

        +

        A security group is a collection of access control rules for ECSs that have the same security protection requirements and are mutually trusted in a VPC. To view more details about the security group, click View Security Group.

        +
        NOTE:
        • For cluster access purposes, ensure that the security group contains port 9200.
        • If your cluster version is 7.6.2 or 7.9.3, ensure that all the ports used for communication between nodes in the same security group are allowed. If such settings cannot be configured, ensure at least the access to port 9300 is allowed.
        • After a cluster is created, its security group cannot be changed.
        +
        +

        Security Mode

        +

        Security mode is disabled.

        +
        NOTE:

        You can enable Security Mode only when you create a cluster. After a cluster is created, its security mode cannot be changed.

        +
        +
        +
        +
        Figure 3 Configuring network specifications
        +
      7. Set the enterprise project of the cluster.

        When creating a CSS cluster, you can bind an enterprise project to the cluster if you have enabled enterprise project. You can select an enterprise project created by the current user from the drop-down list or click View Project Project to go to the Enterprise Project Management console and create a new project or view existing projects.

        +
      8. Configure automatic snapshot creation for the cluster.

        By default, the cluster snapshot function is enabled. If you do not need this function, you can disable Cluster Snapshot.

        +
        Basic Configuration
        • OBS Bucket: name of the OBS bucket used for storing snapshots.
        • Backup Path: storage path of the snapshot in the OBS bucket.
        • IAM Agency: authorized by the current account for CSS to access or maintain data stored in the OBS bucket.
        +
        +

        For details, see Managing Automatic Snapshot Creation.

        +

        Automatic Snapshot Creation

        +

        You can customize Snapshot Name Prefix, Backup Start Time, and Retention Period (days) as required.

        +
        • Snapshot Name Prefix: Enter a maximum of 32 characters starting with a lowercase letter. Only lowercase letters, digits, hyphens (-), and underscores (_) are allowed.. A snapshot name consists of a snapshot name prefix and a timestamp. For example, snapshot-1566921603720.
        • Backup Started: indicates the time when the backup starts automatically every day. You can specify this parameter only in hours, for example, 00:00 or 01:00. The value ranges from 00:00 to 23:00. Select a time from the drop-down list box.
        • Retention Period (days): indicates the duration when snapshots are retained in the OBS bucket, in days. The value ranges from 1 to 90. You can specify this parameter as required. The system automatically deletes expired snapshots every hour at half past the hour.
        +
      9. Configure advanced settings for the cluster.
        • Default: The the VPC Endpoint Service, Kibana Public Access, and Tag functions are disabled by default. You can manually enable these functions after the cluster is created.
        • Custom: You can enable the VPC Endpoint Service and Tag functions as required.
        + +
        + + + + + + + + + + + + + +
        Table 5 Parameters for advanced settings

        Parameter

        +

        Description

        +

        VPC Endpoint Service

        +

        After enabling this function, you can obtain a private domain name for accessing the cluster in the same VPC. For details, see VPC Endpoint Service.

        +

        Kibana Public Access

        +

        Clusters in non-security mode cannot access Kibana through the Internet.

        +

        Tag

        +

        Adding tags to clusters can help you identify and manage your cluster resources. You can customize tags or use tags predefined by TMS. For details, see Managing Tags.

        +
        +
        +
      10. Click Next to switch to the Confirm page.
      11. After the specifications are confirmed, click Submit.
      12. Click Back to Cluster List to switch to the Clusters page. The cluster you created is listed on the displayed page and its status is Creating. If the cluster is successfully created, its status will change to Available.

        If the cluster creation fails, create the cluster again.

        +
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_02_0001.html b/docs/css/umn/css_02_0001.html new file mode 100644 index 000000000..3c2b55bc5 --- /dev/null +++ b/docs/css/umn/css_02_0001.html @@ -0,0 +1,39 @@ + + +

      FAQs

      +
      + + diff --git a/docs/css/umn/css_02_0006.html b/docs/css/umn/css_02_0006.html new file mode 100644 index 000000000..a33c3abff --- /dev/null +++ b/docs/css/umn/css_02_0006.html @@ -0,0 +1,17 @@ + + +

      How Does CSS Ensure Data and Service Security?

      +

      CSS uses network isolation, in addition to various host and data security measures.

      +
      • Network isolation

        The entire network is divided into two planes: service plane and management plane. The two planes are deployed and isolated physically to ensure the security of the service and management networks.

        +
        • Service plane: This is the network plane of the cluster. It provides service channels for users and delivers data definitions, indexing, and search capabilities.
        • Management plane: This is the management console, where you manage CSS.
        +
      • Host security

        CSS provides the following security measures:

        +
        • The VPC security group ensures the security of the hosts in a VPC.
        • Network access control lists (ACLs) allow you to control what data can enter or exit your network.
        • The internal security infrastructure (including the network firewall, intrusion detection system, and protection system) monitors all network traffic that enters or exits the VPC through an IPsec VPN.
        +
      • Data security

        Multiple replicas, cross-AZ deployment of clusters, and third-party (OBS) backup of index data ensure the security of user data.

        +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0007.html b/docs/css/umn/css_02_0007.html new file mode 100644 index 000000000..647e11ca1 --- /dev/null +++ b/docs/css/umn/css_02_0007.html @@ -0,0 +1,15 @@ + + +

      Which CSS Metrics Should I Focus On?

      +

      Disk usage and cluster health status are two key metrics that you can focus on. You can log in to Cloud Eye and configure alarm rules for these metrics. If alarms are reported, handle them by taking appropriate measures. For details about how to configure alarms, see Creating Alarm Rules.

      +

      Configuration examples:

      +
      • Alarms are reported if the disk usage is higher than or equal to a specified value (for example, 85%) and has reached this value multiple times (for example, 5 times) within a specified time period (for example, 5 minutes).
      • Alarms are reported if the value of the cluster health status metric exceeds 0 for multiple times (for example, 5 times) within a specified time period (for example, 5 minutes).
      +

      Measures:

      +
      • If disk usage alarms are reported, view available disk space, check whether data can be deleted from cluster nodes or archived to other systems to free up space, or check if you can expand the disk capacity.
      • If cluster health status alarms are reported, check whether shard allocation is normal, whether shards have been lost, and check whether the process has been restarted on Cerebro.
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0008.html b/docs/css/umn/css_02_0008.html new file mode 100644 index 000000000..6e2e7eef5 --- /dev/null +++ b/docs/css/umn/css_02_0008.html @@ -0,0 +1,12 @@ + + +

      What Storage Options Does CSS Provide?

      +

      CSS uses EVS and local disks to store your indices. During cluster creation, you can specify the EVS disk type and specifications (the EVS disk size).

      +
      • Supported EVS disk types include common I/O, high I/O, and ultra-high I/O.
      • The EVS disk size varies depending on the node specifications selected when you create a cluster.
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0009.html b/docs/css/umn/css_02_0009.html new file mode 100644 index 000000000..693cb671f --- /dev/null +++ b/docs/css/umn/css_02_0009.html @@ -0,0 +1,11 @@ + + +

      What Is the Maximum Storage Capacity of CSS?

      +

      You can configure up to 200 nodes for a cluster (each node corresponds to an ECS). The maximum storage capacity of an ECS is the total capacity of EVS disks attached to the ECS. You can calculate the total storage capacity of CSS based on the sizes of EVS disks attached to different ECSs. The EVS disk size is determined by the node specifications selected when you create the cluster.

      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0010.html b/docs/css/umn/css_02_0010.html new file mode 100644 index 000000000..7de512c27 --- /dev/null +++ b/docs/css/umn/css_02_0010.html @@ -0,0 +1,12 @@ + + +

      What Can the Disk Space of a CSS Cluster Be Used For?

      +

      You can store the following logs and files:

      +
      • Log files: Elasticsearch logs
      • Data files: Elasticsearch index files
      • Other files: cluster configuration files
      • OS: 5% storage space reserved for the OS by default
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0017.html b/docs/css/umn/css_02_0017.html new file mode 100644 index 000000000..ca50e5e08 --- /dev/null +++ b/docs/css/umn/css_02_0017.html @@ -0,0 +1,17 @@ + + +

      How Can I Manage CSS?

      +
      You can use any of the following three methods to manage CSS or to use search engine APIs. You can initiate requests based on constructed request messages.
      • curl

        curl is a command-line tool used to transfer data to or from a given URL. It serves as an HTTP client that can send HTTP requests to the HTTP server and receive response messages. You can also use curl to debug APIs. For more information about curl, visit https://curl.haxx.se/.

        +
      • Code

        You can call APIs through code to assemble, send, and process request messages.

        +
      • REST client

        Both Mozilla Firefox and Google Chrome provide a graphical browser plugin, the REST client, which you can use to send and process requests.

        +

        – For Mozilla Firefox, see Firefox REST Client.

        +

        – For Google Chrome, see Postman.

        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0018.html b/docs/css/umn/css_02_0018.html new file mode 100644 index 000000000..782973c48 --- /dev/null +++ b/docs/css/umn/css_02_0018.html @@ -0,0 +1,26 @@ + + +

      How Can I Improve Filebeat Performance?

      +

      Symptom

      Filebeat is a high-performance file collection tool. By default, one core is allocated to Filebeat, and it writes 1 MB data to Elasticsearch per second. However, in practice, when a large number of service logs are generated, Filebeat cannot promptly collect and write them to Elasticsearch. In this case, you can optimize parameter settings in the filebeat.yml file to improve the Filebeat performance.

      +
      +

      Procedure

      1. Optimize the parameters involved in input of the filebeat.yml configuration file.

        Increase the value of harvester_buffer_size based on actual requirements. This parameter defines the buffer size used by every harvester.

        +

        harvester_buffer_size: 40,960,000

        +

        Increase the value of filebeat.spool_size based on actual requirements. This parameter defines the number of log records that can be uploaded by the spooler at a time.

        +

        filebeat.spool_size: 250,000

        +

        Adjust the value of filebeat.idle_timeout based on actual requirements. This parameter defines how often the spooler is flushed. After the idle_timeout is reached, the spooler is flushed regardless of whether the spool_size has been reached.

        +

        filebeat.idle_timeout: 1s

        +
      2. Optimize the parameters involved in output.elasticsearch in the filebeat.yml configuration file.

        Set the value of worker to the number of Elasticsearch clusters based on actual requirements. This parameter indicates the number of Elasticsearch clusters. The default value is 1.

        +

        worker: 1

        +

        Increase the value of bulk_max_size based on actual requirements. This parameter defines the maximum number of events to bulk in a single Elasticsearch bulk API index request. The default is 50.

        +

        bulk_max_size: 15,000

        +

        Adjust the value of flush_interval based on the actual requirements. This parameter defines the number of seconds to wait for new events between two bulk API index requests. If bulk_max_size is reached before this interval expires, additional bulk index requests are made.

        +

        flush_interval: 1s

        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0019.html b/docs/css/umn/css_02_0019.html new file mode 100644 index 000000000..650c791bd --- /dev/null +++ b/docs/css/umn/css_02_0019.html @@ -0,0 +1,19 @@ + + +

      Failed to Open Kibana

      +

      Symptom

      After I click Access Kibana in the Operation column in the row where cluster Es-event resides on the Clusters page of the CSS management console, the Kibana page fails to be loaded and access to Kibana fails.

      +
      +

      Cause

      The browser cache is not cleared.

      +
      +

      Procedure

      1. Log in to the CSS management console.
      2. In the left navigation pane, click Clusters.
      3. On the displayed Clusters page, locate the row containing the target cluster Es-event and click Access Kibana in the Operation column.

        If the cluster has the security mode enabled, enter the username and password you for login. Generally, the username is admin and the password is the one specified during cluster creation.

        +

        If you forget the password, you can reset it on the cluster details page and then log in. For details, see .

        +
        +
      4. On the displayed Kibana page, press F12.
      5. Click Network, right-click data:image, and choose clear browser cache from the shortcut menu. In the displayed dialog box, click OK. Close the Kibana window.
      6. Switch to the Clusters page, locate the row that contains cluster Es-event and click Access Kibana in the Operation column.
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0020.html b/docs/css/umn/css_02_0020.html new file mode 100644 index 000000000..7b0e2032d --- /dev/null +++ b/docs/css/umn/css_02_0020.html @@ -0,0 +1,11 @@ + + +

      Which Elasticsearch Versions Does CSS Support?

      +

      In CSS, Elasticsearch 7.6.2, and 7.9.3 and Kibana 7.6.2, and 7.9.3 are supported.

      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0023.html b/docs/css/umn/css_02_0023.html new file mode 100644 index 000000000..25fe61672 --- /dev/null +++ b/docs/css/umn/css_02_0023.html @@ -0,0 +1,11 @@ + + +

      Can CSS Interconnect with Logstash?

      +

      Yes. It is recommended that the Logstash version be the same as the Elasticsearch version. You need to apply for an ECS to install and configure Logstash.

      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0025.html b/docs/css/umn/css_02_0025.html new file mode 100644 index 000000000..602eaedf9 --- /dev/null +++ b/docs/css/umn/css_02_0025.html @@ -0,0 +1,27 @@ + + +

      Why Does My ECS Fail to Connect to a Cluster?

      +

      Perform the following steps:

      +
      1. Check whether the ECS instance and cluster are in the same VPC.
        • If they are, go to 2.
        • If they are not, create an ECS instance and ensure that the ECS instance is in the same VPC as the cluster.
        +
      2. View the security group rule setting of the cluster to check whether port 9200 (TCP protocol) is allowed or port 9200 is included in the port range allowed in both the outbound and inbound directions.
        • If it is allowed, go to 3.
        • If it is not allowed, switch to the VPC management console and configure the security group rule of the cluster to allow port 9200 in both the outbound and inbound directions.
        +
      3. Check whether the ECS instance has been added to a security group.
        • If the instance has been added to a security group, check whether the security group configuration rules meet requirements. For details, see the description of Security Group in the cluster information table in Clusters. Then go to 4.
          Figure 1 Viewing security group information
          +
        • If the instance has not been added to the security group, go to the VPC page from the ECS instance details page, select a security group, and add the ECS to the group.
        +
      4. Check whether the ECS instance can connect to the cluster.
        ssh <Private network address and port number of a node>

        If the cluster contains multiple nodes, check whether the ECS can be connected to each node in the cluster.

        +
        +
        +
        • If the connection is normal, the network is running properly.
        • If the ECS still cannot connect to the DB instance port, contact technical support.
        +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_02_0027.html b/docs/css/umn/css_02_0027.html new file mode 100644 index 000000000..7aebf8b30 --- /dev/null +++ b/docs/css/umn/css_02_0027.html @@ -0,0 +1,12 @@ + + +

      Which Search Functions Does CSS Support?

      +

      CSS supports full-text search, highlighting, facet search, near real-time search, dynamic clustering, processing of documents of various types like word and PDF, and geographic information search.

      +

      For details about the search function supported by Elasticsearch, see section "Search in Depth" in the Elasticsearch Reference.

      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0028.html b/docs/css/umn/css_02_0028.html new file mode 100644 index 000000000..ed0c798b5 --- /dev/null +++ b/docs/css/umn/css_02_0028.html @@ -0,0 +1,12 @@ + + +

      Why Does Cluster Creation Fail?

      +

      The following reasons may cause cluster creation to fail:

      +
      • Insufficient resource quota. You are advised to increase the resource quotas. For details, see How Do I Apply for a Higher Quota?
      • The value of Port Range/ICMP Type in Security Group does not include port 9200. Modify the security group information or select another available security group.
      • For cluster version 7.6.2 and later versions, the communication port 9300 is enabled on the subnet of user VPC by default. When you create a cluster, check whether the selected security group allows traffic from communication port 9300 in the subnet. If it does not allow traffic, modify the security group or select another security group.
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0029.html b/docs/css/umn/css_02_0029.html new file mode 100644 index 000000000..bda8b338b --- /dev/null +++ b/docs/css/umn/css_02_0029.html @@ -0,0 +1,19 @@ + + +

      Why Does Index Backup Fail?

      +

      Index backup is implemented by creating cluster snapshots. If index backup fails, perform the following steps:

      +

      Check Whether the Account or IAM User Has the Index Backup Permissions

      1. Log in to the IAM management console.
      2. Check the user group that the account or the IAM user belongs to.

        For details, see Viewing or Modifying User Information.

        +
      3. Check whether the permissions assigned to the user group include the following two permissions: Tenant Administrator for project OBS in region Global service and CSS Administrator for the current region.

        For details, see Viewing and Modifying User Group Information.

        +
        • If neither of the preceding permissions has been assigned, go to 4.
        • If both the preceding permissions have been assigned to the group, contact technical support.
        +
        +
      4. Add the following permissions to the user group: Tenant Administrator for project OBS in region Global service, and CSS Administrator for the current region.

        For details, see Viewing and Modifying User Group Information.

        +

        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_02_0034.html b/docs/css/umn/css_02_0034.html new file mode 100644 index 000000000..9fb796590 --- /dev/null +++ b/docs/css/umn/css_02_0034.html @@ -0,0 +1,22 @@ + + +

      What Are Regions and AZs?

      +

      Regions and AZs

      A region and availability zone (AZ) identify the location of a data center. You can create resources in a specific region and AZ.

      +
      • A region is a physical data center. Each region is completely independent, and thereby improves fault tolerance and stability. After a resource is created, its region cannot be changed.
      • An AZ is a physical location using independent power supplies and networks. Faults in an AZ do not affect other AZs. A region can contain multiple AZs that are physically isolated but networked together. This enables low-cost and low-latency network connections.
      +
      Figure 1 shows the relationship between regions and AZs.
      Figure 1 Regions and AZs
      +
      +
      +

      Region Selection

      You are advised to select a region close to you or your target users. This reduces network latency and improves the access success rate.

      +
      +

      AZ Selection

      When determining whether to deploy resources in the same AZ, consider your application's requirements for disaster recovery (DR) and network latency.

      +
      • To prioritize DR capabilities, deploy resources in different AZs in the same region.
      • To prioritize network latency, deploy resources in the same AZ.
      +
      +

      Regions and Endpoints

      Before using an API to call resources, you will need to specify the resource region and endpoint. For details about public cloud regions and endpoints, see Regions and Endpoints.

      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0001.html b/docs/css/umn/css_04_0001.html new file mode 100644 index 000000000..70fed5d2a --- /dev/null +++ b/docs/css/umn/css_04_0001.html @@ -0,0 +1,29 @@ + + +

      CSS

      +

      Cloud Search Service (CSS) is a fully managed, distributed search service that enables you to perform quick, real-time search. It is fully compatible with open-source Elasticsearch and provides users with structured and unstructured data search, statistical analysis, and reporting capabilities. CSS works in the way similar to a database.

      +

      You can easily deploy CSS and quickly create clusters. With optimal configurations, CSS is O&M-free. CSS provides you with key metrics regarding the system, clusters, and query performance, freeing you to focus on business logic.

      +

      For details about Elasticsearch, see the Elasticsearch Reference.

      +

      Advantages

      CSS has the following advantages:

      +
      • Efficiency and ease of use

        You can derive insights from terabyte-scale data in milliseconds. In addition, you can use its visualized data platform to easily analyze data.

        +
      • Flexibility and scalability

        You can request clusters and scale out a cluster online with zero service interruption.

        +
      • Custom word dictionary

        Custom word dictionaries are supported. You can modify the word dictionary without having to restart instances.

        +
      • Easy O&M

        CSS is fully-managed and out-of-the-box. You can start using it with a few clicks. Professionals are ready to assist you whenever you want.

        +
      • Solid reliability

        You can choose to trigger snapshots manually or periodically restore snapshots of clusters. You can restore snapshots of a cluster to another cluster to migrate cluster data.

        +
      +
      +

      Functions

      CSS provides the following functions:

      +
      • Professional cluster management

        The management console allows you to securely manage and maintain clusters using a web browser.

        +
      +
      • Robust monitoring system

        The management console allows you to view the running status of created clusters via the dashboard and cluster list. You can obtain the current running status of clusters by viewing metrics.

        +
      +
      • Support for Elasticsearch

        Elasticsearch is a popular enterprise-grade Lucene-powered search server that provides distributed multi-user capabilities. CSS supports Elasticsearch and delivers multiple functions, including full-text search, structured search, analytics, aggregation, and highlighting.

        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0002.html b/docs/css/umn/css_04_0002.html new file mode 100644 index 000000000..90a6588dc --- /dev/null +++ b/docs/css/umn/css_04_0002.html @@ -0,0 +1,17 @@ + + +

      Applicable Scenarios for Elasticsearch Clusters

      +

      CSS Elasticsearch clusters are suitable to scenarios such as log analysis and site search.

      +

      Log Analysis

      You can perform O&M analysis and troubleshoot IT devices, and perform operation analytics based on service metrics.

      +
      • Statistical analysis: Over 20 statistical analysis methods and nearly ten analytical dimensions are available.
      • Real-time and efficient: You can get insights within seconds once new data is indexed.
      • Visualized data: You can choose to display data in multiple ways, including tables, line charts, heat maps, and cloud maps.
      +
      +

      Site Search

      You can search website content by keyword as well or search for products on e-commerce sites with recommendations obtained.

      +
      • Real-time search: When site content is updated, you can find the content in your search within minutes, or even just seconds.
      • Categorized statistics: You can apply search filters to sort products by category, complete with statistical breakdowns.
      • Custom highlight style: You can define how the search results are highlighted.
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0003.html b/docs/css/umn/css_04_0003.html new file mode 100644 index 000000000..cbcbfcbb2 --- /dev/null +++ b/docs/css/umn/css_04_0003.html @@ -0,0 +1,57 @@ + + +

      Basic Concepts

      +

      Cluster

      CSS provides functions on a per cluster basis. A cluster represents an independent search service that contains multiple nodes.

      +
      +

      Index

      Index is similar to "database" in the relational database (RDB) and stores Elasticsearch data. It refers to a logical space that consists of one or more shards.

      + +
      + + + + + + + + + + + + + + +
      Table 1 Mapping between Elasticsearch and RDB

      Elasticsearch

      +

      Index

      +

      Type

      +

      Document

      +

      Field

      +

      Mapping

      +

      RDB

      +

      Database

      +

      Table

      +

      Row

      +

      Column

      +

      Schema

      +
      +
      +
      +

      Shard

      An index can potentially store a large amount of data that exceeds the hardware limits of a single node. To solve this problem, Elasticsearch subdivides your index into multiple pieces called shards. When you create an index, you can simply define the number of shards that you want. Each shard is in itself a fully-functional and independent "index" that can be hosted on any node in the cluster.

      +

      You need to specify the number of shards before creating an index and cannot change the number of shards after the index is created.

      +
      +

      Replica

      A replica is a copy of the actual storage index in a shard. It can be understood as a backup of the shard. Replicas help prevent single point of failures (SPOFs). You can increase or decrease the number of replicas based on your service requirements.

      +
      +

      Document

      An entity for Elasticsearch storage. Equivalent to a row in the RDB, the document is the basic unit that can be indexed.

      +
      +

      Type

      Similar to a table in the RDB, type is used to distinguish between different data. One index can contain multiple document types. A document must be indexed to a document type inside an index.

      +
      +

      Mapping

      A mapping is used to restrict the type of a field and is automatically created based on data. It is similar to a schema in the database.

      +
      +

      Field

      Minimum unit of a document. A field is similar to a column in a database.

      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0004.html b/docs/css/umn/css_04_0004.html new file mode 100644 index 000000000..8f1920fe3 --- /dev/null +++ b/docs/css/umn/css_04_0004.html @@ -0,0 +1,24 @@ + + +

      Related Services

      +

      This section describes the relationship between CSS and other services.

      +
      • Virtual Private Cloud (VPC)

        CSS clusters are created in the subnets of a VPC. VPCs provide a secure, isolated, and logical network environment for your clusters.

        +
      +
      • Elastic Cloud Server (ECS)

        In a CSS cluster, each node represents an ECS. When you create a cluster, ECSs are automatically created.

        +
      +
      • Elastic Volume Service (EVS)

        CSS uses EVS to store index data. When you create a cluster, EVSs are automatically created for cluster data storage.

        +
      • Object Storage Service (OBS)

        Snapshots of CSS clusters are stored in OBS buckets.

        +
      +
      • Identity and Access Management (IAM)

        IAM authenticates access to CSS.

        +
      +
      • Cloud Eye

        CSS uses Cloud Eye to monitor cluster metrics in real time. The supported CSS metrics include the disk usage and cluster health status. You can learn about the disk usage of the cluster based on the disk usage metric. You can learn about the health status of a cluster based on the cluster health status metric.

        +
      • Cloud Trace Service (CTS)

        With CTS, you can record operations associated with CSS for query, audit, and backtrack operations.

        +
      • Key Management Service (KMS)

        If disk encryption is enabled on CSS clusters, you need to obtain the key provided by KMS to encrypt and decrypt the disk data.

        +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0005.html b/docs/css/umn/css_04_0005.html new file mode 100644 index 000000000..055dbcf4d --- /dev/null +++ b/docs/css/umn/css_04_0005.html @@ -0,0 +1,36 @@ + + +

      Constraints

      +

      Clusters and Nodes

      The following table describes restrictions on clusters and nodes in CSS.

      + +
      + + + + + + + + + + +
      Table 1 Restrictions on clusters and nodes

      Cluster and Node

      +

      Restriction

      +

      Maximum number of nodes in a cluster

      +

      32

      +

      Minimum number of nodes in a cluster

      +

      1

      +
      +
      +
      +

      Browsers

      • You are advised to use the following browsers to access the CSS management console:
        • Google Chrome 36.0 or later
        • Mozilla Firefox 35.0 or later
        +
      • You are advised to use the following browsers to access Kibana integrated in CSS:
        • Google Chrome 36.0 or later
        • Mozilla Firefox 35.0 or later
        +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0007.html b/docs/css/umn/css_04_0007.html new file mode 100644 index 000000000..8189faf19 --- /dev/null +++ b/docs/css/umn/css_04_0007.html @@ -0,0 +1,18 @@ + + +

      Kibana

      +

      Kibana is an open-source data analytics and visualization platform that works with Elasticsearch. You can use Kibana to search, view, and interact with data stored in Elasticsearch indices and to visualize your data in a variety of charts, tables, and maps.

      +

      To learn more about Kibana, go to the Kibana official website: https://www.elastic.co/guide/en/kibana/current/index.html

      +

      Accessing Kibana with Just a Few Clicks

      CSS is integrated with Kibana. You can access Kibana with just a few clicks, without installing Kibana.

      +

      Log in to the CSS management console. In the left navigation pane, click Clusters. On the displayed Clusters page, locate the row containing the target cluster and click Access Kibana in the Operation column.

      +
      +

      Kibana Functions

      Kibana delivers visualization and Elasticsearch statistics and analysis functions. Kibana supports:

      +
      • Over 10 data presentation modes
      • Nearly 20 data statistics methods
      • Classification in terms of various dimensions, such as time and tag
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0019.html b/docs/css/umn/css_04_0019.html new file mode 100644 index 000000000..70cf78289 --- /dev/null +++ b/docs/css/umn/css_04_0019.html @@ -0,0 +1,87 @@ + + +

      Clusters in Security Mode

      +

      Security mode is supported for Elasticsearch 7.1.1 and later versions. After you enable security mode, identity verification, authorization, and encryption are required.

      +

      This section describes the security mode using Kibana as an example.

      +

      You can enable security mode only during cluster creation and not after the cluster is created.

      +
      +

      Key Terms

      +
      + + + + + + + + + + + + + + + + + + + + + + +
      Table 1 Key terms of security mode

      Term

      +

      Description

      +

      Permission

      +

      Single action, for example, creating an index (for example, indices:admin/create)

      +

      Action group

      +

      A group of permissions. For example, the predefined SEARCH action group grants roles permissions to use _search and _msearchAPI.

      +

      Role

      +

      A role is a combination of permissions and action groups, including operation permissions on clusters, indices, documents, or fields.

      +

      Backend role

      +

      (Optional) Other external roles from the backend such as LDAP/Active Directory

      +

      User

      +

      A user can send operation requests to the Elasticsearch cluster. The user has credentials such as username and password, zero or more backend roles, and zero or more custom attributes.

      +

      Role mapping

      +

      A user will be assigned a role after successful authentication. Role mapping is to map a role to a user (or a backend role). For example, the mapping from kibana_user (role) to jdoe (user) means that John Doe obtains all permissions of kibana_user after being authenticated by kibana_user. Similarly, the mapping from all_access (role) to admin (backend role) means that any user with the backend role admin (from the LDAP/Active Directory server) has all the permissions of role all_access after being authenticated. You can map each role to multiple users or backend roles.

      +
      +
      +
      +

      Identity Verification

      After enabling the security mode, you need to log in to the cluster with the username and password that you set when you create the cluster. You can perform other operations after you log in successfully.

      +
      Figure 1 Login for identity verification
      +
      +

      Authorization

      On the Kibana console, click Security to control user permissions in Elasticsearch clusters. You can configure hierarchical user permissions by cluster, index, document, and field.

      +

      You can add or delete users, and map users to different roles for permissions control.

      +
      Figure 2 Configuring users
      +

      You can use role mapping to configure roles and map a user's username, backend role, and host name to a role.

      +
      Figure 3 Role mapping
      +

      You can set permissions for each role to access clusters, indices and documents and assign Kibana tenants different roles.

      +
      Figure 4 Configuring role permissions
      +

      You can set action groups, assign the groups to roles, and configure the roles' permission for accessing indices and documents.

      +
      Figure 5 Configuring action groups
      +

      You can view the parameters of authentication and authorization for the current cluster. You can also run the securityadmin command to modify the configuration.

      +
      Figure 6 Viewing cluster parameters
      +

      You can also clear the security cache.

      +
      Figure 7 Clearing the security cache
      +
      +

      Encryption

      When key data is transferred between nodes or over HTTP, SSL/TLS encryption is used to ensure data security.

      +

      You can perform the preceding functions on Kibana, using .yml files (not recommended), or by calling RESTful APIs. For more information about the security mode, see Security.

      +
      +

      Resetting Passwords

      If you want to change the login password of a cluster with the security mode enabled or you have forgotten the password, reset the cluster password.

      +
      1. On the Clusters page, locate the target cluster whose password you want to reset and click the cluster name. The Basic Information page is displayed.
      2. On the Basic Information page, click Reset next to Reset Password to reset the password.
        • The password can contain 8 to 32 characters.
        • It must include letters, digits, and special characters. No spaces and backslashes (\) are allowed.
        • It cannot be the username or the username spelled backwards.
        • It is good practice to change the password periodically.
        +
        +
      +
      +
      +
      + +
      + + + \ No newline at end of file diff --git a/docs/css/umn/css_04_0022.html b/docs/css/umn/css_04_0022.html new file mode 100644 index 000000000..4d0c260cb --- /dev/null +++ b/docs/css/umn/css_04_0022.html @@ -0,0 +1,19 @@ + + +

      Cerebro

      +

      Cerebro is an open-source Elasticsearch web visualized management tool built using Scala, Play Framework, AngularJS, and Bootstrap. Cerebro allows you to manage clusters on a visualized page, such as executing REST requests, modifying Elasticsearch configurations, monitoring real-time disks, cluster load, and memory usage.

      +

      Accessing Cerebro with a Few Clicks

      CSS is integrated with Cerebro. You can access Cerebro with a few clicks, without installing Cerebro.

      +

      Log in to the CSS management console. In the left navigation pane, click Clusters. On the displayed Clusters page, locate the row containing the target cluster and choose More > Access Cerebro in the Operation column.

      +

      On the displayed page, enter one private access address of the cluster.

      +
      • If the cluster does not have the security mode enabled, enter http://IP address:9200.
      • If the cluster has the security mode enabled, enter https://IP address:9200 and then enter the username and password to log in.
      +
      +

      Cerebro Functions

      CSS is fully compatible with the open-source Cerebro and the latest version Cerebro 0.8.4 is supported. Cerebro delivers the following functions:

      +
      • Elasticsearch visualized and real-time load monitoring
      • Elasticsearch visualized data management
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/css_04_0023.html b/docs/css/umn/css_04_0023.html new file mode 100644 index 000000000..b3e3fc55c --- /dev/null +++ b/docs/css/umn/css_04_0023.html @@ -0,0 +1,163 @@ + + +

      Multi-AZ HA

      +

      To prevent data loss and minimize the cluster downtime in case of service interruption, select two or three AZs in the same region when you create a cluster.

      +

      Allocating Nodes

      If you select two or three AZs when creating a cluster, CSS automatically enables the cross-AZ HA function and properly allocates nodes to different AZs.

      +

      The following table lists the way nodes are allocated.

      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      Nodes

      +

      One AZ

      +

      Two AZs

      +

      Three AZs

      +

      AZ1

      +

      AZ1

      +

      AZ2

      +

      AZ1

      +

      AZ2

      +

      AZ3

      +

      1

      +

      1

      +

      Not supported

      +

      Not supported

      +

      2

      +

      2

      +

      1

      +

      1

      +

      Not supported

      +

      3

      +

      3

      +

      2

      +

      1

      +

      1

      +

      1

      +

      1

      +

      4

      +

      4

      +

      2

      +

      2

      +

      2

      +

      1

      +

      1

      +

      ...

      +

      ...

      +

      ...

      +

      ...

      +

      ...

      +

      ...

      +

      ...

      +
      +
      +
      • CSS does not require that the number of nodes be a multiple of the number of AZs.
      • When you create a cluster, ensure that the number of nodes you configure is no less than the number of AZs.
      • The node quantity gap between any two AZs is no more than one.
      +
      +
      +

      Configuring Replicas

      HA can be ensured when you properly configure the number of replicas.

      +
      • In a two-AZ deployment mode, when one AZ is unavailable, the other AZ is required to provide services. Therefore, at least one replica is required. The default number of Elasticsearch replicas is one. In this case, you can retain the default value if you do not have high requirements on read performance.
      • In a three-AZ deployment mode, when one AZ is unavailable, the other AZs are required to provide services. Therefore, at least one replica is required. To improve the cluster query capability, you can set more replicas. In this case, you need to modify the replica configurations to change the number of replicas because the default number of Elasticsearch replicas is one.

        You can run the following command to modify the number of index replicas:

        +

        curl -XPUT http://ip:9200/{index_name}/_settings -d '{"number_of_replicas":2}'

        +

        Alternatively, specify the number of replicas in the template:

        +

        curl -XPUT http://ip:9200/ _template/templatename -d '{ "template": "*", "settings": {"number_of_replicas": 2}}'

        +
      +
      • ip: private network address
      • number_of_replicas: number of replicas after modification. The value in the preceding command indicates that two replicas are required.
      +
      +
      +

      Selecting Master Nodes

      If you select the master node function when you create a cluster, master nodes will be allocated in different AZs when you select multiple AZs.

      +
      +

      Service Interruption

      Table 1 shows the service fault analysis if you select two or three AZs when you create a cluster and one AZ is faulty.

      + +
      + + + + + + + + + + + + + + + + + + + + + +
      Table 1 Service fault analysis when an AZ is faulty

      AZs

      +

      Master Nodes

      +

      Service Interruption Analysis

      +

      2

      +

      0

      +
      • When the number of nodes is a multiple of 2,
        • If half of data nodes are faulty, replace one node in the faulty AZ before you select the master node.
        +
      • When the number of nodes is an odd number,
        • If the faulty AZ contains one more node than the normal AZ, you need to replace one node in the faulty AZ before you select the master node. For details about how to replace nodes, contact technical support.
        • If the faulty AZ contains one less node than the normal AZ, services will not be interrupted and you can select the master node.
        +
      +

      2

      +

      3

      +

      There is a 50% possibility for service interruption. When two dedicated master nodes are allocated to one AZ and another master node is allocated to the other AZ,

      +
      • If service interruption happens in the AZs with one master node, you can select master nodes from the AZs that have two dedicated master nodes.
      • If service interruption happens in the AZs with two dedicated master nodes, you cannot select two master nodes from the remaining AZ because it has only one dedicated master node. In this case, services will be interrupted and you need to contact technical support.
      +

      3

      +

      0

      +

      If you configure four nodes in three AZs, each AZ is allocated with two, one, and one node respectively. Services will be interrupted if the AZ with two nodes is faulty. You are advised not to configure four nodes when selecting three AZs.

      +

      3

      +

      3

      +

      Service interruption does not occur.

      +
      +
      +
      +
      +
      + +
      + diff --git a/docs/css/umn/en-us_image_0000001286116602.png b/docs/css/umn/en-us_image_0000001286116602.png new file mode 100644 index 000000000..55371cd3c Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116602.png differ diff --git a/docs/css/umn/en-us_image_0000001286116622.png b/docs/css/umn/en-us_image_0000001286116622.png new file mode 100644 index 000000000..350e84c75 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116622.png differ diff --git a/docs/css/umn/en-us_image_0000001286116714.png b/docs/css/umn/en-us_image_0000001286116714.png new file mode 100644 index 000000000..9fb55b6d6 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116714.png differ diff --git a/docs/css/umn/en-us_image_0000001286116718.png b/docs/css/umn/en-us_image_0000001286116718.png new file mode 100644 index 000000000..323794597 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116718.png differ diff --git a/docs/css/umn/en-us_image_0000001286116726.png b/docs/css/umn/en-us_image_0000001286116726.png new file mode 100644 index 000000000..e48d2711f Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116726.png differ diff --git a/docs/css/umn/en-us_image_0000001286116734.png b/docs/css/umn/en-us_image_0000001286116734.png new file mode 100644 index 000000000..56df58a59 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116734.png differ diff --git a/docs/css/umn/en-us_image_0000001286116742.png b/docs/css/umn/en-us_image_0000001286116742.png new file mode 100644 index 000000000..7141809ae Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116742.png differ diff --git a/docs/css/umn/en-us_image_0000001286116770.png b/docs/css/umn/en-us_image_0000001286116770.png new file mode 100644 index 000000000..d6ef76682 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116770.png differ diff --git a/docs/css/umn/en-us_image_0000001286116778.png b/docs/css/umn/en-us_image_0000001286116778.png new file mode 100644 index 000000000..9fb55b6d6 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116778.png differ diff --git a/docs/css/umn/en-us_image_0000001286116794.png b/docs/css/umn/en-us_image_0000001286116794.png new file mode 100644 index 000000000..60f73cc05 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286116794.png differ diff --git a/docs/css/umn/en-us_image_0000001286276514.png b/docs/css/umn/en-us_image_0000001286276514.png new file mode 100644 index 000000000..f0381f98c Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276514.png differ diff --git a/docs/css/umn/en-us_image_0000001286276518.png b/docs/css/umn/en-us_image_0000001286276518.png new file mode 100644 index 000000000..0feaa972c Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276518.png differ diff --git a/docs/css/umn/en-us_image_0000001286276642.png b/docs/css/umn/en-us_image_0000001286276642.png new file mode 100644 index 000000000..2ebdb21e3 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276642.png differ diff --git a/docs/css/umn/en-us_image_0000001286276646.png b/docs/css/umn/en-us_image_0000001286276646.png new file mode 100644 index 000000000..1c730028d Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276646.png differ diff --git a/docs/css/umn/en-us_image_0000001286276686.png b/docs/css/umn/en-us_image_0000001286276686.png new file mode 100644 index 000000000..793421eb0 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276686.png differ diff --git a/docs/css/umn/en-us_image_0000001286276694.png b/docs/css/umn/en-us_image_0000001286276694.png new file mode 100644 index 000000000..783ba8fd7 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276694.png differ diff --git a/docs/css/umn/en-us_image_0000001286276702.png b/docs/css/umn/en-us_image_0000001286276702.png new file mode 100644 index 000000000..d403ee50c Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276702.png differ diff --git a/docs/css/umn/en-us_image_0000001286276706.png b/docs/css/umn/en-us_image_0000001286276706.png new file mode 100644 index 000000000..f55e57b8e Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276706.png differ diff --git a/docs/css/umn/en-us_image_0000001286276722.png b/docs/css/umn/en-us_image_0000001286276722.png new file mode 100644 index 000000000..b700e5c2f Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286276722.png differ diff --git a/docs/css/umn/en-us_image_0000001286436598.png b/docs/css/umn/en-us_image_0000001286436598.png new file mode 100644 index 000000000..8e8b091f3 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286436598.png differ diff --git a/docs/css/umn/en-us_image_0000001286436602.png b/docs/css/umn/en-us_image_0000001286436602.png new file mode 100644 index 000000000..56df58a59 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286436602.png differ diff --git a/docs/css/umn/en-us_image_0000001286436610.png b/docs/css/umn/en-us_image_0000001286436610.png new file mode 100644 index 000000000..8f892b0b9 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286436610.png differ diff --git a/docs/css/umn/en-us_image_0000001286436618.png b/docs/css/umn/en-us_image_0000001286436618.png new file mode 100644 index 000000000..c9a03a3ca Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286436618.png differ diff --git a/docs/css/umn/en-us_image_0000001286436626.png b/docs/css/umn/en-us_image_0000001286436626.png new file mode 100644 index 000000000..c4fb68d0e Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286436626.png differ diff --git a/docs/css/umn/en-us_image_0000001286436658.png b/docs/css/umn/en-us_image_0000001286436658.png new file mode 100644 index 000000000..3e4278ae2 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286436658.png differ diff --git a/docs/css/umn/en-us_image_0000001286596218.png b/docs/css/umn/en-us_image_0000001286596218.png new file mode 100644 index 000000000..323794597 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286596218.png differ diff --git a/docs/css/umn/en-us_image_0000001286596238.png b/docs/css/umn/en-us_image_0000001286596238.png new file mode 100644 index 000000000..faaeb459d Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286596238.png differ diff --git a/docs/css/umn/en-us_image_0000001286596262.png b/docs/css/umn/en-us_image_0000001286596262.png new file mode 100644 index 000000000..fb1e28ace Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286596262.png differ diff --git a/docs/css/umn/en-us_image_0000001286596270.png b/docs/css/umn/en-us_image_0000001286596270.png new file mode 100644 index 000000000..ba02d9904 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286596270.png differ diff --git a/docs/css/umn/en-us_image_0000001286596282.png b/docs/css/umn/en-us_image_0000001286596282.png new file mode 100644 index 000000000..56df58a59 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286596282.png differ diff --git a/docs/css/umn/en-us_image_0000001286596290.png b/docs/css/umn/en-us_image_0000001286596290.png new file mode 100644 index 000000000..41ff6764c Binary files /dev/null and b/docs/css/umn/en-us_image_0000001286596290.png differ diff --git a/docs/css/umn/en-us_image_0000001287293658.png b/docs/css/umn/en-us_image_0000001287293658.png new file mode 100644 index 000000000..4ae3ec10d Binary files /dev/null and b/docs/css/umn/en-us_image_0000001287293658.png differ diff --git a/docs/css/umn/en-us_image_0000001338716501.png b/docs/css/umn/en-us_image_0000001338716501.png new file mode 100644 index 000000000..c40e73704 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716501.png differ diff --git a/docs/css/umn/en-us_image_0000001338716505.png b/docs/css/umn/en-us_image_0000001338716505.png new file mode 100644 index 000000000..62048891f Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716505.png differ diff --git a/docs/css/umn/en-us_image_0000001338716545.png b/docs/css/umn/en-us_image_0000001338716545.png new file mode 100644 index 000000000..1fca0e77b Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716545.png differ diff --git a/docs/css/umn/en-us_image_0000001338716621.png b/docs/css/umn/en-us_image_0000001338716621.png new file mode 100644 index 000000000..8ea4540f8 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716621.png differ diff --git a/docs/css/umn/en-us_image_0000001338716641.png b/docs/css/umn/en-us_image_0000001338716641.png new file mode 100644 index 000000000..cab91422f Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716641.png differ diff --git a/docs/css/umn/en-us_image_0000001338716669.png b/docs/css/umn/en-us_image_0000001338716669.png new file mode 100644 index 000000000..1b27c130f Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716669.png differ diff --git a/docs/css/umn/en-us_image_0000001338716673.png b/docs/css/umn/en-us_image_0000001338716673.png new file mode 100644 index 000000000..a327fdc33 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716673.png differ diff --git a/docs/css/umn/en-us_image_0000001338716677.png b/docs/css/umn/en-us_image_0000001338716677.png new file mode 100644 index 000000000..9fb55b6d6 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716677.png differ diff --git a/docs/css/umn/en-us_image_0000001338716685.png b/docs/css/umn/en-us_image_0000001338716685.png new file mode 100644 index 000000000..323794597 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716685.png differ diff --git a/docs/css/umn/en-us_image_0000001338716693.png b/docs/css/umn/en-us_image_0000001338716693.png new file mode 100644 index 000000000..c9a03a3ca Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338716693.png differ diff --git a/docs/css/umn/en-us_image_0000001338836353.png b/docs/css/umn/en-us_image_0000001338836353.png new file mode 100644 index 000000000..79776095c Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338836353.png differ diff --git a/docs/css/umn/en-us_image_0000001338836473.png b/docs/css/umn/en-us_image_0000001338836473.png new file mode 100644 index 000000000..323794597 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338836473.png differ diff --git a/docs/css/umn/en-us_image_0000001338836489.png b/docs/css/umn/en-us_image_0000001338836489.png new file mode 100644 index 000000000..323794597 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338836489.png differ diff --git a/docs/css/umn/en-us_image_0000001338836509.png b/docs/css/umn/en-us_image_0000001338836509.png new file mode 100644 index 000000000..9fb55b6d6 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338836509.png differ diff --git a/docs/css/umn/en-us_image_0000001338836517.png b/docs/css/umn/en-us_image_0000001338836517.png new file mode 100644 index 000000000..1075b5afc Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338836517.png differ diff --git a/docs/css/umn/en-us_image_0000001338836521.png b/docs/css/umn/en-us_image_0000001338836521.png new file mode 100644 index 000000000..daa0df30a Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338836521.png differ diff --git a/docs/css/umn/en-us_image_0000001338836529.png b/docs/css/umn/en-us_image_0000001338836529.png new file mode 100644 index 000000000..323794597 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338836529.png differ diff --git a/docs/css/umn/en-us_image_0000001338955921.png b/docs/css/umn/en-us_image_0000001338955921.png new file mode 100644 index 000000000..56bd75756 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338955921.png differ diff --git a/docs/css/umn/en-us_image_0000001338955933.png b/docs/css/umn/en-us_image_0000001338955933.png new file mode 100644 index 000000000..aa77ecc9e Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338955933.png differ diff --git a/docs/css/umn/en-us_image_0000001338955973.png b/docs/css/umn/en-us_image_0000001338955973.png new file mode 100644 index 000000000..2265cd02b Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338955973.png differ diff --git a/docs/css/umn/en-us_image_0000001338955977.png b/docs/css/umn/en-us_image_0000001338955977.png new file mode 100644 index 000000000..783ba8fd7 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338955977.png differ diff --git a/docs/css/umn/en-us_image_0000001338955981.png b/docs/css/umn/en-us_image_0000001338955981.png new file mode 100644 index 000000000..ba02d9904 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338955981.png differ diff --git a/docs/css/umn/en-us_image_0000001338955989.png b/docs/css/umn/en-us_image_0000001338955989.png new file mode 100644 index 000000000..56df58a59 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338955989.png differ diff --git a/docs/css/umn/en-us_image_0000001338955993.png b/docs/css/umn/en-us_image_0000001338955993.png new file mode 100644 index 000000000..323794597 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338955993.png differ diff --git a/docs/css/umn/en-us_image_0000001338956001.png b/docs/css/umn/en-us_image_0000001338956001.png new file mode 100644 index 000000000..ad99f79dd Binary files /dev/null and b/docs/css/umn/en-us_image_0000001338956001.png differ diff --git a/docs/css/umn/en-us_image_0000001339036237.png b/docs/css/umn/en-us_image_0000001339036237.png new file mode 100644 index 000000000..e64b9c8fd Binary files /dev/null and b/docs/css/umn/en-us_image_0000001339036237.png differ diff --git a/docs/css/umn/en-us_image_0000001339036357.png b/docs/css/umn/en-us_image_0000001339036357.png new file mode 100644 index 000000000..e21863107 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001339036357.png differ diff --git a/docs/css/umn/en-us_image_0000001339036413.png b/docs/css/umn/en-us_image_0000001339036413.png new file mode 100644 index 000000000..d66874ca4 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001339036413.png differ diff --git a/docs/css/umn/en-us_image_0000001339036421.png b/docs/css/umn/en-us_image_0000001339036421.png new file mode 100644 index 000000000..865d633a3 Binary files /dev/null and b/docs/css/umn/en-us_image_0000001339036421.png differ diff --git a/docs/css/umn/public_sys-resources/ExpandCollapse.js b/docs/css/umn/public_sys-resources/ExpandCollapse.js new file mode 100644 index 000000000..3f1b7db00 --- /dev/null +++ b/docs/css/umn/public_sys-resources/ExpandCollapse.js @@ -0,0 +1 @@ +var expandClassName="dropdownexpand";var collapseClassName="dropdowncollapse";var collapseTableClassName="dropdowncollapsetable";var href="";function ExpandorCollapseNode(a){a=a.parentNode;if(a.className==expandClassName){a.className=collapseClassName}else{a.className=expandClassName}}function ExpandorCollapseTableNode(a){a=a.parentNode;if(a.className==expandClassName){a.className=collapseTableClassName}else{a.className=expandClassName}}function ExpandorCollapseAllNodes(g,h,c){var a=g.getAttribute("title");var b=g.parentNode;if(a=="collapse"){g.setAttribute("title","expand");g.className="dropdownAllButtonexpand";g.innerHTML=h}else{g.setAttribute("title","collapse");g.className="dropdownAllButtoncollapse";g.innerHTML=c}var f=b.getElementsByTagName("*");for(var d=0;d-1){ExpandForHref(href.substring(href.lastIndexOf("#")+1))}}catch(a){}}; \ No newline at end of file diff --git a/docs/css/umn/public_sys-resources/caution_3.0-en-us.png b/docs/css/umn/public_sys-resources/caution_3.0-en-us.png new file mode 100644 index 000000000..60f607621 Binary files /dev/null and b/docs/css/umn/public_sys-resources/caution_3.0-en-us.png differ diff --git a/docs/css/umn/public_sys-resources/commonltr.css b/docs/css/umn/public_sys-resources/commonltr.css new file mode 100644 index 000000000..c5480b0ab --- /dev/null +++ b/docs/css/umn/public_sys-resources/commonltr.css @@ -0,0 +1 @@ +body{font-size:10pt;font-family:Arial;margin:1.5em;border-top:2pt;padding-top:1em;padding-bottom:2em}.msgph{font-family:Courier New}.rowlinecopyright{color:red;margin-top:10pt}.unresolved{background-color:skyblue}.noTemplate{background-color:yellow}.base{background-color:#fff}.nested0{margin-top:1em}.p{margin-top:.6em;margin-bottom:.6em}p{margin-top:.5em;margin-bottom:.5em}.note p{margin-top:.5em;margin-bottom:.5em}.tip p{margin-top:.5em;margin-bottom:.5em}.danger p{margin-top:.5em;margin-bottom:.5em}.notice p{margin-top:.5em;margin-bottom:.5em}.warning p{margin-top:.5em;margin-bottom:.5em}.caution p{margin-top:.5em;margin-bottom:.5em}.attention p{margin-top:.5em;margin-bottom:.5em}table p{margin-top:.2em;margin-bottom:.2em}table .p{margin-top:.4em;margin-bottom:.2em}.figcap{font-size:10pt}img{margin-top:.3em}.figdesc{font-style:normal}.figborder{border-style:solid;padding-left:3px;border-width:2px;padding-right:3px;margin-top:1em;border-color:Silver}.figsides{border-left:2px solid;padding-left:3px;border-right:2px solid;padding-right:3px;margin-top:1em;border-color:Silver}.figtop{border-top:2px solid;margin-top:1em;border-color:Silver}.figbottom{border-bottom:2px solid;border-color:Silver}.figtopbot{border-top:2px solid;border-bottom:2px solid;margin-top:1em;border-color:Silver}.fignone{font-size:10pt;margin-top:8pt;margin-bottom:8pt}.familylinks{margin-top:1.5em;margin-bottom:1em}.ullinks{list-style-type:none}.linklist{margin-bottom:1em}.linklistwithchild{margin-left:1.5em;margin-bottom:1em}.sublinklist{margin-left:1.5em;margin-bottom:1em}.relconcepts{margin-top:.6em;margin-bottom:.6em}.reltasks{margin-top:.6em;margin-bottom:.6em}.relref{margin-top:.6em;margin-bottom:.6em}.relinfo{margin-top:.6em;margin-bottom:.6em}.breadcrumb{font-size:smaller;margin-bottom:.6em}.prereq{margin-left:20px}.parentlink{margin-top:.6em;margin-bottom:.6em}.nextlink{margin-top:.6em;margin-bottom:.6em}.previouslink{margin-top:.6em;margin-bottom:.6em}.topictitle1{margin-top:0;margin-bottom:1em;font-size:14pt;color:#007af4}.topictitle2{margin-top:1pc;margin-bottom:.45em;font-size:1.17em;color:#007af4}.topictitle3{margin-top:1pc;margin-bottom:.17em;font-size:1.17em;font-weight:bold;color:#007af4}.topictitle4{margin-top:.83em;font-size:1.17em;font-weight:bold}.topictitle5{font-size:1.17em;font-weight:bold}.topictitle6{font-size:1.17em;font-style:italic}.sectiontitle{margin-top:1em;margin-bottom:1em;color:black;font-size:10.5pt;font-weight:bold;color:#007af4;overflow:auto}.section{margin-top:1em;margin-bottom:1em}.example{margin-top:1em;margin-bottom:1em}.sectiontitle2contents:link{color:#007af4}.sectiontitle2contents:visited{color:#800080}.note{margin-top:1em;margin-bottom:1em;background-color:#ffc}.notetitle{font-weight:bold}.notelisttitle{font-weight:bold}.tip{margin-top:1em;margin-bottom:1em;background-color:#ffc}.tiptitle{font-weight:bold}.fastpath{margin-top:1em;margin-bottom:1em;background-color:#ffc}.fastpathtitle{font-weight:bold}.important{margin-top:1em;margin-bottom:1em;background-color:#ffc}.importanttitle{font-weight:bold}.remember{margin-top:1em;margin-bottom:1em;background-color:#ffc}.remembertitle{font-weight:bold}.restriction{margin-top:1em;margin-bottom:1em;background-color:#ffc}.restrictiontitle{font-weight:bold}.attention{margin-top:1em;margin-bottom:1em;background-color:#ffc}.attentiontitle{font-weight:bold}.dangertitle{font-weight:bold}.danger{margin-top:1em;margin-bottom:1em;background-color:#ffc}.noticetitle{font-weight:bold}.notice{margin-top:1em;margin-bottom:1em;background-color:#ffc}.warningtitle{font-weight:bold}.warning{margin-top:1em;margin-bottom:1em;background-color:#ffc}.cautiontitle{font-weight:bold}.caution{margin-top:1em;margin-bottom:1em;background-color:#ffc}ul.simple{list-style-type:none}li ul{margin-top:.6em}li{margin-top:.6em;margin-bottom:.6em}.note li{margin-top:.2em;margin-bottom:.2em}.tip li{margin-top:.2em;margin-bottom:.2em}.danger li{margin-top:.2em;margin-bottom:.2em}.warning li{margin-top:.2em;margin-bottom:.2em}.notice li{margin-top:.2em;margin-bottom:.2em}.caution li{margin-top:.2em;margin-bottom:.2em}.attention li{margin-top:.2em;margin-bottom:.2em}table li{margin-top:.2em;margin-bottom:.2em}ol{margin-top:1em;margin-bottom:1em;margin-left:2.4em;padding-left:0}ul{margin-top:1em;margin-bottom:1em;margin-left:2.0em;padding-left:0}ol ul{list-style:disc}ul ul{list-style:square}ol ul ul{list-style:square}ol ul{list-style-type:disc}table ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}table ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ul{margin-top:.4em;margin-bottom:.4em;list-style:square}table ol ol{margin-top:.4em;margin-bottom:.4em;list-style:lower-alpha}table ol ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}.substepthirdol{list-style-type:lower-roman}.firstcol{font-weight:bold}th{background-color:#cfcfcf}table{margin-top:8pt;margin-bottom:12pt;width:100%}table caption{margin-top:8pt;text-align:left}.bold{font-weight:bold}.boldItalic{font-weight:bold;font-style:italic}.italic{font-style:italic}.underlined{text-decoration:underline}.var{font-style:italic}.shortcut{text-decoration:underline}.dlterm{font-weight:bold}dd{margin-top:.5em;margin-bottom:.5em}.dltermexpand{font-weight:bold;margin-top:1em}*[compact="yes"]>li{margin-top:0}*[compact="no"]>li{margin-top:.53em}.liexpand{margin-top:1em;margin-bottom:1em}.sliexpand{margin-top:1em;margin-bottom:1em}.dlexpand{margin-top:1em;margin-bottom:1em}.ddexpand{margin-top:1em;margin-bottom:1em}.stepexpand{margin-top:.3em;margin-bottom:.3em}.substepexpand{margin-top:.3em;margin-bottom:.3em}div.imageleft{text-align:left}div.imagecenter{text-align:center}div.imageright{text-align:right}div.imagejustify{text-align:justify}div.noblankline{text-align:center}div.noblankline img{margin-top:0}pre.screen{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;background-color:#ddd;white-space:pre}pre.codeblock{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;background-color:#ddd;white-space:pre}.hrcopyright{color:#3f4e5d;margin-top:18pt}.hwcopyright{text-align:center}.comment{margin:2px 2px 2px 2px;font-family:Arial;font-size:10pt;background-color:#bfb;color:#000}.dropdownAllButtonexpand{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdownAllButtoncollapse{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;text-decoration:underline;color:#007af4}.dropdowntitle{background-repeat:no-repeat;background-position:0 4px;padding-left:15px;cursor:pointer;text-decoration:underline;color:#007af4}.dropdownexpand .dropdowntitle{background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapse .dropdowncontext{display:none}.dropdowncollapse .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdowncollapsetable{border:0}.dropdowncollapsetable .dropdowncontext{display:none}.dropdowncollapsetable .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}pre{font-size:10pt;font-weight:normal;margin-left:9;margin-top:2;margin-bottom:2}.termcolor{color:blue;cursor:pointer}#dhtmlgoodies_tooltip{background-color:#f0f0d2;border:1px solid #000;position:absolute;display:none;z-index:20000;padding:2px;font-size:.9em;-moz-border-radius:6px;font-family:"Trebuchet MS","Lucida Sans Unicode",Arial,sans-serif}#dhtmlgoodies_tooltipShadow{position:absolute;background-color:#555;display:none;z-index:10000;opacity:.7;filter:alpha(opacity=70);-khtml-opacity:.7;-moz-opacity:.7;-moz-border-radius:6px}.freeze{position:fixed;_position:absolute;_top:expression(eval(document.documentElement.scrollTop));left:10;top:0} \ No newline at end of file diff --git a/docs/css/umn/public_sys-resources/commonltr_print.css b/docs/css/umn/public_sys-resources/commonltr_print.css new file mode 100644 index 000000000..a59823141 --- /dev/null +++ b/docs/css/umn/public_sys-resources/commonltr_print.css @@ -0,0 +1 @@ +body{font-size:12.0pt;margin:1.5em;margin-left:1.6cm}.msgph{font-family:Courier New}.rowlinecopyright{color:red;margin-top:10pt}.unresolved{background-color:skyblue}.noTemplate{background-color:yellow}.base{background-color:#fff}.nested0{margin-top:1em}.p{margin-top:1em}p{margin-top:.5em;margin-bottom:.5em}.note p{margin-top:.5em;margin-bottom:.5em}.tip p{margin-top:.5em;margin-bottom:.5em}.danger p{margin-top:.5em;margin-bottom:.5em}.warning p{margin-top:.5em;margin-bottom:.5em}.notice p{margin-top:.5em;margin-bottom:.5em}.caution p{margin-top:.5em;margin-bottom:.5em}.attention p{margin-top:.5em;margin-bottom:.5em}table p{margin-top:.2em;margin-bottom:.2em}table .p{margin-top:.4em;margin-bottom:.2em}.covertable{border:0;width:100% cellpadding:8pt;cellspacing:8pt}.cover_productname{font-size:15.0pt;font-family:"Arial"}.cover_manualtitle{font-size:24.0pt;font-weight:bold;font-family:"Arial"}.cover_manualsubtitle{font-size:18.0pt;font-weight:bold;font-family:"Arial"}.cover_heading{font-size:12.0pt;font-weight:bold;font-family:"Arial"}.cover_text{font-size:9.0pt;font-family:"Arial"}.tocheading,.heading1,.topictitle1{margin-top:40.0pt;margin-right:0;margin-bottom:20.0pt;margin-left:-1cm;text-align:left;border:0;border-bottom:solid windowtext .5pt;font-size:22.0pt;font-family:"Arial";font-weight:bold}.topictitlenumber1{font-size:72.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle2{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:-1cm;text-indent:0;font-size:18.0pt;font-family:"Arial";font-weight:bold}.topictitle3{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:16.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle4{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:14.0pt;font-family:"Book Antiqua";font-weight:bold}.topictitle5{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.blocklabel,.topictitle6{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.sectiontitle{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:-1cm;text-indent:0;font-size:13.0pt;font-family:"Arial";font-weight:bold}.tocentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:12.0pt;font-family:"Book Antiqua";font-weight:bold}.tocentry2{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry3{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry4{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tocentry5{margin-top:4.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman"}.tofentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman";font-weight:normal}.totentry1{margin-top:8.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;line-height:12.0pt;font-size:11.0pt;font-family:"Times New Roman";font-weight:normal}.indexheading{margin-top:15.0pt;margin-right:0;margin-bottom:4.0pt;margin-left:0;text-indent:0;font-size:13.0pt;font-family:"Book Antiqua";font-weight:bold}.indexentry1{margin-top:4pt;margin-right:0;margin-bottom:0;margin-left:0;line-height:12.0pt;font-size:12.0pt;font-family:"Times New Roman"}.indexentry2{margin-top:0;margin-right:0;margin-bottom:0;margin-left:24.0pt;line-height:12.0pt;font-size:12.0pt}.indexentry3{margin-top:0;margin-right:0;margin-bottom:0;margin-left:48pt;line-height:12.0pt;font-size:12.0pt}.figurenumber{font-weight:bold}.tablenumber{font-weight:bold}.familylinks{margin-top:1.5em;margin-bottom:1em}.figcap{font-size:11.0pt}.tablecap{font-size:11.0pt}.figdesc{font-style:normal}.fignone{margin-top:8.0pt}.figborder{border-style:solid;padding-left:3px;border-width:2px;padding-right:3px;margin-top:1em;border-color:Silver}.figsides{border-left:2px solid;padding-left:3px;border-right:2px solid;padding-right:3px;margin-top:1em;border-color:Silver}.figtop{border-top:2px solid;margin-top:1em;border-color:Silver}.figbottom{border-bottom:2px solid;border-color:Silver}.figtopbot{border-top:2px solid;border-bottom:2px solid;margin-top:1em;border-color:Silver}.ullinks{margin-left:0;list-style-type:none}.ulchildlink{margin-top:1em;margin-bottom:1em}.olchildlink{margin-top:1em;margin-bottom:1em;margin-left:1em}.linklist{margin-bottom:1em}.linklistwithchild{margin-left:1.5em;margin-bottom:1em}.sublinklist{margin-left:1.5em;margin-bottom:1em}.relconcepts{margin-left:1cm;margin-top:1em;margin-bottom:1em}.reltasks{margin-left:1cm;margin-top:1em;margin-bottom:1em}.relref{margin-left:1cm;margin-top:1em;margin-bottom:1em}.relinfo{margin-top:1em;margin-bottom:1em}.breadcrumb{font-size:smaller;margin-bottom:1em}.prereq{margin-left:0}.parentlink{margin-top:.6em;margin-bottom:.6em}.nextlink{margin-top:.6em;margin-bottom:.6em}.previouslink{margin-top:.6em;margin-bottom:.6em}.section{margin-top:1em;margin-bottom:1em}.example{margin-top:1em;margin-bottom:1em}table .note{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.note{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.notetitle{font-weight:bold;font-size:11.0pt}.notelisttitle{font-weight:bold}table .tip{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.tip{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.tiptitle{font-weight:bold;font-size:11.0pt}table .fastpath{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.fastpath{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.fastpathtitle{font-weight:bold;font-size:11.0pt}table .important{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.important{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.importanttitle{font-weight:bold;font-size:11.0pt}table .remember{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.remember{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.remembertitle{font-weight:bold;font-size:11.0pt}table .restriction{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman";font-style:italic}.restriction{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;border-top:solid .5pt;border-bottom:solid .5pt}.restrictiontitle{font-weight:bold;font-size:11.0pt}table .attention{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.attention{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}.attentiontitle{font-weight:bold}table .danger{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.dangertitle{font-weight:bold}.danger{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .notice{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.noticetitle{font-weight:bold}.notice{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .warning{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}.warningtitle{font-weight:bold}.warning{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}table .caution{margin-top:1em;margin-bottom:1em;border:0;font-size:10.0pt;font-family:"Times New Roman"}table caption{margin-top:8pt;text-align:left;font-weight:bold}.tablenoborder{margin-top:8pt}.cautiontitle{font-weight:bold}.caution{margin-top:1em;margin-bottom:1em;border:0;border-top:solid .5pt;border-bottom:solid .5pt}ul.simple{list-style-type:none}li ul{margin-top:.6em}li{margin-top:.6em;margin-bottom:.6em}.note li{margin-top:.2em;margin-bottom:.2em}.tip li{margin-top:.2em;margin-bottom:.2em}.danger li{margin-top:.2em;margin-bottom:.2em}.warning li{margin-top:.2em;margin-bottom:.2em}.notice li{margin-top:.2em;margin-bottom:.2em}.caution li{margin-top:.2em;margin-bottom:.2em}.attention li{margin-top:.2em;margin-bottom:.2em}table li{margin-top:.2em;margin-bottom:.2em}.firstcol{font-weight:bold}th{background-color:#cfcfcf}.bold{font-weight:bold}.boldItalic{font-weight:bold;font-style:italic}.italic{font-style:italic}.underlined{text-decoration:underline}.var{font-style:italic}.shortcut{text-decoration:underline}.dlterm{font-weight:bold}dd{margin-top:.5em;margin-bottom:.5em}.dltermexpand{font-weight:bold;margin-top:1em}*[compact="yes"]>li{margin-top:0}*[compact="no"]>li{margin-top:.53em}.liexpand{margin-top:1em;margin-bottom:1em}.sliexpand{margin-top:1em;margin-bottom:1em}.dlexpand{margin-top:1em;margin-bottom:1em}.ddexpand{margin-top:1em;margin-bottom:1em}.stepexpand{margin-top:1em;margin-bottom:1em}.substepexpand{margin-top:1em;margin-bottom:1em}table{margin-top:8pt;margin-bottom:10.0pt;width:100%}thead{font-size:10.0pt;font-family:"Book Antiqua";font-weight:bold}tbody{font-size:11.0pt}ol{margin-top:1em;margin-bottom:1em;margin-left:1.7em;-webkit-padding-start:0}ul{margin-top:1em;margin-bottom:1em;margin-left:1.2em;-webkit-padding-start:0}ol ul{list-style:disc}ul ul{list-style:square}ol ol{list-style-type:lower-alpha}table ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}table ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ul{margin-top:.4em;margin-bottom:.4em;list-style:square}table ol ol{margin-top:.4em;margin-bottom:.4em;list-style:lower-alpha}table ol ul{margin-top:.4em;margin-bottom:.4em;list-style:disc}table ul ol{margin-top:.4em;margin-bottom:.4em;list-style:decimal}.substepthirdol{list-style-type:lower-roman}div.imageleft{text-align:left}div.imagecenter{text-align:center}div.imageright{text-align:right}div.imagejustify{text-align:justify}div.noblankline{text-align:center}div.noblankline img{margin-top:0}pre{font-size:10.0pt;border-width:2px;padding:2px;margin-top:5px;margin-bottom:5px;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}pre.screen{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;white-space:pre}pre.codeblock{margin-top:2px;margin-bottom:2px;padding:1.5px 1.5px 0 1.5px;border:0;white-space:pre}.dropdownAllButtonexpand{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4}.dropdownAllButtoncollapse{cursor:pointer;background-repeat:no-repeat;background-position:0 4px;padding-left:15px;background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;text-decoration:underline;color:#007af4}.dropdowntitle{background-repeat:no-repeat;background-position:0 4px;padding-left:15px;cursor:pointer;text-decoration:underline;color:#007af4}.dropdownexpand .dropdowntitle{background-image:url(icon-arrowdn.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapse .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.dropdowncollapsetable .dropdowntitle{background-image:url(icon-arrowrt.gif);text-decoration:underline;color:#007af4;margin:0 0 8px 0}.prefacesectiontitle1{margin-top:10.0pt;margin-right:0;margin-bottom:8.0pt;margin-left:-1cm;text-indent:0;font-size:18.0pt;font-family:"Book Antiqua";font-weight:bold;overflow:auto}.termcolor{color:blue;cursor:pointer}#dhtmlgoodies_tooltip{background-color:#f0f0d2;border:1px solid #000;position:absolute;display:none;z-index:20000;padding:2px;font-size:.9em;-moz-border-radius:6px;font-family:"Trebuchet MS","Lucida Sans Unicode",Arial,sans-serif}#dhtmlgoodies_tooltipShadow{position:absolute;background-color:#555;display:none;z-index:10000;opacity:.7;filter:alpha(opacity=70);-khtml-opacity:.7;-moz-opacity:.7;-moz-border-radius:6px}.freeze{position:fixed;_position:absolute;_top:expression(eval(document.documentElement.scrollTop));left:10;top:0}.hrcopyright{color:#3f4e5d;margin-top:18pt;margin-left:-1cm}.hwcopyright{text-align:center;font-family:Arial;margin-left:-1cm} \ No newline at end of file diff --git a/docs/css/umn/public_sys-resources/commonrtl.css b/docs/css/umn/public_sys-resources/commonrtl.css new file mode 100644 index 000000000..f261da752 --- /dev/null +++ b/docs/css/umn/public_sys-resources/commonrtl.css @@ -0,0 +1,2 @@ +/*! Copyright (c) Huawei Technologies Co., Ltd. 2020-2022. All rights reserved. */.msgph{font-family:Courier New}.unresolved{background-color:#87ceeb}.noTemplate{background-color:#ff0}.base{background-color:#fff}/*! Add space for top level topics */.nested0,.p{margin-top:1em}/*! div with class=p is used for paragraphs that contain blocks, to keep the XHTML valid *//*! Default of italics to set apart figure captions */.figcap,.italic,.var{font-style:italic}.figdesc{font-style:normal}/*! Use @frame to create frames on figures */.figborder{padding-left:3px;padding-right:3px;margin-top:1em;border:2px solid Silver}.figsides{margin-top:1em;padding-left:3px;padding-right:3px;border-left:2px solid Silver;border-right:2px solid Silver}.figtop{border-top:2px solid Silver;margin-top:1em}.figbottom{border-bottom:2px solid Silver}.figtopbot{border-top:2px solid Silver;border-bottom:2px solid Silver;margin-top:1em}/*! Most link groups are created with
      . Ensure they have space before and after. */.ullinks,ul.simple{list-style-type:none}.attention,.danger,.ddexpand,.dlexpand,.example,.fastpath,.important,.liexpand,.linklist,.note,.notice,.olchildlink,.relconcepts,.relinfo,.relref,.reltasks,.remember,.restriction,.section,.sliexpand,.stepexpand,.substepexpand,.tip,.ulchildlink,.warning{margin-top:1em;margin-bottom:1em}.linklistwithchild,.sublinklist{margin-top:1em;margin-right:1.5em;margin-bottom:1em}.breadcrumb{font-size:smaller;margin-bottom:1em}.prereq{margin-right:20px}/*! Set heading sizes, getting smaller for deeper nesting */.topictitle1{font-size:1.34em;margin-top:0;margin-bottom:.1em}.topictitle2,.topictitle3,.topictitle4,.topictitle5,.topictitle6,.sectiontitle{font-size:1.17em}.topictitle2{margin-top:1pc;margin-bottom:.45em}.topictitle3{margin-top:1pc;margin-bottom:.17em;font-weight:700}.topictitle4{margin-top:.83em;font-weight:700}.topictitle5{font-weight:700}.topictitle6{font-style:italic}.sectiontitle{margin-top:1em;margin-bottom:0;color:#000;font-weight:700}/*! All note formats have the same default presentation */.attentiontitle,.bold,.cautiontitle,.dangertitle,.dlterm,.fastpathtitle,.firstcol,.importanttitle,.notelisttitle,.notetitle,.noticetitle,.parmname,.remembertitle,.restrictiontitle,.tiptitle,.uicontrol,.warningtitle{font-weight:700}.caution{font-weight:700;margin-bottom:1em}/*! Simple lists do not get a bullet *//*! Used on the first column of a table, when rowheader="firstcol" is used *//*! Various basic phrase styles */.boldItalic{font-weight:700;font-style:italic}.shortcut,.underlined{text-decoration:underline}/*! 2008-10-27 keyword采用跟随上下文的样式 +*//*! Default of bold for definition list terms *//*! Use CSS to expand lists with @compact="no" */.dltermexpand{font-weight:700;margin-top:1em}[compact="yes"]>li{margin-top:0}[compact="no"]>li{margin-top:.53em}/*! Align images based on @align on topic/image */div.imageleft,.text-align-left{text-align:left}div.imagecenter,.text-align-center{text-align:center}div.imageright,.text-align-right{text-align:right}div.imagejustify,.text-align-justify{text-align:justify}.cellrowborder{border-right:0;border-top:0;border-left:1px solid;border-bottom:1px solid}.row-nocellborder{border-left:hidden;border-right:0;border-top:0;border-bottom:1px solid}.cell-norowborder{border-top:0;border-bottom:hidden;border-right:0;border-left:1px solid}.nocellnorowborder{border:0;border-left:hidden;border-bottom:hidden}pre.codeblock,pre.screen{padding:5px;border:outset;background-color:#ccc;margin-top:2px;margin-bottom:2px;white-space:pre} \ No newline at end of file diff --git a/docs/css/umn/public_sys-resources/danger_3.0-en-us.png b/docs/css/umn/public_sys-resources/danger_3.0-en-us.png new file mode 100644 index 000000000..47a9c7235 Binary files /dev/null and b/docs/css/umn/public_sys-resources/danger_3.0-en-us.png differ diff --git a/docs/css/umn/public_sys-resources/delta.gif b/docs/css/umn/public_sys-resources/delta.gif new file mode 100644 index 000000000..0d1b1f674 Binary files /dev/null and b/docs/css/umn/public_sys-resources/delta.gif differ diff --git a/docs/css/umn/public_sys-resources/deltaend.gif b/docs/css/umn/public_sys-resources/deltaend.gif new file mode 100644 index 000000000..cc7da0fc8 Binary files /dev/null and b/docs/css/umn/public_sys-resources/deltaend.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-arrowdn.gif b/docs/css/umn/public_sys-resources/icon-arrowdn.gif new file mode 100644 index 000000000..84eec9be2 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-arrowdn.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-arrowrt.gif b/docs/css/umn/public_sys-resources/icon-arrowrt.gif new file mode 100644 index 000000000..39583d168 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-arrowrt.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-caution.gif b/docs/css/umn/public_sys-resources/icon-caution.gif new file mode 100644 index 000000000..079c79b26 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-caution.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-danger.gif b/docs/css/umn/public_sys-resources/icon-danger.gif new file mode 100644 index 000000000..079c79b26 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-danger.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-huawei.gif b/docs/css/umn/public_sys-resources/icon-huawei.gif new file mode 100644 index 000000000..a31d60f89 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-huawei.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-note.gif b/docs/css/umn/public_sys-resources/icon-note.gif new file mode 100644 index 000000000..31be2b039 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-note.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-notice.gif b/docs/css/umn/public_sys-resources/icon-notice.gif new file mode 100644 index 000000000..409070650 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-notice.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-tip.gif b/docs/css/umn/public_sys-resources/icon-tip.gif new file mode 100644 index 000000000..c47bae05c Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-tip.gif differ diff --git a/docs/css/umn/public_sys-resources/icon-warning.gif b/docs/css/umn/public_sys-resources/icon-warning.gif new file mode 100644 index 000000000..079c79b26 Binary files /dev/null and b/docs/css/umn/public_sys-resources/icon-warning.gif differ diff --git a/docs/css/umn/public_sys-resources/imageResize.js b/docs/css/umn/public_sys-resources/imageResize.js new file mode 100644 index 000000000..37309ce3b --- /dev/null +++ b/docs/css/umn/public_sys-resources/imageResize.js @@ -0,0 +1,18 @@ +/** IDP renames $ to $$$,jQueryHW2 */ +var $$$, jQueryHW2; +jQueryHW2 = $$$ = $; + +function image_size(a) { + $$$(window).on('load', function () { + $$$(a).each(function () { + var e = $$$(this); + var f = e.width(); + var d = e.height(); + var b = f; + var c = d; + e.click(function () { + tb_show("", this.src, false) + }) + }) + }) +}; \ No newline at end of file diff --git a/docs/css/umn/public_sys-resources/imageclose.gif b/docs/css/umn/public_sys-resources/imageclose.gif new file mode 100644 index 000000000..56818c26b Binary files /dev/null and b/docs/css/umn/public_sys-resources/imageclose.gif differ diff --git a/docs/css/umn/public_sys-resources/imageclosehover.gif b/docs/css/umn/public_sys-resources/imageclosehover.gif new file mode 100644 index 000000000..3bcf231f1 Binary files /dev/null and b/docs/css/umn/public_sys-resources/imageclosehover.gif differ diff --git a/docs/css/umn/public_sys-resources/imagemax.gif b/docs/css/umn/public_sys-resources/imagemax.gif new file mode 100644 index 000000000..49fe390b1 Binary files /dev/null and b/docs/css/umn/public_sys-resources/imagemax.gif differ diff --git a/docs/css/umn/public_sys-resources/imagemaxhover.gif b/docs/css/umn/public_sys-resources/imagemaxhover.gif new file mode 100644 index 000000000..387b0a981 Binary files /dev/null and b/docs/css/umn/public_sys-resources/imagemaxhover.gif differ diff --git a/docs/css/umn/public_sys-resources/jquery-migrate-1.2.1.min.js b/docs/css/umn/public_sys-resources/jquery-migrate-1.2.1.min.js new file mode 100644 index 000000000..88f4844bf --- /dev/null +++ b/docs/css/umn/public_sys-resources/jquery-migrate-1.2.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */ +jQueryHW2.migrateMute===void 0&&(jQueryHW2.migrateMute=!0),function(e,t,n){function r(n){}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute,e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQueryHW2 is not compatible with Quirks Mode");var o=e("",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQueryHW2.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQueryHW2.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQueryHW2.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQueryHW2.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQueryHW2.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQueryHW2.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQueryHW2.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQueryHW2.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQueryHW2.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQueryHW2.fn.andSelf() replaced by jQueryHW2.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQueryHW2.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQueryHW2.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQueryHW2.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQueryHW2.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQueryHW2.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQueryHW2.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQueryHW2,window); \ No newline at end of file diff --git a/docs/css/umn/public_sys-resources/jquery-ui.min.js b/docs/css/umn/public_sys-resources/jquery-ui.min.js new file mode 100644 index 000000000..5a2c95bdd --- /dev/null +++ b/docs/css/umn/public_sys-resources/jquery-ui.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.13.0 - 2021-10-07 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.0";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n
      "),i=e.children()[0];return V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0")[0],w=d.each;function P(t){return null==t?t+"":"object"==typeof t?p[e.call(t)]||"object":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText="background-color:rgba(1,1,1,.5)",b.rgba=-1o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=d.map(this._rgba,function(t,e){return null!=t?t:2
      ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.0",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,e="vertical"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(j+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0
      ");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(o,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,r="show"===o,l=t.direction||"up",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p="up"===l||"down"===l?"top":"left",f="up"===l||"left"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n["top"==p?"outerHeight":"outerWidth"]()/3,r&&((s={opacity:1})[p]=l,n.css("opacity",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g
      ").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,o="hide"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V(""),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(i=i.children(".ui-accordion-header-icon"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(n=s.children(".ui-accordion-header-icon"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("