From 6bc123a5541f8d98663efba92edafb19c2fb2be6 Mon Sep 17 00:00:00 2001 From: gtema Date: Fri, 11 Nov 2022 12:03:08 +0000 Subject: [PATCH] Reimplementation of https://gitea.eco.tsi-dev.otc-service.com/docs/doc-exports/pulls/263 Reviewed-by: Hasko, Vladimir Co-authored-by: gtema Co-committed-by: gtema --- docs/dis/api-ref/ALL_META.TXT.json | 642 +++++++++ docs/dis/api-ref/BatchCreateTags.html | 187 +++ docs/dis/api-ref/BatchDeleteTags.html | 187 +++ docs/dis/api-ref/BatchStartTransferTask.html | 139 ++ docs/dis/api-ref/BatchStopTransferTask.html | 139 ++ docs/dis/api-ref/CLASS.TXT.json | 578 ++++++++ docs/dis/api-ref/CreateApp.html | 116 ++ .../api-ref/CreateCloudTableTransferTask.html | 685 +++++++++ docs/dis/api-ref/CreateDliTransferTask.html | 246 ++++ docs/dis/api-ref/CreateDwsTransferTask.html | 445 ++++++ docs/dis/api-ref/CreateMrsTransferTask.html | 287 ++++ docs/dis/api-ref/CreatePolicies.html | 177 +++ docs/dis/api-ref/CreateTag.html | 170 +++ docs/dis/api-ref/DeleteApp.html | 95 ++ docs/dis/api-ref/DeleteCheckpoint.html | 145 ++ docs/dis/api-ref/DeleteStream.html | 96 ++ docs/dis/api-ref/DeleteTag.html | 104 ++ docs/dis/api-ref/DeleteTransferTask.html | 104 ++ docs/dis/api-ref/ErrorCode.html | 619 ++++++++ docs/dis/api-ref/ListApp.html | 231 +++ docs/dis/api-ref/ListPolicies.html | 185 +++ docs/dis/api-ref/ListResourcesByTags.html | 374 +++++ docs/dis/api-ref/ListTags.html | 147 ++ docs/dis/api-ref/ListTransferTasks.html | 216 +++ docs/dis/api-ref/PARAMETERS.txt | 3 + docs/dis/api-ref/ShowApp.html | 142 ++ docs/dis/api-ref/ShowCheckpoint.html | 176 +++ docs/dis/api-ref/ShowConsumerState.html | 206 +++ docs/dis/api-ref/ShowPartitionMetrics.html | 241 ++++ docs/dis/api-ref/ShowStreamMetrics.html | 247 ++++ docs/dis/api-ref/ShowStreamTags.html | 162 +++ docs/dis/api-ref/ShowTransferTask.html | 1278 +++++++++++++++++ docs/dis/api-ref/UpdatePartitionCount.html | 138 ++ docs/dis/api-ref/UpdateStream.html | 183 +++ docs/dis/api-ref/dis_02_0003.html | 62 + docs/dis/api-ref/dis_02_0015.html | 22 + docs/dis/api-ref/dis_02_0016_01.html | 370 +++++ docs/dis/api-ref/dis_02_0018.html | 259 ++++ docs/dis/api-ref/dis_02_0019.html | 216 +++ docs/dis/api-ref/dis_02_0020.html | 193 +++ docs/dis/api-ref/dis_02_0022.html | 334 +++++ docs/dis/api-ref/dis_02_0023.html | 36 + docs/dis/api-ref/dis_02_0024.html | 390 +++++ docs/dis/api-ref/dis_02_0025.html | 565 ++++++++ docs/dis/api-ref/dis_02_0200.html | 5 + docs/dis/api-ref/dis_02_0400.html | 195 +++ docs/dis/api-ref/dis_02_0403.html | 173 +++ docs/dis/api-ref/dis_02_0410.html | 348 +++++ docs/dis/api-ref/dis_02_0500.html | 14 + docs/dis/api-ref/dis_02_0501.html | 49 + docs/dis/api-ref/dis_02_0511.html | 18 + docs/dis/api-ref/dis_02_0512.html | 10 + docs/dis/api-ref/dis_02_0513.html | 10 + docs/dis/api-ref/dis_02_0514.html | 10 + docs/dis/api-ref/dis_02_0515.html | 25 + docs/dis/api-ref/dis_02_0516.html | 14 + docs/dis/api-ref/dis_02_0517.html | 63 + docs/dis/api-ref/dis_02_0518.html | 46 + docs/dis/api-ref/dis_02_0600.html | 12 + .../api-ref/en-us_image_0000001135802808.png | Bin 0 -> 23829 bytes .../api-ref/en-us_image_0000001238312593.jpg | Bin 0 -> 112824 bytes docs/dis/api-ref/en-us_image_0170647338.png | Bin 0 -> 42231 bytes docs/dis/api-ref/en-us_image_0170787737.gif | Bin 0 -> 29752 bytes .../api-ref/en-us_topic_0000001079240698.html | 442 ++++++ .../public_sys-resources/ExpandCollapse.js | 1 + .../caution_3.0-en-us.png | Bin 0 -> 2752 bytes .../public_sys-resources/commonltr.css | 1 + .../public_sys-resources/commonltr_print.css | 1 + .../public_sys-resources/commonrtl.css | 2 + .../public_sys-resources/danger_3.0-en-us.png | Bin 0 -> 2771 bytes .../api-ref/public_sys-resources/delta.gif | Bin 0 -> 836 bytes .../api-ref/public_sys-resources/deltaend.gif | Bin 0 -> 834 bytes .../public_sys-resources/icon-arrowdn.gif | Bin 0 -> 68 bytes .../public_sys-resources/icon-arrowrt.gif | Bin 0 -> 70 bytes .../public_sys-resources/icon-caution.gif | Bin 0 -> 1086 bytes .../public_sys-resources/icon-danger.gif | Bin 0 -> 1086 bytes .../public_sys-resources/icon-huawei.gif | Bin 0 -> 2767 bytes .../public_sys-resources/icon-note.gif | Bin 0 -> 983 bytes .../public_sys-resources/icon-notice.gif | Bin 0 -> 962 bytes .../api-ref/public_sys-resources/icon-tip.gif | Bin 0 -> 879 bytes .../public_sys-resources/icon-warning.gif | Bin 0 -> 1086 bytes .../public_sys-resources/imageResize.js | 4 + .../public_sys-resources/imageclose.gif | Bin 0 -> 155 bytes .../public_sys-resources/imageclosehover.gif | Bin 0 -> 179 bytes .../api-ref/public_sys-resources/imagemax.gif | Bin 0 -> 181 bytes .../public_sys-resources/imagemaxhover.gif | Bin 0 -> 185 bytes .../jquery-migrate-1.2.1.min.js | 2 + .../public_sys-resources/jquery-ui.min.js | 12 + .../public_sys-resources/jquery.min.js | 2 + .../jquery.mousewheel.min.js | 7 + .../public_sys-resources/macFFBgHack.png | Bin 0 -> 207 bytes .../public_sys-resources/note_3.0-en-us.png | Bin 0 -> 1080 bytes .../public_sys-resources/notice_3.0-en-us.png | Bin 0 -> 1672 bytes .../dis/api-ref/public_sys-resources/popup.js | 1 + .../api-ref/public_sys-resources/thickbox.css | 1 + .../api-ref/public_sys-resources/thickbox.js | 8 + .../warning_3.0-en-us.png | Bin 0 -> 3164 bytes docs/dis/api-ref/topic_300000000.html | 29 + docs/dis/api-ref/topic_300000001.html | 23 + docs/dis/api-ref/topic_300000002.html | 19 + docs/dis/api-ref/topic_300000003.html | 19 + docs/dis/api-ref/topic_300000004.html | 33 + docs/dis/api-ref/topic_300000005.html | 17 + docs/dis/api-ref/topic_300000006.html | 27 + 104 files changed, 13180 insertions(+) create mode 100644 docs/dis/api-ref/ALL_META.TXT.json create mode 100644 docs/dis/api-ref/BatchCreateTags.html create mode 100644 docs/dis/api-ref/BatchDeleteTags.html create mode 100644 docs/dis/api-ref/BatchStartTransferTask.html create mode 100644 docs/dis/api-ref/BatchStopTransferTask.html create mode 100644 docs/dis/api-ref/CLASS.TXT.json create mode 100644 docs/dis/api-ref/CreateApp.html create mode 100644 docs/dis/api-ref/CreateCloudTableTransferTask.html create mode 100644 docs/dis/api-ref/CreateDliTransferTask.html create mode 100644 docs/dis/api-ref/CreateDwsTransferTask.html create mode 100644 docs/dis/api-ref/CreateMrsTransferTask.html create mode 100644 docs/dis/api-ref/CreatePolicies.html create mode 100644 docs/dis/api-ref/CreateTag.html create mode 100644 docs/dis/api-ref/DeleteApp.html create mode 100644 docs/dis/api-ref/DeleteCheckpoint.html create mode 100644 docs/dis/api-ref/DeleteStream.html create mode 100644 docs/dis/api-ref/DeleteTag.html create mode 100644 docs/dis/api-ref/DeleteTransferTask.html create mode 100644 docs/dis/api-ref/ErrorCode.html create mode 100644 docs/dis/api-ref/ListApp.html create mode 100644 docs/dis/api-ref/ListPolicies.html create mode 100644 docs/dis/api-ref/ListResourcesByTags.html create mode 100644 docs/dis/api-ref/ListTags.html create mode 100644 docs/dis/api-ref/ListTransferTasks.html create mode 100644 docs/dis/api-ref/PARAMETERS.txt create mode 100644 docs/dis/api-ref/ShowApp.html create mode 100644 docs/dis/api-ref/ShowCheckpoint.html create mode 100644 docs/dis/api-ref/ShowConsumerState.html create mode 100644 docs/dis/api-ref/ShowPartitionMetrics.html create mode 100644 docs/dis/api-ref/ShowStreamMetrics.html create mode 100644 docs/dis/api-ref/ShowStreamTags.html create mode 100644 docs/dis/api-ref/ShowTransferTask.html create mode 100644 docs/dis/api-ref/UpdatePartitionCount.html create mode 100644 docs/dis/api-ref/UpdateStream.html create mode 100644 docs/dis/api-ref/dis_02_0003.html create mode 100644 docs/dis/api-ref/dis_02_0015.html create mode 100644 docs/dis/api-ref/dis_02_0016_01.html create mode 100644 docs/dis/api-ref/dis_02_0018.html create mode 100644 docs/dis/api-ref/dis_02_0019.html create mode 100644 docs/dis/api-ref/dis_02_0020.html create mode 100644 docs/dis/api-ref/dis_02_0022.html create mode 100644 docs/dis/api-ref/dis_02_0023.html create mode 100644 docs/dis/api-ref/dis_02_0024.html create mode 100644 docs/dis/api-ref/dis_02_0025.html create mode 100644 docs/dis/api-ref/dis_02_0200.html create mode 100644 docs/dis/api-ref/dis_02_0400.html create mode 100644 docs/dis/api-ref/dis_02_0403.html create mode 100644 docs/dis/api-ref/dis_02_0410.html create mode 100644 docs/dis/api-ref/dis_02_0500.html create mode 100644 docs/dis/api-ref/dis_02_0501.html create mode 100644 docs/dis/api-ref/dis_02_0511.html create mode 100644 docs/dis/api-ref/dis_02_0512.html create mode 100644 docs/dis/api-ref/dis_02_0513.html create mode 100644 docs/dis/api-ref/dis_02_0514.html create mode 100644 docs/dis/api-ref/dis_02_0515.html create mode 100644 docs/dis/api-ref/dis_02_0516.html create mode 100644 docs/dis/api-ref/dis_02_0517.html create mode 100644 docs/dis/api-ref/dis_02_0518.html create mode 100644 docs/dis/api-ref/dis_02_0600.html create mode 100644 docs/dis/api-ref/en-us_image_0000001135802808.png create mode 100644 docs/dis/api-ref/en-us_image_0000001238312593.jpg create mode 100644 docs/dis/api-ref/en-us_image_0170647338.png create mode 100644 docs/dis/api-ref/en-us_image_0170787737.gif create mode 100644 docs/dis/api-ref/en-us_topic_0000001079240698.html create mode 100644 docs/dis/api-ref/public_sys-resources/ExpandCollapse.js create mode 100644 docs/dis/api-ref/public_sys-resources/caution_3.0-en-us.png create mode 100644 docs/dis/api-ref/public_sys-resources/commonltr.css create mode 100644 docs/dis/api-ref/public_sys-resources/commonltr_print.css create mode 100644 docs/dis/api-ref/public_sys-resources/commonrtl.css create mode 100644 docs/dis/api-ref/public_sys-resources/danger_3.0-en-us.png create mode 100644 docs/dis/api-ref/public_sys-resources/delta.gif create mode 100644 docs/dis/api-ref/public_sys-resources/deltaend.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-arrowdn.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-arrowrt.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-caution.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-danger.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-huawei.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-note.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-notice.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-tip.gif create mode 100644 docs/dis/api-ref/public_sys-resources/icon-warning.gif create mode 100644 docs/dis/api-ref/public_sys-resources/imageResize.js create mode 100644 docs/dis/api-ref/public_sys-resources/imageclose.gif create mode 100644 docs/dis/api-ref/public_sys-resources/imageclosehover.gif create mode 100644 docs/dis/api-ref/public_sys-resources/imagemax.gif create mode 100644 docs/dis/api-ref/public_sys-resources/imagemaxhover.gif create mode 100644 docs/dis/api-ref/public_sys-resources/jquery-migrate-1.2.1.min.js create mode 100644 docs/dis/api-ref/public_sys-resources/jquery-ui.min.js create mode 100644 docs/dis/api-ref/public_sys-resources/jquery.min.js create mode 100644 docs/dis/api-ref/public_sys-resources/jquery.mousewheel.min.js create mode 100644 docs/dis/api-ref/public_sys-resources/macFFBgHack.png create mode 100644 docs/dis/api-ref/public_sys-resources/note_3.0-en-us.png create mode 100644 docs/dis/api-ref/public_sys-resources/notice_3.0-en-us.png create mode 100644 docs/dis/api-ref/public_sys-resources/popup.js create mode 100644 docs/dis/api-ref/public_sys-resources/thickbox.css create mode 100644 docs/dis/api-ref/public_sys-resources/thickbox.js create mode 100644 docs/dis/api-ref/public_sys-resources/warning_3.0-en-us.png create mode 100644 docs/dis/api-ref/topic_300000000.html create mode 100644 docs/dis/api-ref/topic_300000001.html create mode 100644 docs/dis/api-ref/topic_300000002.html create mode 100644 docs/dis/api-ref/topic_300000003.html create mode 100644 docs/dis/api-ref/topic_300000004.html create mode 100644 docs/dis/api-ref/topic_300000005.html create mode 100644 docs/dis/api-ref/topic_300000006.html diff --git a/docs/dis/api-ref/ALL_META.TXT.json b/docs/dis/api-ref/ALL_META.TXT.json new file mode 100644 index 000000000..31bde217f --- /dev/null +++ b/docs/dis/api-ref/ALL_META.TXT.json @@ -0,0 +1,642 @@ +[ + { + "uri":"dis_02_0511.html", + "product_code":"dis", + "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":"dis_02_0600.html", + "product_code":"dis", + "code":"2", + "des":"Welcome to Data Ingestion Service API Reference. Data Ingestion Service (DIS) provides efficient collection, transmission, and distribution capabilities for real-time IoT", + "doc_type":"api", + "kw":"Overview,Before You Start,API Reference", + "title":"Overview", + "githuburl":"" + }, + { + "uri":"dis_02_0512.html", + "product_code":"dis", + "code":"3", + "des":"DIS supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS. For details about API calling, see Calling APIs.", + "doc_type":"api", + "kw":"API Calling,Before You Start,API Reference", + "title":"API Calling", + "githuburl":"" + }, + { + "uri":"dis_02_0513.html", + "product_code":"dis", + "code":"4", + "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":"dis_02_0514.html", + "product_code":"dis", + "code":"5", + "des":"For more constraints, see API description.", + "doc_type":"api", + "kw":"Constraints,Before You Start,API Reference", + "title":"Constraints", + "githuburl":"" + }, + { + "uri":"dis_02_0515.html", + "product_code":"dis", + "code":"6", + "des":"DomainA domain is created upon successful registration. The domain has full access permissions for all of its cloud services and resources. It can be used to reset user p", + "doc_type":"api", + "kw":"Concepts,Before You Start,API Reference", + "title":"Concepts", + "githuburl":"" + }, + { + "uri":"dis_02_0200.html", + "product_code":"dis", + "code":"7", + "des":"DIS provides self-developed APIs that comply with RESTful API design specifications. You can use DIS functions listed in API Description by calling these APIs.", + "doc_type":"api", + "kw":"API Overview,API Reference", + "title":"API Overview", + "githuburl":"" + }, + { + "uri":"dis_02_0516.html", + "product_code":"dis", + "code":"8", + "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":"dis_02_0400.html", + "product_code":"dis", + "code":"9", + "des":"This section describes the structure of a REST API request, and uses the IAM API for obtaining a user token as an example to demonstrate how to call an API. The obtained ", + "doc_type":"api", + "kw":"Making an API Request,Calling APIs,API Reference", + "title":"Making an API Request", + "githuburl":"" + }, + { + "uri":"dis_02_0517.html", + "product_code":"dis", + "code":"10", + "des":"Requests for calling an API can be authenticated using either of the following methods:Token-based authentication: Requests are authenticated using a token.AK/SK-based au", + "doc_type":"api", + "kw":"Authentication,Calling APIs,API Reference", + "title":"Authentication", + "githuburl":"" + }, + { + "uri":"dis_02_0518.html", + "product_code":"dis", + "code":"11", + "des":"After sending a request, you will receive a response, including a status code, response header, and response body.A status code is a group of digits, ranging from 1xx to ", + "doc_type":"api", + "kw":"Response,Calling APIs,API Reference", + "title":"Response", + "githuburl":"" + }, + { + "uri":"dis_02_0003.html", + "product_code":"dis", + "code":"12", + "des":"DIS provides efficient collection, transmission, and distribution capabilities for real-time data and provides a variety of APIs to help you quickly build real-time data ", + "doc_type":"api", + "kw":"Application Example,API Reference", + "title":"Application Example", + "githuburl":"" + }, + { + "uri":"dis_02_0015.html", + "product_code":"dis", + "code":"13", + "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":"API Description", + "title":"API Description", + "githuburl":"" + }, + { + "uri":"topic_300000000.html", + "product_code":"dis", + "code":"14", + "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":"Stream Management", + "title":"Stream Management", + "githuburl":"" + }, + { + "uri":"dis_02_0016_01.html", + "product_code":"dis", + "code":"15", + "des":"This API is used to create a stream.When creating a stream, specify a stream type (common or advanced) and the number of partitions.When creating a stream, specify a stre", + "doc_type":"api", + "kw":"Creating Streams,Stream Management,API Reference", + "title":"Creating Streams", + "githuburl":"" + }, + { + "uri":"dis_02_0024.html", + "product_code":"dis", + "code":"16", + "des":"This API is used to query all streams created by the current tenant.During the query, specify the stream from which the stream list is returned and the maximum number of ", + "doc_type":"api", + "kw":"Querying Streams,Stream Management,API Reference", + "title":"Querying Streams", + "githuburl":"" + }, + { + "uri":"DeleteStream.html", + "product_code":"dis", + "code":"17", + "des":"This API is used to delete specified streams.DELETE /v2/{project_id}/streams/{stream_name}NoneDeleting Specified StreamsNoneSee Error Codes.", + "doc_type":"api", + "kw":"Deleting Specified Streams,Stream Management,API Reference", + "title":"Deleting Specified Streams", + "githuburl":"" + }, + { + "uri":"dis_02_0025.html", + "product_code":"dis", + "code":"18", + "des":"This API is used to query details about a specified stream.GET /v2/{project_id}/streams/{stream_name}Status code: 200Querying Stream DetailsStatus code: 200Normal respons", + "doc_type":"api", + "kw":"Querying Stream Details,Stream Management,API Reference", + "title":"Querying Stream Details", + "githuburl":"" + }, + { + "uri":"UpdatePartitionCount.html", + "product_code":"dis", + "code":"19", + "des":"This API is used to change the number of partitions in a specific stream.PUT /v2/{project_id}/streams/{stream_name}NoneChanging Partition QuantityNoneSee Error Codes.", + "doc_type":"api", + "kw":"Changing Partition Quantity,Stream Management,API Reference", + "title":"Changing Partition Quantity", + "githuburl":"" + }, + { + "uri":"UpdateStream.html", + "product_code":"dis", + "code":"20", + "des":"This API is used to update the information about specified streams.PUT /v3/{project_id}/streams/{stream_name}NoneUpdating Lifecycles of StreamsPUT https://{Endpoint}/v3/{", + "doc_type":"api", + "kw":"Updating Stream Information,Stream Management,API Reference", + "title":"Updating Stream Information", + "githuburl":"" + }, + { + "uri":"CreatePolicies.html", + "product_code":"dis", + "code":"21", + "des":"This API is used to add permission policies to specified streams.POST /v2/{project_id}/streams/{stream_name}/policiesNoneAdding Permission Policies for TenantsPOST https:", + "doc_type":"api", + "kw":"Adding Permission Policies,Stream Management,API Reference", + "title":"Adding Permission Policies", + "githuburl":"" + }, + { + "uri":"ListPolicies.html", + "product_code":"dis", + "code":"22", + "des":"This API is used to query permission policies of specified streams.GET /v2/{project_id}/streams/{stream_name}/policiesStatus code: 200Querying Permission PoliciesStatus c", + "doc_type":"api", + "kw":"Querying Permission Policies,Stream Management,API Reference", + "title":"Querying Permission Policies", + "githuburl":"" + }, + { + "uri":"topic_300000001.html", + "product_code":"dis", + "code":"23", + "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":"App Management", + "title":"App Management", + "githuburl":"" + }, + { + "uri":"CreateApp.html", + "product_code":"dis", + "code":"24", + "des":"This API is used to create consumption apps.POST /v2/{project_id}/appsNoneCreating Consumption AppsNoneSee Error Codes.", + "doc_type":"api", + "kw":"Creating Consumption Apps,App Management,API Reference", + "title":"Creating Consumption Apps", + "githuburl":"" + }, + { + "uri":"ListApp.html", + "product_code":"dis", + "code":"25", + "des":"This API is used to query apps.GET /v2/{project_id}/appsStatus code: 200Querying AppsStatus code: 200Normal response.See Error Codes.", + "doc_type":"api", + "kw":"Querying Apps,App Management,API Reference", + "title":"Querying Apps", + "githuburl":"" + }, + { + "uri":"DeleteApp.html", + "product_code":"dis", + "code":"26", + "des":"This API is used to delete apps.DELETE /v2/{project_id}/apps/{app_name}NoneDeleting AppsNoneSee Error Codes.", + "doc_type":"api", + "kw":"Deleting Apps,App Management,API Reference", + "title":"Deleting Apps", + "githuburl":"" + }, + { + "uri":"ShowApp.html", + "product_code":"dis", + "code":"27", + "des":"This API is used to query app details.GET /v2/{project_id}/apps/{app_name}Status code: 200Querying App DetailsStatus code: 200Normal response.See Error Codes.", + "doc_type":"api", + "kw":"Querying App Details,App Management,API Reference", + "title":"Querying App Details", + "githuburl":"" + }, + { + "uri":"ShowConsumerState.html", + "product_code":"dis", + "code":"28", + "des":"This API is used to query the consumption status of apps.GET /v2/{project_id}/apps/{app_name}/streams/{stream_name}Status code: 200Querying App Consumption StatusStatus c", + "doc_type":"api", + "kw":"Querying App Consumption Status,App Management,API Reference", + "title":"Querying App Consumption Status", + "githuburl":"" + }, + { + "uri":"topic_300000002.html", + "product_code":"dis", + "code":"29", + "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":"Checkpoint Management", + "title":"Checkpoint Management", + "githuburl":"" + }, + { + "uri":"dis_02_0403.html", + "product_code":"dis", + "code":"30", + "des":"This API is used to submit checkpoints.POST /v2/{project_id}/checkpointsNoneSubmitting CheckpointsNoneSee Error Codes.", + "doc_type":"api", + "kw":"Submitting Checkpoints,Checkpoint Management,API Reference", + "title":"Submitting Checkpoints", + "githuburl":"" + }, + { + "uri":"ShowCheckpoint.html", + "product_code":"dis", + "code":"31", + "des":"This API is used to query checkpoint details.GET /v2/{project_id}/checkpointsStatus code: 204Querying Checkpoint DetailsStatus code: 204Normal response.See Error Codes.", + "doc_type":"api", + "kw":"Querying Checkpoint Details,Checkpoint Management,API Reference", + "title":"Querying Checkpoint Details", + "githuburl":"" + }, + { + "uri":"DeleteCheckpoint.html", + "product_code":"dis", + "code":"32", + "des":"This API is used to delete checkpoints.DELETE /v2/{project_id}/checkpointsNoneDeleting CheckpointsNoneSee Error Codes.", + "doc_type":"api", + "kw":"Deleting Checkpoints,Checkpoint Management,API Reference", + "title":"Deleting Checkpoints", + "githuburl":"" + }, + { + "uri":"topic_300000003.html", + "product_code":"dis", + "code":"33", + "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":"Data Management", + "title":"Data Management", + "githuburl":"" + }, + { + "uri":"dis_02_0018.html", + "product_code":"dis", + "code":"34", + "des":"This API is used to upload data to DIS streams.POST /v2/{project_id}/recordsStatus code: 200Uploading DataNoneSee Error Codes.", + "doc_type":"api", + "kw":"Uploading Data,Data Management,API Reference", + "title":"Uploading Data", + "githuburl":"" + }, + { + "uri":"dis_02_0019.html", + "product_code":"dis", + "code":"35", + "des":"This API is used to download data from DIS streams.GET /v2/{project_id}/recordsStatus code: 200Downloading DataStatus code: 200Normal response.See Error Codes.", + "doc_type":"api", + "kw":"Downloading Data,Data Management,API Reference", + "title":"Downloading Data", + "githuburl":"" + }, + { + "uri":"dis_02_0020.html", + "product_code":"dis", + "code":"36", + "des":"This API is used to obtain data cursors.GET /v2/{project_id}/cursorsStatus code: 200Obtaining Data CursorsStatus code: 200Normal response.See Error Codes.", + "doc_type":"api", + "kw":"Obtaining Data Cursors,Data Management,API Reference", + "title":"Obtaining Data Cursors", + "githuburl":"" + }, + { + "uri":"topic_300000004.html", + "product_code":"dis", + "code":"37", + "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":"Dump Task Management", + "title":"Dump Task Management", + "githuburl":"" + }, + { + "uri":"dis_02_0410.html", + "product_code":"dis", + "code":"38", + "des":"This API is used to add OBS dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding OBS Dump TasksPOST https://{Endpoint}/v2/{project_id}/streams/", + "doc_type":"api", + "kw":"Adding OBS Dump Tasks,Dump Task Management,API Reference", + "title":"Adding OBS Dump Tasks", + "githuburl":"" + }, + { + "uri":"ListTransferTasks.html", + "product_code":"dis", + "code":"39", + "des":"This API is used to query dump tasks.GET /v2/{project_id}/streams/{stream_name}/transfer-tasksStatus code: 200Querying Dump TasksStatus code: 200Normal response.See Error", + "doc_type":"api", + "kw":"Querying Dump Tasks,Dump Task Management,API Reference", + "title":"Querying Dump Tasks", + "githuburl":"" + }, + { + "uri":"DeleteTransferTask.html", + "product_code":"dis", + "code":"40", + "des":"This API is used to delete dump tasks.DELETE /v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}NoneDeleting Dump TasksNoneSee Error Codes.", + "doc_type":"api", + "kw":"Deleting Dump Tasks,Dump Task Management,API Reference", + "title":"Deleting Dump Tasks", + "githuburl":"" + }, + { + "uri":"ShowTransferTask.html", + "product_code":"dis", + "code":"41", + "des":"This API is used to query dump task details.GET /v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}Status code: 200Querying Dump Task DetailsStatus code: 20", + "doc_type":"api", + "kw":"Querying Dump Task Details,Dump Task Management,API Reference", + "title":"Querying Dump Task Details", + "githuburl":"" + }, + { + "uri":"BatchStartTransferTask.html", + "product_code":"dis", + "code":"42", + "des":"This API is used to start dump tasks in batches.POST /v2/{project_id}/streams/{stream_name}/transfer-tasks/actionNoneStarting Dump Tasks in BatchesNoneSee Error Codes.", + "doc_type":"api", + "kw":"Starting Dump Tasks in Batches,Dump Task Management,API Reference", + "title":"Starting Dump Tasks in Batches", + "githuburl":"" + }, + { + "uri":"BatchStopTransferTask.html", + "product_code":"dis", + "code":"43", + "des":"This API is used to pause dump tasks in batches.POST /v2/{project_id}/streams/{stream_name}/transfer-tasks/actionNonePausing Dump Tasks in BatchesNoneSee Error Codes.", + "doc_type":"api", + "kw":"Pausing Dump Tasks in Batches,Dump Task Management,API Reference", + "title":"Pausing Dump Tasks in Batches", + "githuburl":"" + }, + { + "uri":"CreateDwsTransferTask.html", + "product_code":"dis", + "code":"44", + "des":"This API is used to add DWS dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding DWS Dump TasksNoneSee Error Codes.", + "doc_type":"api", + "kw":"Adding DWS Dump Tasks,Dump Task Management,API Reference", + "title":"Adding DWS Dump Tasks", + "githuburl":"" + }, + { + "uri":"CreateMrsTransferTask.html", + "product_code":"dis", + "code":"45", + "des":"This API is used to add MRS dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding MRS Dump TasksNoneSee Error Codes.", + "doc_type":"api", + "kw":"Adding MRS Dump Tasks,Dump Task Management,API Reference", + "title":"Adding MRS Dump Tasks", + "githuburl":"" + }, + { + "uri":"CreateDliTransferTask.html", + "product_code":"dis", + "code":"46", + "des":"This API is used to add DLI dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneNoneNoneSee Error Codes.", + "doc_type":"api", + "kw":"Adding DLI Dump Tasks,Dump Task Management,API Reference", + "title":"Adding DLI Dump Tasks", + "githuburl":"" + }, + { + "uri":"CreateCloudTableTransferTask.html", + "product_code":"dis", + "code":"47", + "des":"This API is used to add CloudTable dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding CloudTable HBase Dump TasksPOST https://{Endpoint}/v2/{", + "doc_type":"api", + "kw":"Adding CloudTable Dump Tasks,Dump Task Management,API Reference", + "title":"Adding CloudTable Dump Tasks", + "githuburl":"" + }, + { + "uri":"topic_300000005.html", + "product_code":"dis", + "code":"48", + "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":"Monitoring Management", + "title":"Monitoring Management", + "githuburl":"" + }, + { + "uri":"ShowStreamMetrics.html", + "product_code":"dis", + "code":"49", + "des":"This API is used to query the monitoring data of specified streams.GET /v2/{project_id}/streams/{stream_name}/metricsStatus code: 200Querying Stream Monitoring DataNoneSe", + "doc_type":"api", + "kw":"Querying Stream Monitoring Data,Monitoring Management,API Reference", + "title":"Querying Stream Monitoring Data", + "githuburl":"" + }, + { + "uri":"ShowPartitionMetrics.html", + "product_code":"dis", + "code":"50", + "des":"This API is used to query the monitoring data of a specified partition of a stream.GET /v2/{project_id}/streams/{stream_name}/partitions/{partition_id}/metricsStatus code", + "doc_type":"api", + "kw":"Querying Partition Monitoring Data,Monitoring Management,API Reference", + "title":"Querying Partition Monitoring Data", + "githuburl":"" + }, + { + "uri":"topic_300000006.html", + "product_code":"dis", + "code":"51", + "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", + "title":"Tag Management", + "githuburl":"" + }, + { + "uri":"CreateTag.html", + "product_code":"dis", + "code":"52", + "des":"This API is used to add tags to specified streams.POST /v2/{project_id}/stream/{stream_id}/tagsNoneAdding Tags for Specified StreamsNoneSee Error Codes.", + "doc_type":"api", + "kw":"Adding Tags for Specified Streams,Tag Management,API Reference", + "title":"Adding Tags for Specified Streams", + "githuburl":"" + }, + { + "uri":"ShowStreamTags.html", + "product_code":"dis", + "code":"53", + "des":"This API is used to query tags of specified streams.GET /v2/{project_id}/stream/{stream_id}/tagsStatus code: 200This API is used to query tags of specified streams.Status", + "doc_type":"api", + "kw":"Querying Tags of Specified Streams,Tag Management,API Reference", + "title":"Querying Tags of Specified Streams", + "githuburl":"" + }, + { + "uri":"DeleteTag.html", + "product_code":"dis", + "code":"54", + "des":"This API is used to delete tags of specified streams.DELETE /v2/{project_id}/stream/{stream_id}/tags/{key}NoneDeleting Tags of Specified StreamsNoneSee Error Codes.", + "doc_type":"api", + "kw":"Deleting Tags of Specified Streams,Tag Management,API Reference", + "title":"Deleting Tags of Specified Streams", + "githuburl":"" + }, + { + "uri":"BatchCreateTags.html", + "product_code":"dis", + "code":"55", + "des":"This API is used to add resource tags (such as stream tags) in batches. The API is idempotent. When you are creating tags, if there are duplicate keys in the request body", + "doc_type":"api", + "kw":"Adding Resource Tags in Batches,Tag Management,API Reference", + "title":"Adding Resource Tags in Batches", + "githuburl":"" + }, + { + "uri":"ListTags.html", + "product_code":"dis", + "code":"56", + "des":"This API is used to query all tags of specified regions.GET /v2/{project_id}/stream/tagsStatus code: 200Querying Tags of Specified RegionsStatus code: 200Response body of", + "doc_type":"api", + "kw":"Querying Tags of Specified Regions,Tag Management,API Reference", + "title":"Querying Tags of Specified Regions", + "githuburl":"" + }, + { + "uri":"ListResourcesByTags.html", + "product_code":"dis", + "code":"57", + "des":"This API is used to filter resources (streams) by tag.POST /v2/{project_id}/stream/resource_instances/actionStatus code: 200Resource (stream) filtering by tag and record ", + "doc_type":"api", + "kw":"Using Tags to Filter Resources (Streams),Tag Management,API Reference", + "title":"Using Tags to Filter Resources (Streams)", + "githuburl":"" + }, + { + "uri":"BatchDeleteTags.html", + "product_code":"dis", + "code":"58", + "des":"This API is used to delete resource tags (stream tags) in batches. This API is idempotent. If the deleted tag does not exist, the deletion is considered successful by def", + "doc_type":"api", + "kw":"Deleting Resource Tags in Batches,Tag Management,API Reference", + "title":"Deleting Resource Tags in Batches", + "githuburl":"" + }, + { + "uri":"en-us_topic_0000001079240698.html", + "product_code":"dis", + "code":"59", + "des":"This chapter describes fine-grained permissions management for your DIS. If your cloud account does not need individual IAM users, then you may skip over this chapter.By ", + "doc_type":"api", + "kw":"Permissions Policies and Supported Actions,API Reference", + "title":"Permissions Policies and Supported Actions", + "githuburl":"" + }, + { + "uri":"dis_02_0500.html", + "product_code":"dis", + "code":"60", + "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":"Appendix", + "title":"Appendix", + "githuburl":"" + }, + { + "uri":"ErrorCode.html", + "product_code":"dis", + "code":"61", + "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":"Error Codes,Appendix,API Reference", + "title":"Error Codes", + "githuburl":"" + }, + { + "uri":"dis_02_0022.html", + "product_code":"dis", + "code":"62", + "des":"A status code is an HTTPS response issued by DIS to indicate whether an API request has been successfully completed.", + "doc_type":"api", + "kw":"Status Codes,Appendix,API Reference", + "title":"Status Codes", + "githuburl":"" + }, + { + "uri":"dis_02_0501.html", + "product_code":"dis", + "code":"63", + "des":"This section describes how to obtain a project ID on the console or by calling an API.", + "doc_type":"api", + "kw":"Obtaining a Project ID,Appendix,API Reference", + "title":"Obtaining a Project ID", + "githuburl":"" + }, + { + "uri":"dis_02_0023.html", + "product_code":"dis", + "code":"64", + "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/dis/api-ref/BatchCreateTags.html b/docs/dis/api-ref/BatchCreateTags.html new file mode 100644 index 000000000..4f7f47840 --- /dev/null +++ b/docs/dis/api-ref/BatchCreateTags.html @@ -0,0 +1,187 @@ + + +

Adding Resource Tags in Batches

+

Function

This API is used to add resource tags (such as stream tags) in batches. The API is idempotent. When you are creating tags, if there are duplicate keys in the request body, an error is reported. During tag creation, duplicate keys are not allowed. If a key exists in the database, its value will be overwritten.

+
+

URI

POST /v2/{project_id}/stream/{stream_id}/tags/action

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_id

+

Yes

+

String

+

Stream ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

action

+

Yes

+

String

+

Operation to be performed. The value can be create only.

+
  • create: batch creation

    +
+

Enumeration values:

+
  • create

    +
+

tags

+

Yes

+

Array of Tag objects

+

Tag list.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 4 Tag

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

No

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Minimum: 1

+

Maximum: 36

+

value

+

No

+

String

+

Value.

+
  • The value contains a maximum of 43 characters.

    +
  • Character set: A-Z, a-z, 0-9, '. ', '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
  • The value can contain only digits, letters, hyphens (-), and underscores (_).

    +
+

Minimum: 0

+

Maximum: 43

+
+
+
+

Response Parameters

None

+
+

Example Requests

Adding Resource Tags in Batches

+
POST https://{Endpoint}/v2/{project_id}/stream/{stream_id}/tags/action
+
+{
+  "action" : "create",
+  "tags" : [ {
+    "key" : "key1",
+    "value" : "value1"
+  }, {
+    "key" : "key2",
+    "value" : "value3"
+  } ]
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/BatchDeleteTags.html b/docs/dis/api-ref/BatchDeleteTags.html new file mode 100644 index 000000000..28e2ebde4 --- /dev/null +++ b/docs/dis/api-ref/BatchDeleteTags.html @@ -0,0 +1,187 @@ + + +

Deleting Resource Tags in Batches

+

Function

This API is used to delete resource tags (stream tags) in batches. This API is idempotent. If the deleted tag does not exist, the deletion is considered successful by default. The tag character set range is not verified during tag deletion. When you delete tags, the tag structure cannot be missing, and the key cannot be left blank or be an empty string.

+
+

URI

POST /v2/{project_id}/stream/{stream_id}/tags/action

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_id

+

Yes

+

String

+

Stream ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

action

+

Yes

+

String

+

Operation to be performed. The value can be delete only.

+
  • delete: batch deletion

    +
+

Enumeration values:

+
  • delete

    +
+

tags

+

Yes

+

Array of Tag objects

+

Tag list.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 4 Tag

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

No

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Minimum: 1

+

Maximum: 36

+

value

+

No

+

String

+

Value.

+
  • The value contains a maximum of 43 characters.

    +
  • Character set: A-Z, a-z, 0-9, '. ', '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
  • The value can contain only digits, letters, hyphens (-), and underscores (_).

    +
+

Minimum: 0

+

Maximum: 43

+
+
+
+

Response Parameters

None

+
+

Example Requests

Deleting Resource Tags in Batches

+
POST https://{Endpoint}/v2/{project_id}/stream/{stream_id}/tags/action
+
+{
+  "action" : "delete",
+  "tags" : [ {
+    "key" : "key1",
+    "value" : "value1"
+  }, {
+    "key" : "key2",
+    "value" : "value3"
+  } ]
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/BatchStartTransferTask.html b/docs/dis/api-ref/BatchStartTransferTask.html new file mode 100644 index 000000000..f19315e5a --- /dev/null +++ b/docs/dis/api-ref/BatchStartTransferTask.html @@ -0,0 +1,139 @@ + + +

Starting Dump Tasks in Batches

+

Function

This API is used to start dump tasks in batches.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/transfer-tasks/action

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream to be queried.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

action

+

Yes

+

String

+

Dump task operation. Currently, only the following operation is supported:

+
  • start: The dump task is started.

    +
+

Enumeration values:

+
  • start

    +
+

tasks

+

Yes

+

Array of BatchTransferTask objects

+

List of dump tasks to be operated.

+
+
+ +
+ + + + + + + + + + + +
Table 3 BatchTransferTask

Parameter

+

Mandatory

+

Type

+

Description

+

id

+

Yes

+

String

+

Dump task ID.

+
+
+
+

Response Parameters

None

+
+

Example Requests

Starting Dump Tasks in Batches

+
POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks/action
+
+{
+  "action" : "start",
+  "tasks" : [ {
+    "id" : "9dSu1wfCytSk1aOLxvF"
+  } ]
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/BatchStopTransferTask.html b/docs/dis/api-ref/BatchStopTransferTask.html new file mode 100644 index 000000000..ba1e9fce0 --- /dev/null +++ b/docs/dis/api-ref/BatchStopTransferTask.html @@ -0,0 +1,139 @@ + + +

Pausing Dump Tasks in Batches

+

Function

This API is used to pause dump tasks in batches.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/transfer-tasks/action

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream to be queried.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

action

+

Yes

+

String

+

Dump task operation. Currently, only the following operation is supported:

+
  • stop: The dump task is stopped.

    +
+

Enumeration values:

+
  • stop

    +
+

tasks

+

Yes

+

Array of BatchTransferTask objects

+

List of dump tasks to be paused.

+
+
+ +
+ + + + + + + + + + + +
Table 3 BatchTransferTask

Parameter

+

Mandatory

+

Type

+

Description

+

id

+

Yes

+

String

+

Dump task ID.

+
+
+
+

Response Parameters

None

+
+

Example Requests

Pausing Dump Tasks in Batches

+
POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks/action
+
+{
+  "action" : "stop",
+  "tasks" : [ {
+    "id" : "9dSu1wfCytSk1aOLxvF"
+  } ]
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/CLASS.TXT.json b/docs/dis/api-ref/CLASS.TXT.json new file mode 100644 index 000000000..d1339c71a --- /dev/null +++ b/docs/dis/api-ref/CLASS.TXT.json @@ -0,0 +1,578 @@ +[ + { + "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":"dis", + "title":"Before You Start", + "uri":"dis_02_0511.html", + "doc_type":"api", + "p_code":"", + "code":"1" + }, + { + "desc":"Welcome to Data Ingestion Service API Reference. Data Ingestion Service (DIS) provides efficient collection, transmission, and distribution capabilities for real-time IoT", + "product_code":"dis", + "title":"Overview", + "uri":"dis_02_0600.html", + "doc_type":"api", + "p_code":"1", + "code":"2" + }, + { + "desc":"DIS supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS. For details about API calling, see Calling APIs.", + "product_code":"dis", + "title":"API Calling", + "uri":"dis_02_0512.html", + "doc_type":"api", + "p_code":"1", + "code":"3" + }, + { + "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":"dis", + "title":"Endpoints", + "uri":"dis_02_0513.html", + "doc_type":"api", + "p_code":"1", + "code":"4" + }, + { + "desc":"For more constraints, see API description.", + "product_code":"dis", + "title":"Constraints", + "uri":"dis_02_0514.html", + "doc_type":"api", + "p_code":"1", + "code":"5" + }, + { + "desc":"DomainA domain is created upon successful registration. The domain has full access permissions for all of its cloud services and resources. It can be used to reset user p", + "product_code":"dis", + "title":"Concepts", + "uri":"dis_02_0515.html", + "doc_type":"api", + "p_code":"1", + "code":"6" + }, + { + "desc":"DIS provides self-developed APIs that comply with RESTful API design specifications. You can use DIS functions listed in API Description by calling these APIs.", + "product_code":"dis", + "title":"API Overview", + "uri":"dis_02_0200.html", + "doc_type":"api", + "p_code":"", + "code":"7" + }, + { + "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":"dis", + "title":"Calling APIs", + "uri":"dis_02_0516.html", + "doc_type":"api", + "p_code":"", + "code":"8" + }, + { + "desc":"This section describes the structure of a REST API request, and uses the IAM API for obtaining a user token as an example to demonstrate how to call an API. The obtained ", + "product_code":"dis", + "title":"Making an API Request", + "uri":"dis_02_0400.html", + "doc_type":"api", + "p_code":"8", + "code":"9" + }, + { + "desc":"Requests for calling an API can be authenticated using either of the following methods:Token-based authentication: Requests are authenticated using a token.AK/SK-based au", + "product_code":"dis", + "title":"Authentication", + "uri":"dis_02_0517.html", + "doc_type":"api", + "p_code":"8", + "code":"10" + }, + { + "desc":"After sending a request, you will receive a response, including a status code, response header, and response body.A status code is a group of digits, ranging from 1xx to ", + "product_code":"dis", + "title":"Response", + "uri":"dis_02_0518.html", + "doc_type":"api", + "p_code":"8", + "code":"11" + }, + { + "desc":"DIS provides efficient collection, transmission, and distribution capabilities for real-time data and provides a variety of APIs to help you quickly build real-time data ", + "product_code":"dis", + "title":"Application Example", + "uri":"dis_02_0003.html", + "doc_type":"api", + "p_code":"", + "code":"12" + }, + { + "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":"dis", + "title":"API Description", + "uri":"dis_02_0015.html", + "doc_type":"api", + "p_code":"", + "code":"13" + }, + { + "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":"dis", + "title":"Stream Management", + "uri":"topic_300000000.html", + "doc_type":"api", + "p_code":"13", + "code":"14" + }, + { + "desc":"This API is used to create a stream.When creating a stream, specify a stream type (common or advanced) and the number of partitions.When creating a stream, specify a stre", + "product_code":"dis", + "title":"Creating Streams", + "uri":"dis_02_0016_01.html", + "doc_type":"api", + "p_code":"14", + "code":"15" + }, + { + "desc":"This API is used to query all streams created by the current tenant.During the query, specify the stream from which the stream list is returned and the maximum number of ", + "product_code":"dis", + "title":"Querying Streams", + "uri":"dis_02_0024.html", + "doc_type":"api", + "p_code":"14", + "code":"16" + }, + { + "desc":"This API is used to delete specified streams.DELETE /v2/{project_id}/streams/{stream_name}NoneDeleting Specified StreamsNoneSee Error Codes.", + "product_code":"dis", + "title":"Deleting Specified Streams", + "uri":"DeleteStream.html", + "doc_type":"api", + "p_code":"14", + "code":"17" + }, + { + "desc":"This API is used to query details about a specified stream.GET /v2/{project_id}/streams/{stream_name}Status code: 200Querying Stream DetailsStatus code: 200Normal respons", + "product_code":"dis", + "title":"Querying Stream Details", + "uri":"dis_02_0025.html", + "doc_type":"api", + "p_code":"14", + "code":"18" + }, + { + "desc":"This API is used to change the number of partitions in a specific stream.PUT /v2/{project_id}/streams/{stream_name}NoneChanging Partition QuantityNoneSee Error Codes.", + "product_code":"dis", + "title":"Changing Partition Quantity", + "uri":"UpdatePartitionCount.html", + "doc_type":"api", + "p_code":"14", + "code":"19" + }, + { + "desc":"This API is used to update the information about specified streams.PUT /v3/{project_id}/streams/{stream_name}NoneUpdating Lifecycles of StreamsPUT https://{Endpoint}/v3/{", + "product_code":"dis", + "title":"Updating Stream Information", + "uri":"UpdateStream.html", + "doc_type":"api", + "p_code":"14", + "code":"20" + }, + { + "desc":"This API is used to add permission policies to specified streams.POST /v2/{project_id}/streams/{stream_name}/policiesNoneAdding Permission Policies for TenantsPOST https:", + "product_code":"dis", + "title":"Adding Permission Policies", + "uri":"CreatePolicies.html", + "doc_type":"api", + "p_code":"14", + "code":"21" + }, + { + "desc":"This API is used to query permission policies of specified streams.GET /v2/{project_id}/streams/{stream_name}/policiesStatus code: 200Querying Permission PoliciesStatus c", + "product_code":"dis", + "title":"Querying Permission Policies", + "uri":"ListPolicies.html", + "doc_type":"api", + "p_code":"14", + "code":"22" + }, + { + "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":"dis", + "title":"App Management", + "uri":"topic_300000001.html", + "doc_type":"api", + "p_code":"13", + "code":"23" + }, + { + "desc":"This API is used to create consumption apps.POST /v2/{project_id}/appsNoneCreating Consumption AppsNoneSee Error Codes.", + "product_code":"dis", + "title":"Creating Consumption Apps", + "uri":"CreateApp.html", + "doc_type":"api", + "p_code":"23", + "code":"24" + }, + { + "desc":"This API is used to query apps.GET /v2/{project_id}/appsStatus code: 200Querying AppsStatus code: 200Normal response.See Error Codes.", + "product_code":"dis", + "title":"Querying Apps", + "uri":"ListApp.html", + "doc_type":"api", + "p_code":"23", + "code":"25" + }, + { + "desc":"This API is used to delete apps.DELETE /v2/{project_id}/apps/{app_name}NoneDeleting AppsNoneSee Error Codes.", + "product_code":"dis", + "title":"Deleting Apps", + "uri":"DeleteApp.html", + "doc_type":"api", + "p_code":"23", + "code":"26" + }, + { + "desc":"This API is used to query app details.GET /v2/{project_id}/apps/{app_name}Status code: 200Querying App DetailsStatus code: 200Normal response.See Error Codes.", + "product_code":"dis", + "title":"Querying App Details", + "uri":"ShowApp.html", + "doc_type":"api", + "p_code":"23", + "code":"27" + }, + { + "desc":"This API is used to query the consumption status of apps.GET /v2/{project_id}/apps/{app_name}/streams/{stream_name}Status code: 200Querying App Consumption StatusStatus c", + "product_code":"dis", + "title":"Querying App Consumption Status", + "uri":"ShowConsumerState.html", + "doc_type":"api", + "p_code":"23", + "code":"28" + }, + { + "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":"dis", + "title":"Checkpoint Management", + "uri":"topic_300000002.html", + "doc_type":"api", + "p_code":"13", + "code":"29" + }, + { + "desc":"This API is used to submit checkpoints.POST /v2/{project_id}/checkpointsNoneSubmitting CheckpointsNoneSee Error Codes.", + "product_code":"dis", + "title":"Submitting Checkpoints", + "uri":"dis_02_0403.html", + "doc_type":"api", + "p_code":"29", + "code":"30" + }, + { + "desc":"This API is used to query checkpoint details.GET /v2/{project_id}/checkpointsStatus code: 204Querying Checkpoint DetailsStatus code: 204Normal response.See Error Codes.", + "product_code":"dis", + "title":"Querying Checkpoint Details", + "uri":"ShowCheckpoint.html", + "doc_type":"api", + "p_code":"29", + "code":"31" + }, + { + "desc":"This API is used to delete checkpoints.DELETE /v2/{project_id}/checkpointsNoneDeleting CheckpointsNoneSee Error Codes.", + "product_code":"dis", + "title":"Deleting Checkpoints", + "uri":"DeleteCheckpoint.html", + "doc_type":"api", + "p_code":"29", + "code":"32" + }, + { + "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":"dis", + "title":"Data Management", + "uri":"topic_300000003.html", + "doc_type":"api", + "p_code":"13", + "code":"33" + }, + { + "desc":"This API is used to upload data to DIS streams.POST /v2/{project_id}/recordsStatus code: 200Uploading DataNoneSee Error Codes.", + "product_code":"dis", + "title":"Uploading Data", + "uri":"dis_02_0018.html", + "doc_type":"api", + "p_code":"33", + "code":"34" + }, + { + "desc":"This API is used to download data from DIS streams.GET /v2/{project_id}/recordsStatus code: 200Downloading DataStatus code: 200Normal response.See Error Codes.", + "product_code":"dis", + "title":"Downloading Data", + "uri":"dis_02_0019.html", + "doc_type":"api", + "p_code":"33", + "code":"35" + }, + { + "desc":"This API is used to obtain data cursors.GET /v2/{project_id}/cursorsStatus code: 200Obtaining Data CursorsStatus code: 200Normal response.See Error Codes.", + "product_code":"dis", + "title":"Obtaining Data Cursors", + "uri":"dis_02_0020.html", + "doc_type":"api", + "p_code":"33", + "code":"36" + }, + { + "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":"dis", + "title":"Dump Task Management", + "uri":"topic_300000004.html", + "doc_type":"api", + "p_code":"13", + "code":"37" + }, + { + "desc":"This API is used to add OBS dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding OBS Dump TasksPOST https://{Endpoint}/v2/{project_id}/streams/", + "product_code":"dis", + "title":"Adding OBS Dump Tasks", + "uri":"dis_02_0410.html", + "doc_type":"api", + "p_code":"37", + "code":"38" + }, + { + "desc":"This API is used to query dump tasks.GET /v2/{project_id}/streams/{stream_name}/transfer-tasksStatus code: 200Querying Dump TasksStatus code: 200Normal response.See Error", + "product_code":"dis", + "title":"Querying Dump Tasks", + "uri":"ListTransferTasks.html", + "doc_type":"api", + "p_code":"37", + "code":"39" + }, + { + "desc":"This API is used to delete dump tasks.DELETE /v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}NoneDeleting Dump TasksNoneSee Error Codes.", + "product_code":"dis", + "title":"Deleting Dump Tasks", + "uri":"DeleteTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"40" + }, + { + "desc":"This API is used to query dump task details.GET /v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}Status code: 200Querying Dump Task DetailsStatus code: 20", + "product_code":"dis", + "title":"Querying Dump Task Details", + "uri":"ShowTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"41" + }, + { + "desc":"This API is used to start dump tasks in batches.POST /v2/{project_id}/streams/{stream_name}/transfer-tasks/actionNoneStarting Dump Tasks in BatchesNoneSee Error Codes.", + "product_code":"dis", + "title":"Starting Dump Tasks in Batches", + "uri":"BatchStartTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"42" + }, + { + "desc":"This API is used to pause dump tasks in batches.POST /v2/{project_id}/streams/{stream_name}/transfer-tasks/actionNonePausing Dump Tasks in BatchesNoneSee Error Codes.", + "product_code":"dis", + "title":"Pausing Dump Tasks in Batches", + "uri":"BatchStopTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"43" + }, + { + "desc":"This API is used to add DWS dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding DWS Dump TasksNoneSee Error Codes.", + "product_code":"dis", + "title":"Adding DWS Dump Tasks", + "uri":"CreateDwsTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"44" + }, + { + "desc":"This API is used to add MRS dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding MRS Dump TasksNoneSee Error Codes.", + "product_code":"dis", + "title":"Adding MRS Dump Tasks", + "uri":"CreateMrsTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"45" + }, + { + "desc":"This API is used to add DLI dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneNoneNoneSee Error Codes.", + "product_code":"dis", + "title":"Adding DLI Dump Tasks", + "uri":"CreateDliTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"46" + }, + { + "desc":"This API is used to add CloudTable dump tasks.POST /v2/{project_id}/streams/{stream_name}/transfer-tasksNoneAdding CloudTable HBase Dump TasksPOST https://{Endpoint}/v2/{", + "product_code":"dis", + "title":"Adding CloudTable Dump Tasks", + "uri":"CreateCloudTableTransferTask.html", + "doc_type":"api", + "p_code":"37", + "code":"47" + }, + { + "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":"dis", + "title":"Monitoring Management", + "uri":"topic_300000005.html", + "doc_type":"api", + "p_code":"13", + "code":"48" + }, + { + "desc":"This API is used to query the monitoring data of specified streams.GET /v2/{project_id}/streams/{stream_name}/metricsStatus code: 200Querying Stream Monitoring DataNoneSe", + "product_code":"dis", + "title":"Querying Stream Monitoring Data", + "uri":"ShowStreamMetrics.html", + "doc_type":"api", + "p_code":"48", + "code":"49" + }, + { + "desc":"This API is used to query the monitoring data of a specified partition of a stream.GET /v2/{project_id}/streams/{stream_name}/partitions/{partition_id}/metricsStatus code", + "product_code":"dis", + "title":"Querying Partition Monitoring Data", + "uri":"ShowPartitionMetrics.html", + "doc_type":"api", + "p_code":"48", + "code":"50" + }, + { + "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":"dis", + "title":"Tag Management", + "uri":"topic_300000006.html", + "doc_type":"api", + "p_code":"13", + "code":"51" + }, + { + "desc":"This API is used to add tags to specified streams.POST /v2/{project_id}/stream/{stream_id}/tagsNoneAdding Tags for Specified StreamsNoneSee Error Codes.", + "product_code":"dis", + "title":"Adding Tags for Specified Streams", + "uri":"CreateTag.html", + "doc_type":"api", + "p_code":"51", + "code":"52" + }, + { + "desc":"This API is used to query tags of specified streams.GET /v2/{project_id}/stream/{stream_id}/tagsStatus code: 200This API is used to query tags of specified streams.Status", + "product_code":"dis", + "title":"Querying Tags of Specified Streams", + "uri":"ShowStreamTags.html", + "doc_type":"api", + "p_code":"51", + "code":"53" + }, + { + "desc":"This API is used to delete tags of specified streams.DELETE /v2/{project_id}/stream/{stream_id}/tags/{key}NoneDeleting Tags of Specified StreamsNoneSee Error Codes.", + "product_code":"dis", + "title":"Deleting Tags of Specified Streams", + "uri":"DeleteTag.html", + "doc_type":"api", + "p_code":"51", + "code":"54" + }, + { + "desc":"This API is used to add resource tags (such as stream tags) in batches. The API is idempotent. When you are creating tags, if there are duplicate keys in the request body", + "product_code":"dis", + "title":"Adding Resource Tags in Batches", + "uri":"BatchCreateTags.html", + "doc_type":"api", + "p_code":"51", + "code":"55" + }, + { + "desc":"This API is used to query all tags of specified regions.GET /v2/{project_id}/stream/tagsStatus code: 200Querying Tags of Specified RegionsStatus code: 200Response body of", + "product_code":"dis", + "title":"Querying Tags of Specified Regions", + "uri":"ListTags.html", + "doc_type":"api", + "p_code":"51", + "code":"56" + }, + { + "desc":"This API is used to filter resources (streams) by tag.POST /v2/{project_id}/stream/resource_instances/actionStatus code: 200Resource (stream) filtering by tag and record ", + "product_code":"dis", + "title":"Using Tags to Filter Resources (Streams)", + "uri":"ListResourcesByTags.html", + "doc_type":"api", + "p_code":"51", + "code":"57" + }, + { + "desc":"This API is used to delete resource tags (stream tags) in batches. This API is idempotent. If the deleted tag does not exist, the deletion is considered successful by def", + "product_code":"dis", + "title":"Deleting Resource Tags in Batches", + "uri":"BatchDeleteTags.html", + "doc_type":"api", + "p_code":"51", + "code":"58" + }, + { + "desc":"This chapter describes fine-grained permissions management for your DIS. If your cloud account does not need individual IAM users, then you may skip over this chapter.By ", + "product_code":"dis", + "title":"Permissions Policies and Supported Actions", + "uri":"en-us_topic_0000001079240698.html", + "doc_type":"api", + "p_code":"", + "code":"59" + }, + { + "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":"dis", + "title":"Appendix", + "uri":"dis_02_0500.html", + "doc_type":"api", + "p_code":"", + "code":"60" + }, + { + "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":"dis", + "title":"Error Codes", + "uri":"ErrorCode.html", + "doc_type":"api", + "p_code":"60", + "code":"61" + }, + { + "desc":"A status code is an HTTPS response issued by DIS to indicate whether an API request has been successfully completed.", + "product_code":"dis", + "title":"Status Codes", + "uri":"dis_02_0022.html", + "doc_type":"api", + "p_code":"60", + "code":"62" + }, + { + "desc":"This section describes how to obtain a project ID on the console or by calling an API.", + "product_code":"dis", + "title":"Obtaining a Project ID", + "uri":"dis_02_0501.html", + "doc_type":"api", + "p_code":"60", + "code":"63" + }, + { + "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":"dis", + "title":"Change History", + "uri":"dis_02_0023.html", + "doc_type":"api", + "p_code":"", + "code":"64" + } +] \ No newline at end of file diff --git a/docs/dis/api-ref/CreateApp.html b/docs/dis/api-ref/CreateApp.html new file mode 100644 index 000000000..d9080a05c --- /dev/null +++ b/docs/dis/api-ref/CreateApp.html @@ -0,0 +1,116 @@ + + +

Creating Consumption Apps

+

Function

This API is used to create consumption apps.

+
+

URI

POST /v2/{project_id}/apps

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

app_name

+

Yes

+

String

+

Unique identifier of the consumer application to be created.

+

The application name contains 1 to 200 characters, including letters, digits, underscores (_), and hyphens (-).

+

Minimum: 1

+

Maximum: 200

+
+
+
+

Response Parameters

None

+
+

Example Requests

Creating Consumption Apps

+
POST https://{Endpoint}/v2/{project_id}/apps
+
+{
+  "app_name" : "newapp"
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/CreateCloudTableTransferTask.html b/docs/dis/api-ref/CreateCloudTableTransferTask.html new file mode 100644 index 000000000..6257feff4 --- /dev/null +++ b/docs/dis/api-ref/CreateCloudTableTransferTask.html @@ -0,0 +1,685 @@ + + +

Adding CloudTable Dump Tasks

+

Function

This API is used to add CloudTable dump tasks.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/transfer-tasks

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

destination_type

+

Yes

+

String

+

Dump destination. Possible values:

+
  • OBS: Data is dumped to OBS.
  • MRS: Data is dumped to MRS.
  • DLI: Data is dumped to DLI.
  • CLOUDTABLE: Data is dumped to CloudTable.
  • DWS: Data is dumped to DWS.
+

Default: NOWHERE

+

Enumeration values:

+
  • CLOUDTABLE
+

cloudtable_destination_descriptor

+

No

+

CloudtableDestinationDescriptorRequest object

+

Parameter list of the CloudTable to which data in the DIS stream will be dumped.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 CloudtableDestinationDescriptorRequest

Parameter

+

Mandatory

+

Type

+

Description

+

task_name

+

Yes

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

Yes

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Yes

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

No

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

cloudtable_cluster_name

+

Yes

+

String

+

Name of the CloudTable cluster to which data will be dumped.

+

If you choose to dump data to OpenTSDB, OpenTSDB must be enabled for the cluster.

+

cloudtable_cluster_id

+

Yes

+

String

+

ID of the CloudTable cluster to which data will be dumped.

+

If you choose to dump data to OpenTSDB, OpenTSDB must be enabled for the cluster.

+

cloudtable_table_name

+

No

+

String

+

HBase table name of the CloudTable cluster to which data will be dumped. The parameter is mandatory when data is dumped to the CloudTable HBase.

+

cloudtable_schema

+

No

+

CloudtableSchema object

+

Schema configuration of the CloudTable HBase data. You can set either this parameter or opentsdb_schema, but this parameter is mandatory when data will be dumped to HBase. After this parameter is set, the JSON data in the stream can be converted to another format and then be imported to the CloudTable HBase.

+

opentsdb_schema

+

No

+

Array of OpenTSDBSchema objects

+

Schema configuration of the CloudTable OpenTSDB data. You can set either this parameter or opentsdb_schema, but this parameter is mandatory when data will be dumped to OpenTSDB. After this parameter is set, the JSON data in the stream can be converted to another format and then be imported to the CloudTable OpenTSDB.

+

cloudtable_row_key_delimiter

+

No

+

String

+

Delimiter used to separate the user data that generates HBase row keys. Value range: , . | ; \ - _ and ~

+

Default value: .

+

obs_backup_bucket_path

+

No

+

String

+

Name of the OBS bucket used to back up data that failed to be dumped to CloudTable.

+

backup_file_prefix

+

No

+

String

+

Self-defined directory created in the OBS bucket and used to back up data that failed to be dumped to CloudTable. Directory levels are separated by slashes (/) and cannot start with slashes.

+

Value range: a string of letters, digits, and underscores (_)

+

The maximum length is 50 characters.

+

This parameter is left empty by default.

+

retry_duration

+

No

+

String

+

Time duration for DIS to retry if data fails to be dumped to CloudTable. If this threshold is exceeded, the data that fails to be dumped will be backed up to the OBS bucket/backup_file_prefix /cloudtable_error or OBS bucket/backup_file_prefix/opentsdb_error directory.

+

Value range: 0-7,200

+

Unit: second

+

Default value: 1,800

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 5 CloudtableSchema

Parameter

+

Mandatory

+

Type

+

Description

+

row_key

+

Yes

+

Array of RowKey objects

+

HBase rowkey schema used by the CloudTable cluster to convert JSON data into HBase rowkeys.

+

Value range: 1-64

+

columns

+

Yes

+

Array of Column objects

+

HBase column schema used by the CloudTable cluster to convert JSON data into HBase columns.

+

Value range: 1 to 4,096

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 6 RowKey

Parameter

+

Mandatory

+

Type

+

Description

+

value

+

Yes

+

String

+

JSON attribute name, which is used to generate HBase rowkeys for JSON data in the DIS stream.

+

type

+

Yes

+

String

+

JSON attribute type of JSON data in the DIS stream. Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

Enumeration values:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 Column

Parameter

+

Mandatory

+

Type

+

Description

+

column_family_name

+

Yes

+

String

+

Name of the HBase column family to which data will be dumped.

+

column_name

+

Yes

+

String

+

Name of the HBase column to which data will be dumped.

+

Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+

value

+

Yes

+

String

+

JSON attribute name, which is used to generate HBase column values for JSON data in the DIS stream.

+

type

+

Yes

+

String

+

JSON attribute type of JSON data in the DIS stream.

+

Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

Enumeration values:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 OpenTSDBSchema

Parameter

+

Mandatory

+

Type

+

Description

+

metric

+

Yes

+

Array of OpenTSDBMetric objects

+

Schema configuration of the OpenTSDB data metric in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the metric of the OpenTSDB data.

+

timestamp

+

Yes

+

OpenTSDBTimestamp object

+

Schema configuration of the OpenTSDB data timestamp in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the timestamp of the OpenTSDB data.

+

value

+

Yes

+

OpenTSDBValue object

+

Schema configuration of the OpenTSDB data value in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the value of the OpenTSDB data.

+

tags

+

Yes

+

Array of OpenTSDBTags objects

+

Schema configuration of the OpenTSDB data tags in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the tags of the OpenTSDB data.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 9 OpenTSDBMetric

Parameter

+

Mandatory

+

Type

+

Description

+

type

+

Yes

+

String

+
  • When type is set to Constant, the value of metric is the value of Value.
  • When value is set to String, the value of metric is the value of the JSON attribute of the user data in the stream.
+

Enumeration values:

+
  • Constant
  • String
+

value

+

Yes

+

String

+

Constant value or JSON attribute name of the user data in the stream. This value is 1 to 32 characters long. Only letters, digits, and periods (.) are allowed.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 10 OpenTSDBTimestamp

Parameter

+

Mandatory

+

Type

+

Description

+

type

+

Yes

+

String

+
  • When type is set to Timestamp, the value type of the JSON attribute of the user data in the stream is Timestamp, and the timestamp of OpenTSDB can be generated without converting the data format.
  • When type is set to String, the value type of the JSON attribute of the user data in the stream is Date, and the timestamp of OpenTSDB can be generated only after the data format is converted.
+

value

+

Yes

+

String

+

JSON attribute name of the user data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+

format

+

Yes

+

String

+

This parameter is mandatory when type is set to String. When the value type of the JSON attribute of the user data in the stream is Date, format is required to convert the data format to generate the timestamp of OpenTSDB.

+

Value range:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+

Enumeration values:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 11 OpenTSDBValue

Parameter

+

Mandatory

+

Type

+

Description

+

type

+

Yes

+

String

+

Dump destination. Possible values: Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

value

+

Yes

+

String

+

Constant value or JSON attribute name of the user data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 12 OpenTSDBTags

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Tag name of the OpenTSDB data that stores the data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+

type

+

Yes

+

String

+

Type name of the JSON attribute of the user data in the stream.

+

Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

value

+

Yes

+

String

+

Constant value or JSON attribute name of the user data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+
+
+
+

Response Parameters

None

+
+

Example Requests

  • Adding CloudTable HBase Dump Tasks
    POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks
    +
    +{
    +  "destination_type" : "CLOUDTABLE",
    +  "cloudtable_destination_descriptor" : {
    +    "task_name" : "hbasetask",
    +    "consumer_strategy" : "TRIM_HORIZON",
    +    "agency_name" : "dis_admin_agency",
    +    "cloudtable_cluster_name" : "cloudtablecluster",
    +    "cloudtable_cluster_id" : "b8c095e2-db5f-4732-8a1d-eacd662e35dc",
    +    "cloudtable_table_name" : "cloudtabletable",
    +    "cloudtable_row_key_delimiter" : "|",
    +    "retry_duration" : 1800,
    +    "obs_backup_bucket_path" : "obsbackupbucket",
    +    "backup_file_prefix" : "",
    +    "cloudtable_schema" : {
    +      "row_key" : [ {
    +        "value" : "datavalue",
    +        "type" : "String"
    +      } ],
    +      "columns" : [ {
    +        "column_family_name" : "cfname1",
    +        "column_name" : "ID",
    +        "value" : "datavalue1",
    +        "type" : "String"
    +      }, {
    +        "column_family_name" : "cfname2",
    +        "column_name" : "VALUE",
    +        "value" : "datavalue2",
    +        "type" : "String"
    +      } ]
    +    }
    +  }
    +}
    +
  • Adding CloudTable OpenTSDB Dump Tasks
    POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks
    +
    +{
    +  "destination_type" : "CLOUDTABLE",
    +  "cloudtable_destination_descriptor" : {
    +    "task_name" : "opentsdbtask",
    +    "consumer_strategy" : "LATEST",
    +    "agency_name" : "dis_admin_agency",
    +    "cloudtable_cluster_name" : "cloudtablecluster",
    +    "cloudtable_cluster_id" : "b8c095e2-db5f-4732-8a1d-eacd662e35dc",
    +    "retry_duration" : 1800,
    +    "obs_backup_bucket_path" : "obsbackupbucket",
    +    "backup_file_prefix" : "",
    +    "opentsdb_schema" : [ {
    +      "metric" : [ {
    +        "type" : "Constant",
    +        "value" : "age"
    +      } ],
    +      "timestamp" : {
    +        "value" : "date",
    +        "type" : "String",
    +        "format" : "yyyy/MM/dd HH:mm:ss"
    +      },
    +      "value" : {
    +        "value" : "value",
    +        "type" : "Bigint"
    +      },
    +      "tags" : [ {
    +        "name" : "name",
    +        "value" : "name",
    +        "type" : "Bigint"
    +      } ]
    +    } ]
    +  }
    +}
    +
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/CreateDliTransferTask.html b/docs/dis/api-ref/CreateDliTransferTask.html new file mode 100644 index 000000000..952e4e8d4 --- /dev/null +++ b/docs/dis/api-ref/CreateDliTransferTask.html @@ -0,0 +1,246 @@ + + +

Adding DLI Dump Tasks

+

Function

This API is used to add DLI dump tasks.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/transfer-tasks

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

destination_type

+

Yes

+

String

+

Dump destination. Possible values:

+
  • OBS: Data is dumped to OBS.
  • MRS: Data is dumped to MRS.
  • DLI: Data is dumped to DLI.
  • CLOUDTABLE: Data is dumped to CloudTable.
  • DWS: Data is dumped to DWS.
+

Default: NOWHERE

+

Enumeration values:

+
  • DLI
+

dli_destination_descriptor

+

No

+

DliDestinationDescriptorRequest object

+

Parameter list of the DLI to which data in the DIS stream will be dumped.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 DliDestinationDescriptorRequest

Parameter

+

Mandatory

+

Type

+

Description

+

task_name

+

Yes

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

Yes

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Yes

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

No

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

dli_database_name

+

Yes

+

String

+

Name of the DLI database to which data in the DIS stream will be dumped.

+

dli_table_name

+

Yes

+

String

+

Name of the DLI table to which data in the DIS stream will be dumped.

+

Note:

+

Only tables whose data location is DLI are supported, and you must have the permission to insert data into the tables.

+

obs_bucket_path

+

Yes

+

String

+

Name of the OBS bucket used to temporarily store data in the DIS stream.

+

file_prefix

+

No

+

String

+

Self-defined directory created in the OBS bucket and used to temporarily store data in the DIS stream. Directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

retry_duration

+

No

+

String

+

Time duration for DIS to retry if data fails to be dumped to DLI. If the retry time exceeds the value of this parameter, the data that fails to be dumped is backed up to the OBS bucket/file_prefix/dli_error directory. Value range: 0-7,200 Unit: second Default value: 1,800 If this parameter is set to 0, DIS does not retry when the dump fails.

+
+
+
+

Response Parameters

None

+
+

Example Requests

None

+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/CreateDwsTransferTask.html b/docs/dis/api-ref/CreateDwsTransferTask.html new file mode 100644 index 000000000..1789366f8 --- /dev/null +++ b/docs/dis/api-ref/CreateDwsTransferTask.html @@ -0,0 +1,445 @@ + + +

Adding DWS Dump Tasks

+

Function

This API is used to add DWS dump tasks.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/transfer-tasks

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

destination_type

+

Yes

+

String

+

Dump destination. Possible values:

+
  • OBS: Data is dumped to OBS.
  • MRS: Data is dumped to MRS.
  • DLI: Data is dumped to DLI.
  • CLOUDTABLE: Data is dumped to CloudTable.
  • DWS: Data is dumped to DWS.
+

Default: NOWHERE

+

Enumeration values:

+
  • DWS
+

dws_destination_descriptor

+

No

+

DWSDestinationDescriptorRequest object

+

Parameter list of the DWS to which data in the DIS stream will be dumped.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 DWSDestinationDescriptorRequest

Parameter

+

Mandatory

+

Type

+

Description

+

task_name

+

Yes

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

Yes

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Yes

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

No

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

dws_cluster_name

+

Yes

+

String

+

Name of the DWS cluster that stores the data in the stream.

+

dws_cluster_id

+

Yes

+

String

+

ID of the DWS cluster to which will be dumped.

+

dws_database_name

+

Yes

+

String

+

Name of the DWS database that stores the data in the stream.

+

dws_schema

+

Yes

+

String

+

Schema of the DWS database to which data will be dumped.

+

dws_table_name

+

Yes

+

String

+

Name of the DWS table that stores the data in the stream.

+

dws_delimiter

+

Yes

+

String

+

Delimiter used to separate the columns in the DWS tables.

+

The value can be a comma (,), semicolon (;), or vertical bar (|).

+

user_name

+

Yes

+

String

+

Username of the DWS database to which data will be dumped.

+

user_password

+

Yes

+

String

+

Password of the DWS database to which data will be dumped.

+

kms_user_key_name

+

Yes

+

String

+

Key created in Key Management Service (KMS) and used to encrypt the password of the DWS database.

+

kms_user_key_id

+

Yes

+

String

+

ID of the key created in KMS and used to encrypt the password of the DWS database.

+

obs_bucket_path

+

Yes

+

String

+

Name of the OBS bucket used to temporarily store data in the DIS stream.

+

file_prefix

+

No

+

String

+

Self-defined directory created in the OBS bucket and used to temporarily store data in the DIS stream. Directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

retry_duration

+

No

+

String

+

Duration when you can constantly retry dumping data to DWS after the dump fails. If the dump time exceeds the value of this parameter, the data that fails to be dumped to DWS will be backed up to the OBS bucket/file_prefix/dws_error directory.

+

Value range: 0-7,200

+

Unit: second

+

Default value: 1,800

+

dws_table_columns

+

No

+

String

+

Column to be dumped to the DWS table. If the value is null or empty, all columns are dumped by default. For example, c1,c2 indicates that columns c1 and c2 in the schema are dumped to DWS.

+

This parameter is left blank by default.

+

options

+

No

+

Options object

+

DWS fault tolerance option (used to specify various parameters of foreign table data).

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Options

Parameter

+

Mandatory

+

Type

+

Description

+

fill_missing_fields

+

No

+

String

+

Specifies whether to set the field to Null or enable an error message to be displayed in the error table when the last field in a row of the data source file is missing during database import.

+

Value range:

+
  • true/on
  • false/off
+

Default value: false/off

+

Enumeration values:

+
  • true/on
  • false/off
+

ignore_extra_data

+

No

+

String

+

Specifies whether to ignore excessive columns when the number of columns in a source data file exceeds that defined in the foreign table. This parameter is used only during data import.

+

Value range:

+
  • true/on
  • false/off
+

Default value: false/off

+

Enumeration values:

+
  • true/on
  • false/off
+

compatible_illegal_chars

+

No

+

String

+

Specifies whether to tolerate invalid characters during data import. Specifies whether to convert invalid characters based on the conversion rule and import them to the database, or to report an error and stop the import.

+

Value range:

+
  • true/on
  • false/off
+

Default value: false/off

+

Enumeration values:

+
  • true/on
  • false/off
+

reject_limit

+

No

+

String

+

Maximum number of data format errors allowed during the data import. If the number of data format errors does not reach the maximum, the data import is successful.

+

Value range:

+
  • integer
  • unlimited
+

Default value: 0, indicating that error information is returned immediately

+

error_table_name

+

No

+

String

+

Name of the error table that records data format errors. After the parallel import is complete, you can query the error information table to obtain the detailed error information.

+
+
+
+

Response Parameters

None

+
+

Example Requests

Adding DWS Dump Tasks

+
POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks
+
+{
+  "destination_type" : "DWS",
+  "dws_destination_descriptor" : {
+    "task_name" : "dwstask",
+    "consumer_strategy" : "LATEST",
+    "agency_name" : "dis_admin_agency",
+    "dws_cluster_name" : "dwscluster",
+    "dws_cluster_id" : "f82dc227-3691-47eb-bca7-e7851f509b2a",
+    "dws_database_name" : "postgres",
+    "dws_schema" : "dbadmin",
+    "dws_table_name" : "dwstablename",
+    "dws_delimiter" : "",
+    "user_name" : "dbadmin",
+    "user_password" : "userpassword",
+    "kms_user_key_name" : "kmskey",
+    "kms_user_key_id" : "1e759f06-9188-4d21-afab-a75e57c04d2b",
+    "obs_bucket_path" : "obsbucket",
+    "file_prefix" : "",
+    "deliver_time_interval" : 60,
+    "retry_duration" : 1800,
+    "options" : {
+      "fill_missing_fields" : "false",
+      "ignore_extra_data" : "false",
+      "compatible_illegal_chars" : "false"
+    }
+  }
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/CreateMrsTransferTask.html b/docs/dis/api-ref/CreateMrsTransferTask.html new file mode 100644 index 000000000..5a5411997 --- /dev/null +++ b/docs/dis/api-ref/CreateMrsTransferTask.html @@ -0,0 +1,287 @@ + + +

Adding MRS Dump Tasks

+

Function

This API is used to add MRS dump tasks.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/transfer-tasks

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

destination_type

+

Yes

+

String

+

Dump destination. Possible values:

+
  • OBS: Data is dumped to OBS.
  • MRS: Data is dumped to MRS.
  • DLI: Data is dumped to DLI.
  • CLOUDTABLE: Data is dumped to CloudTable.
  • DWS: Data is dumped to DWS.
+

Default: NOWHERE

+

Enumeration values:

+
  • MRS
+

mrs_destination_descriptor

+

No

+

MRSDestinationDescriptorRequest object

+

Parameter list of the MRS to which data in the DIS stream will be dumped.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 MRSDestinationDescriptorRequest

Parameter

+

Mandatory

+

Type

+

Description

+

task_name

+

Yes

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

Yes

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Yes

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

No

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

mrs_cluster_name

+

Yes

+

String

+

Name of the MRS cluster to which data in the DIS stream will be dumped.

+

Note:

+

Only MRS clusters with non-Kerberos authentication are supported.

+

mrs_cluster_id

+

Yes

+

String

+

ID of the MRS cluster to which data in the DIS stream will be dumped.

+

mrs_hdfs_path

+

Yes

+

String

+

Hadoop Distributed File System (HDFS) path of the MRS cluster to which data in the DIS stream will be dumped.

+

file_prefix

+

No

+

String

+

Self-defined directory created in the OBS bucket and used to temporarily store data in the DIS stream. Directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

hdfs_prefix_folder

+

No

+

String

+

Directory to store files that will be dumped to the chosen MRS cluster. Different directory levels are separated by slash (/). Value range: a string of 0 to 50 characters This parameter is left empty by default.

+

obs_bucket_path

+

Yes

+

String

+

Name of the OBS bucket used to temporarily store data in the DIS stream.

+

retry_duration

+

No

+

String

+

Time duration for DIS to retry if data fails to be dumped. If the retry time exceeds the value of this parameter, the data that fails to be dumped is backed up to the OBS bucket/file_prefix/mrs_error directory.

+

Value range: 0-7,200

+

Unit: second

+

Default value: 1,800

+

If this parameter is set to 0, DIS does not retry when the dump fails.

+
+
+
+

Response Parameters

None

+
+

Example Requests

Adding MRS Dump Tasks

+
POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks
+
+{
+  "destination_type" : "MRS",
+  "mrs_destination_descriptor" : {
+    "task_name" : "mrstask",
+    "consumer_strategy" : "LATEST",
+    "agency_name" : "dis_admin_agency",
+    "destination_file_type" : "text",
+    "mrs_cluster_id" : "f8123fa6-99f1-4ed9-83f4-c827c7277d41",
+    "mrs_cluster_name" : "mrscluster",
+    "mrs_hdfs_path" : "/user",
+    "obs_bucket_path" : "obsbucket",
+    "file_prefix" : "",
+    "hdfs_prefix_folder" : "",
+    "deliver_time_interval" : 30,
+    "retry_duration" : 1800
+  }
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/CreatePolicies.html b/docs/dis/api-ref/CreatePolicies.html new file mode 100644 index 000000000..51e211db9 --- /dev/null +++ b/docs/dis/api-ref/CreatePolicies.html @@ -0,0 +1,177 @@ + + +

Adding Permission Policies

+

Function

This API is used to add permission policies to specified streams.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/policies

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream for which you want to add an authorization policy.

+

Maximum: 64

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

stream_id

+

Yes

+

String

+

Unique ID of the stream.

+

principal_name

+

Yes

+

String

+

Authorized user.

+

If the permission is granted to a specified tenant, the format is domainName.*. If the permission is granted to a specified sub-user of a tenant, the format is domainName.userName.

+

Multiple accounts can be added and separated by commas (,), for example, domainName1.userName1,domainName2.userName2.

+

action_type

+

Yes

+

String

+

Authorization operation type.

+
  • putRecords: Upload data.

    +
  • getRecords: Download data.

    +
+

Enumeration values:

+
  • putRecords

    +
  • getRecords

    +
+

effect

+

Yes

+

String

+

Authorization impact type.

+
  • accept: The authorization operation is allowed.

    +
+

Enumeration values:

+
  • accept

    +
+
+
+
+

Response Parameters

None

+
+

Example Requests

  • Adding Permission Policies for Tenants

    +
    POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/policies
    +
    +{
    +  "stream_id" : "CiFdELMr0401K9GGZlp",
    +  "principal_name" : "domainname1",
    +  "action_type" : "putRecords",
    +  "effect" : "accept"
    +}
    +
  • Adding Permission Policies for Sub-users

    +
    POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/policies
    +
    +{
    +  "stream_id" : "CiFdELMr0401K9GGZlp",
    +  "principal_name" : "domainname1.username1",
    +  "action_type" : "putRecords",
    +  "effect" : "accept"
    +}
    +
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/CreateTag.html b/docs/dis/api-ref/CreateTag.html new file mode 100644 index 000000000..b1532c3f6 --- /dev/null +++ b/docs/dis/api-ref/CreateTag.html @@ -0,0 +1,170 @@ + + +

Adding Tags for Specified Streams

+

Function

This API is used to add tags to specified streams.

+
+

URI

POST /v2/{project_id}/stream/{stream_id}/tags

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_id

+

Yes

+

String

+

Stream ID.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

tag

+

Yes

+

Tag object

+

Label object.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 4 Tag

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

No

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Minimum: 1

+

Maximum: 36

+

value

+

No

+

String

+

Value.

+
  • The value contains a maximum of 43 characters.

    +
  • Character set: A-Z, a-z, 0-9, '. ', '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
  • The value can contain only digits, letters, hyphens (-), and underscores (_).

    +
+

Minimum: 0

+

Maximum: 43

+
+
+
+

Response Parameters

None

+
+

Example Requests

Adding Tags for Specified Streams

+
POST https://{Endpoint}/v2/{project_id}/stream/{stream_id}/tags
+
+{
+  "tag" : {
+    "key" : "key",
+    "value" : "value"
+  }
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/DeleteApp.html b/docs/dis/api-ref/DeleteApp.html new file mode 100644 index 000000000..174991310 --- /dev/null +++ b/docs/dis/api-ref/DeleteApp.html @@ -0,0 +1,95 @@ + + +

Deleting Apps

+

Function

This API is used to delete apps.

+
+

URI

DELETE /v2/{project_id}/apps/{app_name}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

app_name

+

Yes

+

String

+

Name of the app to be deleted.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

None

+
+

Example Requests

Deleting Apps

+
DELETE https://{Endpoint}/v2/{project_id}/apps/{app_name}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/DeleteCheckpoint.html b/docs/dis/api-ref/DeleteCheckpoint.html new file mode 100644 index 000000000..faf636dcd --- /dev/null +++ b/docs/dis/api-ref/DeleteCheckpoint.html @@ -0,0 +1,145 @@ + + +

Deleting Checkpoints

+

Function

This API is used to delete checkpoints.

+
+

URI

DELETE /v2/{project_id}/checkpoints

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

stream_name

+

Yes

+

String

+

Name of the stream to which the checkpoint belongs.

+

app_name

+

Yes

+

String

+

Name of the application associated with the checkpoint.

+

Minimum: 1

+

Maximum: 50

+

checkpoint_type

+

Yes

+

String

+

Type of the checkpoint. LAST_READ: Only sequence numbers are recorded in databases.

+

Enumeration values:

+
  • LAST_READ

    +
+

partition_id

+

No

+

String

+

Identifier of the stream partition to which the checkpoint belongs. The value can be in either of the following formats:

+
  • shardId-0000000000

    +
  • 0

    +
+

For example, if a stream has three partitions, the partition identifiers are 0, 1, and 2, and shardId-0000000000, shardId-0000000001, shardId-0000000002, respectively.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

None

+
+

Example Requests

Deleting Checkpoints

+
DELETE https://{Endpoint}/v2/{project_id}/checkpoints
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/DeleteStream.html b/docs/dis/api-ref/DeleteStream.html new file mode 100644 index 000000000..e9847842e --- /dev/null +++ b/docs/dis/api-ref/DeleteStream.html @@ -0,0 +1,96 @@ + + +

Deleting Specified Streams

+

Function

This API is used to delete specified streams.

+
+

URI

DELETE /v2/{project_id}/streams/{stream_name}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream to be deleted.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

None

+
+

Example Requests

Deleting Specified Streams

+
DELETE https://{Endpoint}/v2/{project_id}/streams/{stream_name}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/DeleteTag.html b/docs/dis/api-ref/DeleteTag.html new file mode 100644 index 000000000..5e47dc3bc --- /dev/null +++ b/docs/dis/api-ref/DeleteTag.html @@ -0,0 +1,104 @@ + + +

Deleting Tags of Specified Streams

+

Function

This API is used to delete tags of specified streams.

+
+

URI

DELETE /v2/{project_id}/stream/{stream_id}/tags/{key}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_id

+

Yes

+

String

+

Stream ID.

+

key

+

Yes

+

String

+

Tag key.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

None

+
+

Example Requests

Deleting Tags of Specified Streams

+
DELETE https://{Endpoint}/v2/{project_id}/stream/{stream_id}/tags/{key}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/DeleteTransferTask.html b/docs/dis/api-ref/DeleteTransferTask.html new file mode 100644 index 000000000..553c2db64 --- /dev/null +++ b/docs/dis/api-ref/DeleteTransferTask.html @@ -0,0 +1,104 @@ + + +

Deleting Dump Tasks

+

Function

This API is used to delete dump tasks.

+
+

URI

DELETE /v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

task_name

+

Yes

+

String

+

Name of the dump task to be deleted.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

None

+
+

Example Requests

Deleting Dump Tasks

+
DELETE https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ErrorCode.html b/docs/dis/api-ref/ErrorCode.html new file mode 100644 index 000000000..0ae44d234 --- /dev/null +++ b/docs/dis/api-ref/ErrorCode.html @@ -0,0 +1,619 @@ + + +

Error Codes

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

Status Code

+

Error Codes

+

Error Message

+

Description

+

Solution

+

400

+

DIS.4117

+

Invalid Project Id. %s

+

Invalid project ID.

+

Ensure that the project ID is valid.

+

400

+

DIS.4200

+

Invalid request. %s

+

Invalid request.

+

Ensure that the request is invalid by referring to API Reference

+

400

+

DIS.4201

+

Invalid partition_id. %s

+

Invalid partition ID.

+

Ensure that the partition ID is valid.

+

400

+

DIS.4202

+

Empty request.

+

The request is empty.

+

Enter a valid request.

+

400

+

DIS.4203

+

Invalid monitoring period. %s

+

The start time for querying the monitoring information is invalid.

+

Enter a valid timestamp.

+

400

+

DIS.4204

+

The monitoring period cannot be longer than 7 days.

+

Only the monitoring information generated in the recent seven days can be queried.

+

Query the monitoring information generated in the recent seven days.

+

400

+

DIS.4205

+

Stream is not running.

+

The stream is not in the running state.

+

Check the stream status.

+

400

+

DIS.4208

+

Mrs cluster is invalid. %s

+

The MRS cluster entered during MRS dump task creation is invalid.

+

Ensure that the MRS cluster name and ID are correct and the cluster is running in security mode.

+

400

+

DIS.4209

+

Invalid metrics label. %s

+

The monitoring metric entered during monitoring information query is invalid.

+

Check and modify the monitoring metric by referring to API Reference.

+

400

+

DIS.4215

+

Invalid cursor type. %s

+

The cursor type entered during data cursor acquisition is invalid.

+

Check and modify the cursor type by referring to API Reference.

+

400

+

DIS.4216

+

Invalid sequence_number. %s

+

The starting sequence number entered during data cursor acquisition is invalid.

+

Enter a valid starting sequence number.

+

400

+

DIS.4217

+

Invalid partition cursor. %s

+

The partition cursor entered during data download from DIS is invalid.

+

Obtain the partition cursor again and download the data.

+

400

+

DIS.4224

+

Sequence_number out of range. %s

+

The starting sequence number entered during data cursor acquisition is not in a valid range.

+

Enter a valid starting sequence number.

+

400

+

DIS.4225

+

Expired partition cursor. %s

+

The partition cursor entered during data download from DIS has expired.

+

Obtain the partition cursor again and download the data.

+

400

+

DIS.4226

+

A partition iterator error occurred or a record to which the SN corresponds has expired. Try to obtain the partition iterator again.

+

The starting sequence number of the partition cursor entered during data acquisition has expired.

+

Obtain the data cursor again and use the new cursor to obtain data.

+

400

+

DIS.4300

+

Request error.

+

Incorrect request body.

+

Modify the request body by referring to API Reference.

+

400

+

DIS.4301

+

The stream does not exist. %s

+

The stream does not exist.

+

Ensure that the stream exists.

+

400

+

DIS.4302

+

Partition does not exist. %s

+

The partition does not exist.

+

Ensure that the partition ID exists.

+

400

+

DIS.4303

+

Exceeded traffic control limit.

+

The flow control limit is exceeded.

+

Add the stream or reduce the upload rate.

+

400

+

DIS.4305

+

Too many stream requests.

+

An excessive number of user requests are generated at the same time.

+

Reduce the requesting frequency and try again.

+

400

+

DIS.4306

+

Bucket does not exist. %s

+

The OBS bucket does not exist.

+

Ensure that the OBS bucket exists.

+

400

+

DIS.4307

+

The stream already exists.

+

The stream already exists.

+

Enter a new stream name.

+

400

+

DIS.4308

+

Insufficient quota.

+

Insufficient stream or partition quotas.

+

Release the resources that will not be used to ensure that the quota limit is not exceeded or submit a service ticket to increase the quota limit.

+

400

+

DIS.4309

+

Too many request failures. Please try again later.

+

The IP address is added to the blacklist.

+

Ensure that the authentication information and request are valid and try again later.

+

400

+

DIS.4310

+

OBS access error.

+

OBS fails to be accessed.

+

Ensure that the user has permissions to access OBS.

+

400

+

DIS.4319

+

Partition is expired. %s

+

The partition has expired.

+

Use a correct and valid partition.

+

400

+

DIS.4329

+

app quota exceeded.

+

The application quota exceeds the limit.

+

Release the applications that are not used.

+

400

+

DIS.4330

+

app already exist.

+

An application with the same name already exists.

+

Enter a new application name.

+

400

+

DIS.4331

+

app is using.

+

The application fails to be deleted.

+

Ensure that the application that you want to delete is not being used.

+

400

+

DIS.4332

+

app not found.

+

The application does not exist.

+

Ensure that the application name is correct.

+

400

+

DIS.4335

+

Invalid IAM agency.

+

The IAM agency used during dump task creation is invalid.

+

Ensure that dis_admin_agency created by DIS or the user-defined IAM agency exists and permission is complete.

+

400

+

DIS.4336

+

Invalid HDFS path.

+

The MRS HDFS path entered during MRS dump task creation is invalid.

+

Ensure that the MRS HDFS path exists.

+

400

+

DIS.4337

+

The DLI database does not exist.

+

The DLI database entered during DLI dump task creation does not exist.

+

Ensure that the DLI database exists.

+

400

+

DIS.4338

+

The DLI table does not exist.

+

The DLI table entered during DLI dump task creation does not exist.

+

Ensure that the DLI table exists and is an internal table.

+

400

+

DIS.4339

+

Consumer quota exceeded.

+

The consumer quota of the consumer group is insufficient.

+

Allocate consumers properly or create a consumer group to meet the requirement.

+

400

+

DIS.4341

+

The CloudTable cluster does not exist.

+

The CloudTable cluster entered during CloudTable dump task creation does not exist.

+

Ensure that the CloudTable cluster exists and is running properly.

+

400

+

DIS.4342

+

The CloudTable table does not exist

+

The CloudTable table entered during CloudTable dump task creation does not exist.

+

Ensure that the CloudTable table exists.

+

400

+

DIS.4343

+

The CloudTable table family does not exist.

+

The CloudTable column family entered during CloudTable dump task creation does not exist.

+

Ensure that the CloudTable column family exists.

+

400

+

DIS.4345

+

Invalid CloudTable schema.

+

The schema entered during CloudTable dump task creation is invalid.

+

Check the schema based on the returned details to ensure that the configured JSON attribute name exists and the parameters are valid.

+

400

+

DIS.4348

+

Invalid CloudTable openTSDB schema.

+

The schema entered during CloudTable OpenTSDB dump task creation is invalid.

+

Check the schema based on the returned details to ensure that the configured JSON attribute name exists and the parameters are valid.

+

400

+

DIS.4350

+

Invalid DWS cluster.

+

The DWS cluster entered during DWS dump task creation does not exist.

+

Ensure that the DWS cluster exists and is running properly.

+

400

+

DIS.4351

+

Invalid KMS userKey.

+

The KMS key entered during DWS dump task creation is invalid.

+

Ensure that the KMS key exists.

+

400

+

DIS.4354

+

The transfer task does not exist.

+

The dump task to be deleted or updated does not exist.

+

Ensure that the dump task exists.

+

400

+

DIS.4355

+

The transfer task already exists.

+

A dump task with the same name already exists.

+

Enter a new dump task name.

+

400

+

DIS.4357

+

Exceeded transfer task quota.

+

A maximum of five dump tasks can be created for one stream at the same time.

+

Delete the discarded dump tasks and then add dump tasks again.

+

400

+

DIS.4360

+

Invalid data schema.

+

The data schema entered during stream creation or update is invalid.

+

Ensure that the data schema format is correct and try again.

+

400

+

DIS.4375

+

The app does not commit checkpoint

+

The application does not submit the checkpoint operation in the stream.

+

Check whether the application has submitted the checkpoint operation in the consumption stream.

+

400

+

DIS.4601

+

The number of resource tags has reached the maximum.

+

A maximum of 10 tags can be added to a resource.

+

Delete the discarded tags and then add tags again.

+

400

+

DIS.4602

+

Invalid resource type.

+

Invalid resource type.

+

Ensure that the resource type is valid.

+

400

+

DIS.4603

+

The resource does not exist.

+

The resource does not exist.

+

Ensure that the resource exists.

+

400

+

DIS.4604

+

The key does not exist.

+

The tag key does not exist.

+

Ensure that the tag key exists.

+

400

+

DIS.4605

+

The action is not supported.

+

The current tag operation is not supported.

+

Ensure that the current tag operation is valid. Currently, only the create and delete operations are supported.

+

403

+

DIS.4116

+

Invalid RBAC. %s

+

User operations are restricted.

+

Ensure that the account has passed real-name authentication, is not in arrears, or has permissions to operate DIS.

+

500

+

DIS.5000

+

System error.

+

System error.

+

Contact customer service or technical support to handle system errors.

+
+
+
+
+ +
diff --git a/docs/dis/api-ref/ListApp.html b/docs/dis/api-ref/ListApp.html new file mode 100644 index 000000000..a1120c140 --- /dev/null +++ b/docs/dis/api-ref/ListApp.html @@ -0,0 +1,231 @@ + + +

Querying Apps

+

Function

This API is used to query apps.

+
+

URI

GET /v2/{project_id}/apps

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

limit

+

No

+

Integer

+

Maximum number of apps to list in a single API call. Value range: 1-100 Default value: 10

+

Minimum: 1

+

Maximum: 100

+

Default: 10

+

start_app_name

+

No

+

String

+

Name of the app to start the list with. The returned app list does not contain this app name.

+

stream_name

+

No

+

String

+

Name of the stream whose apps will be returned.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

has_more_app

+

Boolean

+

Specifies whether there are more matching consumer applications to list.

+
  • true: yes

    +
  • false: no

    +
+

apps

+

Array of DescribeAppResult objects

+

AppEntry list that meets the current request.

+

total_number

+

Integer

+

Total number of apps that meet criteria.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 5 DescribeAppResult

Parameter

+

Type

+

Description

+

app_name

+

String

+

Name of the app.

+

app_id

+

String

+

Unique identifier of the app.

+

create_time

+

Long

+

Time when the app is created, in milliseconds.

+

commit_checkpoint_stream_names

+

Array of strings

+

List of associated streams.

+
+
+
+

Example Requests

Querying Apps

+
GET https://{Endpoint}/v2/{project_id}/apps
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "total_number" : 1,
+  "apps" : [ {
+    "app_id" : "bd6IPpvgiIflQPMpi9M",
+    "app_name" : "newstream",
+    "create_time" : 1593569685875
+  } ],
+  "has_more_app" : true
+}
+
+

Status Codes

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

Status Code

+

Description

+

200

+

Normal response.

+

400

+

Invalid Parameters

+

404

+

Application not found

+

500

+

Internal Server Error

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ListPolicies.html b/docs/dis/api-ref/ListPolicies.html new file mode 100644 index 000000000..06147eaa9 --- /dev/null +++ b/docs/dis/api-ref/ListPolicies.html @@ -0,0 +1,185 @@ + + +

Querying Permission Policies

+

Function

This API is used to query permission policies of specified streams.

+
+

URI

GET /v2/{project_id}/streams/{stream_name}/policies

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the DIS stream to be created.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

stream_id

+

String

+

Unique ID of the stream.

+

rules

+

Array of PrincipalRule objects

+

List of authorization information records.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 PrincipalRule

Parameter

+

Type

+

Description

+

principal

+

String

+

ID of the authorized user.

+

principal_name

+

String

+

Name of the authorized user.

+

If the permission is granted to all sub-users of a tenant, the format is domainName.*. If the permission is granted to a specified sub-user of a tenant, the format is domainName.userName.

+

action_type

+

String

+

Authorization operation type.

+
  • putRecords: Upload data.

    +
  • getRecords: Download data.

    +
+

Enumeration values:

+
  • putRecords

    +
  • getRecords

    +
+

effect

+

String

+

Authorization impact type.

+
  • accept: The authorization operation is allowed.

    +
+

Enumeration values:

+
  • accept

    +
+
+
+
+

Example Requests

Querying Permission Policies

+
GET https://{Endpoint}/v2/{project_id}/streams/{stream_name}/policies
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "streamId" : "CiFdELMr0401K9GGZlp",
+  "rules" : [ {
+    "action_type" : "putRecords",
+    "principal" : "3b3f237122574xxxxb74482ae11005ba.*",
+    "principal_name" : "anotherusername",
+    "effect" : "accept"
+  } ]
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ListResourcesByTags.html b/docs/dis/api-ref/ListResourcesByTags.html new file mode 100644 index 000000000..af6b1ae49 --- /dev/null +++ b/docs/dis/api-ref/ListResourcesByTags.html @@ -0,0 +1,374 @@ + + +

Using Tags to Filter Resources (Streams)

+

Function

This API is used to filter resources (streams) by tag.

+
+

URI

POST /v2/{project_id}/stream/resource_instances/action

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

action

+

Yes

+

String

+

Operation to be performed. The value can be only filter or count.

+
  • filter: queries data on multiple pages.

    +
  • count: queries the total number of data records. The total number of data records is returned based on the search criteria.

    +
+

Enumeration values:

+
  • filter

    +
  • count

    +
+

limit

+

No

+

String

+

Number of queried records. This parameter is not displayed if action is set to count. The default value is 1000 if action is set to filter. The value must be an integer ranging from 1 to 1000.

+

Default: 1000

+

offset

+

No

+

String

+

Index position. The query starts from the next data record indexed by this parameter. When querying data on the first page, you do not need to pass this parameter. When querying data on subsequent pages, set this parameter to the value in the response body returned by querying data of the previous page. This parameter is not displayed when action is set to count. If action is set to filter, the value defaults to 0. The value must be a positive integer.

+

tags

+

No

+

Array of Tags objects

+

The return result contains resources corresponding to all tags in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string.

+

tags_any

+

No

+

Array of Tags objects

+

The return result contains resources corresponding to any tag in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string. Keys and the values of a key must be unique.

+

not_tags

+

No

+

Array of Tags objects

+

The return result does not contain resources corresponding to all tags in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string. Keys and the values of a key must be unique.

+

not_tags_any

+

No

+

Array of Tags objects

+

The return result does not contain resources corresponding to any tag in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string. Keys must be unique and values of a key must be unique.

+

matches

+

No

+

String

+

Search criteria. The tag key is the field to match. Currently, only resource_name is supported. value indicates the matched value. This field is a fixed dictionary value.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 4 Tags

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

No

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Maximum: 36

+

values

+

No

+

Array of strings

+

Tag value list.

+

If values are null, it indicates any_value. The relationship between values is OR.

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

action

+

String

+

Operation to be performed. The value can be only filter or count.

+
  • filter: queries data on multiple pages.

    +
  • count: queries the total number of data records. The total number of data records is returned based on the search criteria.

    +
+

Enumeration values:

+
  • filter

    +
  • count

    +
+

limit

+

String

+

Number of queried records. This parameter is not displayed if action is set to count. The default value is 1000 if action is set to filter. The value must be an integer ranging from 1 to 1000.

+

Default: 1000

+

offset

+

String

+

Index position. The query starts from the next data record indexed by this parameter. When querying data on the first page, you do not need to pass this parameter. When querying data on subsequent pages, set this parameter to the value in the response body returned by querying data of the previous page. This parameter is not displayed when action is set to count. If action is set to filter, the value defaults to 0. The value must be a positive integer.

+

tags

+

Array of Tags objects

+

The return result contains resources corresponding to all tags in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string.

+

tags_any

+

Array of Tags objects

+

The return result contains resources corresponding to any tag in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string. Keys and the values of a key must be unique.

+

not_tags

+

Array of Tags objects

+

The return result does not contain resources corresponding to all tags in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string. Keys and the values of a key must be unique.

+

not_tags_any

+

Array of Tags objects

+

The return result does not contain resources corresponding to any tag in this parameter. This parameter contains a maximum of 10 keys, and each key contains a maximum of 10 values. The structure body cannot be missing, and the key cannot be left blank or set to an empty string. Keys must be unique and values of a key must be unique.

+

matches

+

String

+

Search criteria. The tag key is the field to match. Currently, only resource_name is supported. value indicates the matched value. This field is a fixed dictionary value.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 Tags

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Maximum: 36

+

values

+

Array of strings

+

Tag value list.

+

If values are null, it indicates any_value. The relationship between values is OR.

+
+
+
+

Example Requests

  • Resource (stream) filtering by tag and record querying

    +
    POST https://{Endpoint}/v2/{project_id}/stream/resource_instances/action
    +
    +{
    +  "action" : "count",
    +  "tags" : [ {
    +    "key" : "key1",
    +    "values" : [ "value1", "value2" ]
    +  }, {
    +    "key" : "key2",
    +    "values" : [ "value1", "value2" ]
    +  } ],
    +  "matches" : [ {
    +    "key" : "resource_name",
    +    "value" : "resource1"
    +  } ]
    +}
    +
  • Resource (stream) filtering by tag and querying by page.

    +
    POST https://{Endpoint}/v2/{project_id}/stream/resource_instances/action
    +
    +{
    +  "offset" : "0",
    +  "limit" : "100",
    +  "action" : "filter",
    +  "matches" : [ {
    +    "key" : "resource_name",
    +    "value" : "resource1"
    +  } ],
    +  "tags" : [ {
    +    "key" : "key1",
    +    "values" : [ "*value1", "value2" ]
    +  } ]
    +}
    +
+
+

Example Responses

Status code: 200

+

Request body for filtering resources (streams) by tag.

+
{
+  "resources" : [ {
+    "resource_detail" : null,
+    "resource_id" : "cdfs_cefs_wesas_12_dsad",
+    "resource_name" : "resouece1",
+    "tags" : [ {
+      "key" : "key1",
+      "value" : "value1"
+    }, {
+      "key" : "key2",
+      "value" : "value1"
+    } ]
+  } ],
+  "total_count" : 1000
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Request body for filtering resources (streams) by tag.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ListTags.html b/docs/dis/api-ref/ListTags.html new file mode 100644 index 000000000..65956514b --- /dev/null +++ b/docs/dis/api-ref/ListTags.html @@ -0,0 +1,147 @@ + + +

Querying Tags of Specified Regions

+

Function

This API is used to query all tags of specified regions.

+
+

URI

GET /v2/{project_id}/stream/tags

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

tags

+

Array of Tags objects

+

Tag list.

+
+
+ +
+ + + + + + + + + + + + + +
Table 4 Tags

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Maximum: 36

+

values

+

Array of strings

+

Tag value list.

+

If values are null, it indicates any_value. The relationship between values is OR.

+
+
+
+

Example Requests

Querying Tags of Specified Regions

+
GET https://{Endpoint}/v2/{project_id}/stream/tags
+
+

Example Responses

Status code: 200

+

Response body of the tag set.

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

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Response body of the tag set.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ListTransferTasks.html b/docs/dis/api-ref/ListTransferTasks.html new file mode 100644 index 000000000..b8093d887 --- /dev/null +++ b/docs/dis/api-ref/ListTransferTasks.html @@ -0,0 +1,216 @@ + + +

Querying Dump Tasks

+

Function

This API is used to query dump tasks.

+
+

URI

GET /v2/{project_id}/streams/{stream_name}/transfer-tasks

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream to be queried.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

total_number

+

Integer

+

Total number of dump tasks.

+

quota

+

Integer

+

Maximum number of dump tasks that can be created.

+

tasks

+

Array of TransferTask objects

+

List of dump tasks.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 TransferTask

Parameter

+

Type

+

Description

+

task_name

+

String

+

Name of the dump task.

+

state

+

String

+

Dump task status. Possible values:

+
  • ERROR: An error occurs.

    +
  • STARTING: The dump task is being started.

    +
  • PAUSED: The dump task has been stopped.

    +
  • RUNNING: The dump task is running.

    +
  • DELETE: The dump task has been deleted.

    +
  • ABNORMAL: The dump task is abnormal.

    +
+

Enumeration values:

+
  • ERROR

    +
  • STARTING

    +
  • PAUSED

    +
  • RUNNING

    +
  • DELETE

    +
  • ABNORMAL

    +
+

destination_type

+

String

+

Dump destination. Possible values:

+
  • OBS: Data is dumped to OBS.

    +
  • MRS: Data is dumped to MRS.

    +
  • DLI: Data is dumped to DLI.

    +
  • CLOUDTABLE: Data is dumped to CloudTable.

    +
  • DWS: Data is dumped to DWS.

    +
+

Enumeration values:

+
  • OBS

    +
  • MRS

    +
  • DLI

    +
  • CLOUDTABLE

    +
  • DWS

    +
+

create_time

+

Long

+

Time when the dump task is created.

+

last_transfer_timestamp

+

Long

+

Latest dump time of the dump task.

+
+
+
+

Example Requests

Querying Dump Tasks

+
GET https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "tasks" : [ {
+    "task_id" : "As805BudhcH1lDs6gbn",
+    "destination_type" : "OBS",
+    "task_name" : "newtask",
+    "create_time" : 1606554932552,
+    "state" : "RUNNING",
+    "last_transfer_timestamp" : 1606984428612
+  } ],
+  "total_number" : 1
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/PARAMETERS.txt b/docs/dis/api-ref/PARAMETERS.txt new file mode 100644 index 000000000..6da8d5f07 --- /dev/null +++ b/docs/dis/api-ref/PARAMETERS.txt @@ -0,0 +1,3 @@ +version="" +language="en-us" +type="" \ No newline at end of file diff --git a/docs/dis/api-ref/ShowApp.html b/docs/dis/api-ref/ShowApp.html new file mode 100644 index 000000000..541a907a2 --- /dev/null +++ b/docs/dis/api-ref/ShowApp.html @@ -0,0 +1,142 @@ + + +

Querying App Details

+

Function

This API is used to query app details.

+
+

URI

GET /v2/{project_id}/apps/{app_name}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

app_name

+

Yes

+

String

+

Name of the app to be queried.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

app_name

+

String

+

Name of the app.

+

app_id

+

String

+

Unique identifier of the app.

+

create_time

+

Long

+

Time when the app is created, in milliseconds.

+

commit_checkpoint_stream_names

+

Array of strings

+

List of associated streams.

+
+
+
+

Example Requests

Querying App Details

+
GET https://{Endpoint}/v2/{project_id}/apps/{app_name}
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "app_id" : "bd6IPpvgiIflQPMpi9M",
+  "app_name" : "newstream",
+  "create_time" : 1593569685875,
+  "commit_checkpoint_stream_names" : [ "newstream" ]
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ShowCheckpoint.html b/docs/dis/api-ref/ShowCheckpoint.html new file mode 100644 index 000000000..341734260 --- /dev/null +++ b/docs/dis/api-ref/ShowCheckpoint.html @@ -0,0 +1,176 @@ + + +

Querying Checkpoint Details

+

Function

This API is used to query checkpoint details.

+
+

URI

GET /v2/{project_id}/checkpoints

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

stream_name

+

Yes

+

String

+

Name of the stream to which the checkpoint belongs.

+

partition_id

+

Yes

+

String

+

Identifier of the stream partition to which the checkpoint belongs. The value can be in either of the following formats:

+
  • shardId-0000000000

    +
  • 0

    +
+

For example, if a stream has three partitions, the partition identifiers are 0, 1, and 2, or shardId-0000000000, shardId-0000000001, and shardId-0000000002, respectively.

+

app_name

+

Yes

+

String

+

Name of the app associated with the checkpoint.

+

checkpoint_type

+

Yes

+

String

+

Type of the checkpoint.

+
  • LAST_READ: Only sequence numbers are recorded in databases.

    +
+

Enumeration values:

+
  • LAST_READ

    +
+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 204

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

sequence_number

+

String

+

Sequence number used to record the consumption checkpoint of the stream.

+

metadata

+

String

+

Metadata information of the consumer application.

+
+
+
+

Example Requests

Querying Checkpoint Details

+
GET https://{Endpoint}/v2/{project_id}/checkpoints
+
+

Example Responses

Status code: 204

+

Normal response.

+
{
+  "sequence_number" : "newstram",
+  "metadata" : ""
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ShowConsumerState.html b/docs/dis/api-ref/ShowConsumerState.html new file mode 100644 index 000000000..02af4c12c --- /dev/null +++ b/docs/dis/api-ref/ShowConsumerState.html @@ -0,0 +1,206 @@ + + +

Querying App Consumption Status

+

Function

This API is used to query the consumption status of apps.

+
+

URI

GET /v2/{project_id}/apps/{app_name}/streams/{stream_name}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

app_name

+

Yes

+

String

+

Name of the app to be queried.

+

stream_name

+

Yes

+

String

+

Name of the stream to be queried.

+

Maximum: 60

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

limit

+

No

+

Integer

+

Max. number of partitions to list in a single API call. The minimum value is 1 and the maximum value is 1,000. The default value is 100.

+

Minimum: 1

+

Maximum: 1000

+

Default: 100

+

start_partition_id

+

No

+

String

+

Name of the partition to start the partition list with. The returned partition list does not contain this partition.

+

checkpoint_type

+

Yes

+

String

+

Type of the checkpoint.

+
  • LAST_READ: Only sequence numbers are recorded in databases.

    +
+

Enumeration values:

+
  • LAST_READ

    +
+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

app_name

+

String

+

Name of the app.

+

app_id

+

String

+

Unique identifier of the app.

+

create_time

+

Long

+

Time when the app is created, in milliseconds.

+

commit_checkpoint_stream_names

+

Array of strings

+

List of associated streams.

+
+
+
+

Example Requests

Querying App Consumption Status

+
GET https://{Endpoint}/v2/{project_id}/apps/{app_name}/streams/{stream_name}
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "stream_name" : "newstream",
+  "app_name" : "newapp",
+  "partition_consuming_states" : [ {
+    "partition_id" : "2",
+    "sequence_number" : "485",
+    "latest_offset" : "1000",
+    "earliest_offset" : "10",
+    "checkpoint_type" : "LAST_READ"
+  } ]
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ShowPartitionMetrics.html b/docs/dis/api-ref/ShowPartitionMetrics.html new file mode 100644 index 000000000..7edb09008 --- /dev/null +++ b/docs/dis/api-ref/ShowPartitionMetrics.html @@ -0,0 +1,241 @@ + + +

Querying Partition Monitoring Data

+

Function

This API is used to query the monitoring data of a specified partition of a stream.

+
+

URI

GET /v2/{project_id}/streams/{stream_name}/partitions/{partition_id}/metrics

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+

partition_id

+

Yes

+

String

+

Partition No. The value can be in either of the following formats:

+
  • shardId-0000000000

    +
  • 0

    +
+

For example, if a stream has three partitions, the partition identifiers are 0, 1, and 2, or shardId-0000000000, shardId-0000000001, and shardId-0000000002, respectively.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

label

+

No

+

String

+

Partition monitoring metric. (Either label or label_list must be specified. If both label_list and label are specified, label_list prevails.)

+
  • total_put_bytes_per_partition: total input traffic of the partition (byte)

    +
  • total_get_bytes_per_partition: total output traffic of the partition (byte)

    +
  • total_put_records_per_partition: total number of input records of the partition

    +
  • total_get_records_per_partition: total number of output records of the partition

    +
+

Enumeration values:

+
  • total_put_bytes_per_partition

    +
  • total_get_bytes_per_partition

    +
  • total_put_records_per_partition

    +
  • total_get_records_per_partition

    +
+

label_list

+

No

+

String

+

List of labels separated by commas (,) to query multiple labels in batches. (Either label or label_list must be specified. If both label_list and label exist, label_list prevails.)

+

start_time

+

Yes

+

Long

+

Monitoring start time, which is a 10-digit timestamp.

+

end_time

+

Yes

+

String

+

Monitoring end time, which is a 10-digit timestamp.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

metrics

+

Metrics object

+

Data object.

+
+
+ +
+ + + + + + + + + + + + + +
Table 5 Metrics

Parameter

+

Type

+

Description

+

dataPoints

+

Array of DataPoint objects

+

Monitoring data.

+

label

+

String

+

Metric.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 DataPoint

Parameter

+

Type

+

Description

+

timestamp

+

Long

+

Timestamp.

+

value

+

Long

+

Monitoring value corresponding to the timestamp.

+
+
+
+

Example Requests

Querying Partition Monitoring Data

+
GET https://{Endpoint}/v2/{project_id}/streams/{stream_name}/partitions/{partition_id}/metrics
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ShowStreamMetrics.html b/docs/dis/api-ref/ShowStreamMetrics.html new file mode 100644 index 000000000..320110e36 --- /dev/null +++ b/docs/dis/api-ref/ShowStreamMetrics.html @@ -0,0 +1,247 @@ + + +

Querying Stream Monitoring Data

+

Function

This API is used to query the monitoring data of specified streams.

+
+

URI

GET /v2/{project_id}/streams/{stream_name}/metrics

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

label

+

No

+

String

+

Stream monitoring metric. (Either label or label_list must be specified. If both label_list and label are specified, label_list prevails.)

+
  • total_put_bytes_per_stream: total input traffic (byte)

    +
  • total_get_bytes_per_stream: total output traffic (byte)

    +
  • total_put_records_per_stream: total number of input records

    +
  • total_get_records_per_stream: total number of output records

    +
  • total_put_req_latency: average processing time of upload requests (millisecond)

    +
  • total_get_req_latency: average processing time of download requests (millisecond)

    +
  • total_put_req_suc_per_stream: number of successful upload requests

    +
  • total_get_req_suc_per_stream: number of successful download requests

    +
  • traffic_control_put: number of rejected upload requests due to flow control

    +
  • traffic_control_get: number of rejected download requests due to flow control

    +
+

Enumeration values:

+
  • total_put_bytes_per_stream

    +
  • total_get_bytes_per_stream

    +
  • total_put_records_per_stream

    +
  • total_get_records_per_stream

    +
  • total_put_req_latency

    +
  • total_get_req_latency

    +
  • total_put_req_suc_per_stream

    +
  • total_get_req_suc_per_stream

    +
  • traffic_control_put

    +
  • traffic_control_get

    +
+

label_list

+

No

+

String

+

List of labels separated by commas (,) to query multiple labels in batches. (Either label or label_list must be set. If both label_list and label exist, label_list prevails.)

+

start_time

+

Yes

+

Long

+

Monitoring start time, which is a 10-digit timestamp.

+

end_time

+

Yes

+

Long

+

Monitoring end time, which is a 10-digit timestamp.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

metrics

+

Metrics object

+

Data object.

+

metrics_list

+

Array of Metrics objects

+

List of monitored data objects.

+
+
+ +
+ + + + + + + + + + + + + +
Table 5 Metrics

Parameter

+

Type

+

Description

+

dataPoints

+

Array of DataPoint objects

+

Monitoring data.

+

label

+

String

+

Metric.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 DataPoint

Parameter

+

Type

+

Description

+

timestamp

+

Long

+

Timestamp.

+

value

+

Long

+

Monitoring value corresponding to the timestamp.

+
+
+
+

Example Requests

Querying Stream Monitoring Data

+
GET https://{Endpoint}/v2/{project_id}/streams/{stream_name}/metrics
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ShowStreamTags.html b/docs/dis/api-ref/ShowStreamTags.html new file mode 100644 index 000000000..aaeadd1b9 --- /dev/null +++ b/docs/dis/api-ref/ShowStreamTags.html @@ -0,0 +1,162 @@ + + +

Querying Tags of Specified Streams

+

Function

This API is used to query tags of specified streams.

+
+

URI

GET /v2/{project_id}/stream/{stream_id}/tags

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_id

+

Yes

+

String

+

Stream ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

tags

+

Array of Tag objects

+

Label list.

+
+
+ +
+ + + + + + + + + + + + + +
Table 4 Tag

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Minimum: 1

+

Maximum: 36

+

value

+

String

+

Value.

+
  • The value contains a maximum of 43 characters.

    +
  • Character set: A-Z, a-z, 0-9, '. ', '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
  • The value can contain only digits, letters, hyphens (-), and underscores (_).

    +
+

Minimum: 0

+

Maximum: 43

+
+
+
+

Example Requests

This API is used to query tags of specified streams.

+
GET https://{Endpoint}/v2/{project_id}/stream/{stream_id}/tags
+
+

Example Responses

Status code: 200

+

Response body of the stream tag information.

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

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Response body of the stream tag information.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/ShowTransferTask.html b/docs/dis/api-ref/ShowTransferTask.html new file mode 100644 index 000000000..22dfadb51 --- /dev/null +++ b/docs/dis/api-ref/ShowTransferTask.html @@ -0,0 +1,1278 @@ + + +

Querying Dump Task Details

+

Function

This API is used to query dump task details.

+
+

URI

GET /v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

task_name

+

Yes

+

String

+

Name of the dump task to be deleted.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

stream_name

+

String

+

Name of the stream to which the dump task belongs.

+

task_name

+

String

+

Name of the dump task.

+

state

+

String

+

Dump task status. Possible values:

+
  • ERROR: An error occurs.
  • STARTING: The dump task is being started.
  • PAUSED: The dump task has been stopped.
  • RUNNING: The dump task is running.
  • DELETE: The dump task has been deleted.
  • ABNORMAL: The dump task is abnormal.
+

Enumeration values:

+
  • ERROR
  • STARTING
  • PAUSED
  • RUNNING
  • DELETE
  • ABNORMAL
+

destination_type

+

String

+

Dump destination. Possible values:

+
  • OBS: Data is dumped to OBS.
  • MRS: Data is dumped to MRS.
  • DLI: Data is dumped to DLI.
  • CLOUDTABLE: Data is dumped to CloudTable.
  • DWS: Data is dumped to DWS.
+

Enumeration values:

+
  • OBS
  • MRS
  • DLI
  • CLOUDTABLE
  • DWS
+

create_time

+

Long

+

Time when the dump task is created.

+

last_transfer_timestamp

+

Long

+

Latest dump time of the dump task.

+

partitions

+

Array of PartitionResult objects

+

List of partition dump details.

+

obs_destination_description

+

OBSDestinationDescriptorRequest object

+

Parameter list of OBS to which data in the DIS stream will be dumped.

+

dws_destination_descripton

+

DWSDestinationDescriptorRequest object

+

Parameter list of the DWS to which data in the DIS stream will be dumped.

+

mrs_destination_description

+

MRSDestinationDescriptorRequest object

+

Parameter list of the MRS to which data in the DIS stream will be dumped.

+

dli_destination_description

+

DliDestinationDescriptorRequest object

+

Parameter list of the DLI to which data in the DIS stream will be dumped.

+

cloudtable_destination_descripton

+

CloudtableDestinationDescriptorRequest object

+

Parameter list of the CloudTable to which data in the DIS stream will be dumped.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 PartitionResult

Parameter

+

Type

+

Description

+

status

+

String

+

Current status of the partition. Possible values:

+
  • CREATING: The stream is being created.
  • ACTIVE: The stream is available.
  • DELETED: The stream is being deleted.
  • EXPIRED: The stream has expired.
+

Enumeration values:

+
  • CREATING
  • ACTIVE
  • DELETED
  • EXPIRED
+

partition_id

+

String

+

Unique identifier of the partition.

+

hash_range

+

String

+

Possible value range of the hash key used by the partition.

+

sequence_number_range

+

String

+

Sequence number range of the partition.

+

parent_partitions

+

String

+

Parent partition.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 OBSDestinationDescriptorRequest

Parameter

+

Type

+

Description

+

task_name

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

file_prefix

+

String

+

Directory to store files that will be dumped to OBS. Different directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

Maximum: 50

+

partition_format

+

String

+

Directory structure of the object file written into OBS. The directory structure is in the format of yyyy/MM/dd/HH/mm (time at which the dump task was created).

+
  • N/A: Leave this parameter empty, indicating that the date and time directory is not used.
  • yyyy: year
  • yyyy/MM: year/month
  • yyyy/MM/dd: year/month/day
  • yyyy/MM/dd/HH: year/month/day/hour
  • yyyy/MM/dd/HH/mm: year/month/day/hour/minute
+

Example: in 2017/11/10/14/49, the directory structure is 2017 > 11 > 10 > 14 > 49. 2017 indicates the outermost folder.

+

Default value: empty.

+

Note:

+

After data is successfully dumped, the directory structure is obs_bucket_path/file_prefix/partition_format.

+

Enumeration values:

+
  • yyyy
  • yyyy/MM
  • yyyy/MM/dd
  • yyyy/MM/dd/HH
  • yyyy/MM/dd/HH/mm
+

obs_bucket_path

+

String

+

Name of the OBS bucket used to store data from the DIS stream.

+

destination_file_type

+

String

+

Dump file format. Possible values:

+
  • Text (default)
  • Parquet
  • CarbonData
+

Note:

+

You can select Parquet or CarbonData only when Source Data Type is set to JSON and Dump Destination is set to OBS.

+

Default: text

+

Enumeration values:

+
  • text
  • parquet
  • carbon
+

processing_schema

+

ProcessingSchema object

+

Dump time directory generated based on the timestamp of the source data and the configured partition_format. Directory structure of the object file written into OBS. The directory structure is in the format of yyyy/MM/dd/HH/mm.

+

record_delimiter

+

String

+

Delimiter for the dump file, which is used to separate the user data that is written into the dump file.

+

Value range:

+
  • Comma (,), which is the default value
  • Semicolon (;)
  • Vertical bar (|)
  • Newline character (\n)
+

Default: \n

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 6 ProcessingSchema

Parameter

+

Type

+

Description

+

timestamp_name

+

String

+

Attribute name of the source data timestamp.

+

timestamp_type

+

String

+

Type of the source data timestamp.

+
  • String
  • Timestamp: 13-bit timestamp of the long type
+

timestamp_format

+

String

+

OBS directory generated based on the timestamp format. This parameter is mandatory when the timestamp type of the source data is String.

+

Value range:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+

Enumeration values:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 DWSDestinationDescriptorRequest

Parameter

+

Type

+

Description

+

task_name

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

dws_cluster_name

+

String

+

Name of the DWS cluster that stores the data in the stream.

+

dws_cluster_id

+

String

+

ID of the DWS cluster to which will be dumped.

+

dws_database_name

+

String

+

Name of the DWS database that stores the data in the stream.

+

dws_schema

+

String

+

Schema of the DWS database to which data will be dumped.

+

dws_table_name

+

String

+

Name of the DWS table that stores the data in the stream.

+

dws_delimiter

+

String

+

Delimiter used to separate the columns in the DWS tables.

+

The value can be a comma (,), semicolon (;), or vertical bar (|).

+

user_name

+

String

+

Username of the DWS database to which data will be dumped.

+

user_password

+

String

+

Password of the DWS database to which data will be dumped.

+

kms_user_key_name

+

String

+

Key created in Key Management Service (KMS) and used to encrypt the password of the DWS database.

+

kms_user_key_id

+

String

+

ID of the key created in KMS and used to encrypt the password of the DWS database.

+

obs_bucket_path

+

String

+

Name of the OBS bucket used to temporarily store data in the DIS stream.

+

file_prefix

+

String

+

Self-defined directory created in the OBS bucket and used to temporarily store data in the DIS stream. Directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

retry_duration

+

String

+

Duration when you can constantly retry dumping data to DWS after the dump fails. If the dump time exceeds the value of this parameter, the data that fails to be dumped to DWS will be backed up to the OBS bucket/file_prefix/dws_error directory.

+

Value range: 0-7,200

+

Unit: second

+

Default value: 1,800

+

dws_table_columns

+

String

+

Column to be dumped to the DWS table. If the value is null or empty, all columns are dumped by default. For example, c1,c2 indicates that columns c1 and c2 in the schema are dumped to DWS.

+

This parameter is left blank by default.

+

options

+

Options object

+

DWS fault tolerance option (used to specify various parameters of foreign table data).

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8 Options

Parameter

+

Type

+

Description

+

fill_missing_fields

+

String

+

Specifies whether to set the field to Null or enable an error message to be displayed in the error table when the last field in a row of the data source file is missing during database import.

+

Value range:

+
  • true/on
  • false/off
+

Default value: false/off

+

Enumeration values:

+
  • true/on
  • false/off
+

ignore_extra_data

+

String

+

Specifies whether to ignore excessive columns when the number of columns in a source data file exceeds that defined in the foreign table. This parameter is used only during data import.

+

Value range:

+
  • true/on
  • false/off
+

Default value: false/off

+

Enumeration values:

+
  • true/on
  • false/off
+

compatible_illegal_chars

+

String

+

Specifies whether to tolerate invalid characters during data import. Specifies whether to convert invalid characters based on the conversion rule and import them to the database, or to report an error and stop the import.

+

Value range:

+
  • true/on
  • false/off
+

Default value: false/off

+

Enumeration values:

+
  • true/on
  • false/off
+

reject_limit

+

String

+

Maximum number of data format errors allowed during the data import. If the number of data format errors does not reach the maximum, the data import is successful.

+

Value range:

+
  • integer
  • unlimited
+

Default value: 0, indicating that error information is returned immediately

+

error_table_name

+

String

+

Name of the error table that records data format errors. After the parallel import is complete, you can query the error information table to obtain the detailed error information.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 9 MRSDestinationDescriptorRequest

Parameter

+

Type

+

Description

+

task_name

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

mrs_cluster_name

+

String

+

Name of the MRS cluster to which data in the DIS stream will be dumped.

+

Note:

+

Only MRS clusters with non-Kerberos authentication are supported.

+

mrs_cluster_id

+

String

+

ID of the MRS cluster to which data in the DIS stream will be dumped.

+

mrs_hdfs_path

+

String

+

Hadoop Distributed File System (HDFS) path of the MRS cluster to which data in the DIS stream will be dumped.

+

file_prefix

+

String

+

Self-defined directory created in the OBS bucket and used to temporarily store data in the DIS stream. Directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

hdfs_prefix_folder

+

String

+

Directory to store files that will be dumped to the chosen MRS cluster. Different directory levels are separated by slash (/). Value range: a string of 0 to 50 characters This parameter is left empty by default.

+

obs_bucket_path

+

String

+

Name of the OBS bucket used to temporarily store data in the DIS stream.

+

retry_duration

+

String

+

Time duration for DIS to retry if data fails to be dumped. If the retry time exceeds the value of this parameter, the data that fails to be dumped is backed up to the OBS bucket/file_prefix/mrs_error directory.

+

Value range: 0-7,200

+

Unit: second

+

Default value: 1,800

+

If this parameter is set to 0, DIS does not retry when the dump fails.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10 DliDestinationDescriptorRequest

Parameter

+

Type

+

Description

+

task_name

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

dli_database_name

+

String

+

Name of the DLI database to which data in the DIS stream will be dumped.

+

dli_table_name

+

String

+

Name of the DLI table to which data in the DIS stream will be dumped.

+

Note:

+

Only tables whose data location is DLI are supported, and you must have the permission to insert data into the tables.

+

obs_bucket_path

+

String

+

Name of the OBS bucket used to temporarily store data in the DIS stream.

+

file_prefix

+

String

+

Self-defined directory created in the OBS bucket and used to temporarily store data in the DIS stream. Directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

retry_duration

+

String

+

Time duration for DIS to retry if data fails to be dumped to DLI. If the retry time exceeds the value of this parameter, the data that fails to be dumped is backed up to the OBS bucket/file_prefix/dli_error directory. Value range: 0-7,200 Unit: second Default value: 1,800 If this parameter is set to 0, DIS does not retry when the dump fails.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 11 CloudtableDestinationDescriptorRequest

Parameter

+

Type

+

Description

+

task_name

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

cloudtable_cluster_name

+

String

+

Name of the CloudTable cluster to which data will be dumped.

+

If you choose to dump data to OpenTSDB, OpenTSDB must be enabled for the cluster.

+

cloudtable_cluster_id

+

String

+

ID of the CloudTable cluster to which data will be dumped.

+

If you choose to dump data to OpenTSDB, OpenTSDB must be enabled for the cluster.

+

cloudtable_table_name

+

String

+

HBase table name of the CloudTable cluster to which data will be dumped. The parameter is mandatory when data is dumped to the CloudTable HBase.

+

cloudtable_schema

+

CloudtableSchema object

+

Schema configuration of the CloudTable HBase data. You can set either this parameter or opentsdb_schema, but this parameter is mandatory when data will be dumped to HBase. After this parameter is set, the JSON data in the stream can be converted to another format and then be imported to the CloudTable HBase.

+

opentsdb_schema

+

Array of OpenTSDBSchema objects

+

Schema configuration of the CloudTable OpenTSDB data. You can set either this parameter or opentsdb_schema, but this parameter is mandatory when data will be dumped to OpenTSDB. After this parameter is set, the JSON data in the stream can be converted to another format and then be imported to the CloudTable OpenTSDB.

+

cloudtable_row_key_delimiter

+

String

+

Delimiter used to separate the user data that generates HBase row keys. Value range: , . | ; \ - _ and ~

+

Default value: .

+

obs_backup_bucket_path

+

String

+

Name of the OBS bucket used to back up data that failed to be dumped to CloudTable.

+

backup_file_prefix

+

String

+

Self-defined directory created in the OBS bucket and used to back up data that failed to be dumped to CloudTable. Directory levels are separated by slashes (/) and cannot start with slashes.

+

Value range: a string of letters, digits, and underscores (_)

+

The maximum length is 50 characters.

+

This parameter is left empty by default.

+

retry_duration

+

String

+

Time duration for DIS to retry if data fails to be dumped to CloudTable. If this threshold is exceeded, the data that fails to be dumped will be backed up to the OBS bucket/backup_file_prefix /cloudtable_error or OBS bucket/backup_file_prefix/opentsdb_error directory.

+

Value range: 0-7,200

+

Unit: second

+

Default value: 1,800

+
+
+ +
+ + + + + + + + + + + + + +
Table 12 CloudtableSchema

Parameter

+

Type

+

Description

+

row_key

+

Array of RowKey objects

+

HBase rowkey schema used by the CloudTable cluster to convert JSON data into HBase rowkeys.

+

Value range: 1-64

+

columns

+

Array of Column objects

+

HBase column schema used by the CloudTable cluster to convert JSON data into HBase columns.

+

Value range: 1 to 4,096

+
+
+ +
+ + + + + + + + + + + + + +
Table 13 RowKey

Parameter

+

Type

+

Description

+

value

+

String

+

JSON attribute name, which is used to generate HBase rowkeys for JSON data in the DIS stream.

+

type

+

String

+

JSON attribute type of JSON data in the DIS stream. Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

Enumeration values:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 14 Column

Parameter

+

Type

+

Description

+

column_family_name

+

String

+

Name of the HBase column family to which data will be dumped.

+

column_name

+

String

+

Name of the HBase column to which data will be dumped.

+

Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+

value

+

String

+

JSON attribute name, which is used to generate HBase column values for JSON data in the DIS stream.

+

type

+

String

+

JSON attribute type of JSON data in the DIS stream.

+

Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

Enumeration values:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 15 OpenTSDBSchema

Parameter

+

Type

+

Description

+

metric

+

Array of OpenTSDBMetric objects

+

Schema configuration of the OpenTSDB data metric in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the metric of the OpenTSDB data.

+

timestamp

+

OpenTSDBTimestamp object

+

Schema configuration of the OpenTSDB data timestamp in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the timestamp of the OpenTSDB data.

+

value

+

OpenTSDBValue object

+

Schema configuration of the OpenTSDB data value in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the value of the OpenTSDB data.

+

tags

+

Array of OpenTSDBTags objects

+

Schema configuration of the OpenTSDB data tags in the CloudTable cluster. After this parameter is set, the JSON data in the stream can be converted to the tags of the OpenTSDB data.

+
+
+ +
+ + + + + + + + + + + + + +
Table 16 OpenTSDBMetric

Parameter

+

Type

+

Description

+

type

+

String

+
  • When type is set to Constant, the value of metric is the value of Value.
  • When value is set to String, the value of metric is the value of the JSON attribute of the user data in the stream.
+

Enumeration values:

+
  • Constant
  • String
+

value

+

String

+

Constant value or JSON attribute name of the user data in the stream. This value is 1 to 32 characters long. Only letters, digits, and periods (.) are allowed.

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 17 OpenTSDBTimestamp

Parameter

+

Type

+

Description

+

type

+

String

+
  • When type is set to Timestamp, the value type of the JSON attribute of the user data in the stream is Timestamp, and the timestamp of OpenTSDB can be generated without converting the data format.
  • When type is set to String, the value type of the JSON attribute of the user data in the stream is Date, and the timestamp of OpenTSDB can be generated only after the data format is converted.
+

value

+

String

+

JSON attribute name of the user data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+

format

+

String

+

This parameter is mandatory when type is set to String. When the value type of the JSON attribute of the user data in the stream is Date, format is required to convert the data format to generate the timestamp of OpenTSDB.

+

Value range:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+

Enumeration values:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+
+
+ +
+ + + + + + + + + + + + + +
Table 18 OpenTSDBValue

Parameter

+

Type

+

Description

+

type

+

String

+

Dump destination. Possible values: Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

value

+

String

+

Constant value or JSON attribute name of the user data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 19 OpenTSDBTags

Parameter

+

Type

+

Description

+

name

+

String

+

Tag name of the OpenTSDB data that stores the data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+

type

+

String

+

Type name of the JSON attribute of the user data in the stream.

+

Value range:

+
  • Bigint
  • Double
  • Boolean
  • Timestamp
  • String
  • Decimal
+

value

+

String

+

Constant value or JSON attribute name of the user data in the stream. Value range: a string of 1 to 32 characters, consisting of only letters, digits, and underscores (_)

+
+
+
+

Example Requests

Querying Dump Task Details

+
GET https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "stream_id" : "RdMFID6edQdf8eDzc9e",
+  "stream_name" : "newstream",
+  "task_name" : "newtask",
+  "task_id" : "As805BudhcH1lDs6gbn",
+  "destination_type" : "OBS",
+  "state" : "RUNNING",
+  "create_time" : 1606554932552,
+  "last_transfer_timestamp" : 1606984428612,
+  "obs_destination_description" : {
+    "agency_name" : "dis_admin_agency",
+    "file_prefix\"" : "",
+    "partition_format" : "yyyy/MM/dd",
+    "obs_bucket_path" : "obsbucket",
+    "deliver_time_interval" : 60,
+    "consumer_strategy" : "LATEST",
+    "retry_duration" : 0,
+    "destination_file_type" : "text",
+    "record_delimiter" : "\n"
+  },
+  "partitions" : [ {
+    "partitionId" : "shardId-0000000000",
+    "discard" : 0,
+    "state" : "RUNNING",
+    "last_transfer_timestamp" : 1606984428612,
+    "last_transfer_offset" : 289897
+  } ]
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/UpdatePartitionCount.html b/docs/dis/api-ref/UpdatePartitionCount.html new file mode 100644 index 000000000..5d27cd063 --- /dev/null +++ b/docs/dis/api-ref/UpdatePartitionCount.html @@ -0,0 +1,138 @@ + + +

Changing Partition Quantity

+

Function

This API is used to change the number of partitions in a specific stream.

+
+

URI

PUT /v2/{project_id}/streams/{stream_name}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream whose partition quantity needs to be changed.

+

Maximum: 64

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

stream_name

+

Yes

+

String

+

Name of the stream whose partition quantity needs to be changed.

+

Maximum: 64

+

target_partition_count

+

Yes

+

Integer

+

Number of the target partitions.

+

The value is an integer greater than 0.

+

If the value is greater than the number of current partitions, scaling-up is required. If the value is less than the number of current partitions, scale-down is required.

+

Note: A maximum of five scale-up/down operations can be performed for each stream within one hour. If a scale-up/down operation is successfully performed, you cannot perform one more scale-up/down operation within the next one hour.

+

Minimum: 0

+
+
+
+

Response Parameters

None

+
+

Example Requests

Changing Partition Quantity

+
PUT https://{Endpoint}/v2/{project_id}/streams/{stream_name}
+
+{
+  "stream_name" : "newstream",
+  "target_partition_count" : 5
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/UpdateStream.html b/docs/dis/api-ref/UpdateStream.html new file mode 100644 index 000000000..fc44d8330 --- /dev/null +++ b/docs/dis/api-ref/UpdateStream.html @@ -0,0 +1,183 @@ + + +

Updating Stream Information

+

Function

This API is used to update the information about specified streams.

+
+

URI

PUT /v3/{project_id}/streams/{stream_name}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream whose partition quantity needs to be changed.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

stream_name

+

Yes

+

String

+

Name of the stream to be updated.

+

Maximum: 64

+

data_duration

+

No

+

Integer

+

Period of time for which data is retained in the stream. Value range: 24-72 Unit: hour Default value: 24 If this parameter is left blank, the default value is used.

+

Maximum: 168

+

Default: 24

+

data_type

+

No

+

String

+

Source data type.

+
  • BLOB: a collection of binary data stored as a single entity in a database management system.

    +
  • JSON: an open-standard file format that uses human-readable text to transmit data objects consisting of attribute–value pairs and array data types.

    +
  • CSV: a simple text format for storing tabular data in a plain text file. Commas are used as delimiters.

    +
+

Default value: BLOB

+

Enumeration values:

+
  • BLOB

    +
  • JSON

    +
  • CSV

    +
+

data_schema

+

No

+

String

+

Source data structure that defines JSON and CSV formats. It is described in the syntax of the Avro schema.

+

auto_scale_enabled

+

No

+

Boolean

+

Specifies whether to enable auto scaling.

+
  • true: auto scaling is enabled.

    +
  • false: auto scaling is disabled. This function is disabled by default.

    +
+

Default: false

+

Enumeration values:

+
  • true

    +
  • false

    +
+

auto_scale_min_partition_count

+

No

+

Long

+

Minimum number of partitions for automatic scale-down when auto scaling is enabled.

+

Minimum: 1

+

auto_scale_max_partition_count

+

No

+

Long

+

Maximum number of partitions for automatic scale-up when auto scaling is enabled.

+
+
+
+

Response Parameters

None

+
+

Example Requests

  • Updating Lifecycles of Streams

    +
    PUT https://{Endpoint}/v3/{project_id}/streams/{stream_name}
    +
    +{
    +  "stream_name" : "stz_test",
    +  "data_duration" : 48
    +}
    +
  • Updating Stream Types

    +
    PUT https://{Endpoint}/v3/{project_id}/streams/{stream_name}
    +
    +{
    +  "stream_name" : "stz_test",
    +  "data_type" : "JSON"
    +}
    +
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

204

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0003.html b/docs/dis/api-ref/dis_02_0003.html new file mode 100644 index 000000000..be3d2d73d --- /dev/null +++ b/docs/dis/api-ref/dis_02_0003.html @@ -0,0 +1,62 @@ + + +

Application Example

+

Scenarios

DIS provides efficient collection, transmission, and distribution capabilities for real-time data and provides a variety of APIs to help you quickly build real-time data applications.

+
The following describes how to create a DIS stream by calling the Before You Start API. For details, see Calling APIs.

The token obtained on IAM is valid for only 24 hours. If you want to use one token for authentication, you can cache it to avoid frequent calling.

+
+
+
+

Involved APIs

If you use a token for authentication, you must obtain the token and add X-Auth-Token to the request header of the API request.

+
  • API for obtaining a token from IAM
  • API for creating a DIS stream
+
+

Prerequisites

You have planned the region where DIS is located and determined the endpoint for calling an API based on the region.

+

An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. You can obtain endpoints from Regions and Endpoints.

+
+

Creating a Stream

The following is an example of creating a stream with the simplest configuration.

+
  1. Obtain the token by following the instructions in Token-based Authentication.
  2. Send POST https://Endpoint of DIS/v2/{project_id}/streams.
  3. Add X-Auth-Token to the request header.
  4. Specify the following parameters in the request body:
    {
    +"stream_name": "dis-DLpR",
    +"partition_count": 1,
    +"stream_type": "COMMON",
    +"data_duration": 24
    +}
    +
    • stream_name indicates the stream name, which can be customized, for example, newstream.
    • partition_count indicates the number of partitions. A partition is the base throughput unit of a DIS stream. You can specify the number of partitions based on your service throughput requirements.
    • stream_type indicates the stream type. COMMON indicates a common partition. A single partition supports a maximum of 1 MB/s for data writing and a maximum of 2 MB/s for data reading.
    • data_duration indicates the lifecycle of a stream, that is, the duration for storing data in the stream partition.
    +

    If the request is successful, 201 Created is returned.

    +

    If the request fails, an error code and error information are returned. For details, see Error Codes.

    +
+
+

Creating a Stream That Supports Auto Scaling

You can also create a stream that supports auto scaling. The number of partitions can be automatically increased or decreased based on the stream traffic. The following is an example configuration:

+
  1. Obtain the token by following the instructions provided in Token-based Authentication.
  2. Send POST https://Endpoint of DIS/v2/{project_id}/streams.
  3. Add X-Auth-Token to the request header.
  4. Specify the following parameters in the request body:
    {
    +"stream_name": "dis-DLpR",
    +"partition_count": 1,
    +"stream_type": "COMMON",
    +"data_duration": 24
    +"auto_scale_enabled": true,
    +"auto_scale_min_partition_count": 2,
    +"auto_scale_max_partition_count": 10
    +}
    +

    In this example, a stream that supports auto scaling is created. The number of partitions to scale ranges from 2 to 10. If the stream has 10 partitions, auto scaling-out will not be triggered.

    +
    • auto_scale_enabled specifies whether to enable auto scaling. The value true indicates that auto scaling is enabled.
    • auto_scale_min_partition_count indicates the minimum number of partitions allowed when auto scale-in is enabled. In this example, as there are two partitions, automatic scale-in will not be triggered.
    • auto_scale_max_partition_count indicates the maximum number of partitions allowed when auto scale-out is enabled. In this example, as there are 10 partitions, automatic scale-out will not be triggered.
    +

    If the request is successful, 201 Created is returned.

    +

    If the request fails, an error code and error information are returned. For details, see Error Codes.

    +
+
+

Creating a Stream with Data Schemas

You can also configure a schema for the stream. When using DIS to dump data to other services, you can map data based on the schema configured for the stream. The following is an example configuration:

+
  1. Obtain the token by following the instructions provided in Token-based Authentication.
  2. Send POST https://Endpoint of DIS/v2/{project_id}/streams.
  3. Add X-Auth-Token to the request header.
  4. Specify the following parameters in the request body:
    {
    +"stream_name": "dis-DLpR",
    +"partition_count": 1,
    +"stream_type": "COMMON",
    +"data_duration": 24
    +"auto_scale_enabled": true,
    +"auto_scale_min_partition_count": 1,
    +"auto_scale_max_partition_count": 10
    +"data_type": "JSON",
    +"data_schema": 
    +"{\"type\":\"record\",\"name\":\"RecordName\",\"fields\":[{\"name\":\"key1\",\"type\":\"string\"},{\"name\":\"key2\",\"type\":\"string\"}]}"
    +}
    +

    In this example, a stream whose source data type is JSON and that contains the key1 and key2 attributes is created.

    +
    • data_type indicates the type of source data. The value JSON indicates that the data format in the partition is JSON.
    • data_schema indicates the source data schema, which describes the source data structures in JSON and CSV formats using the Avro Schema syntax.
    +

    If the request is successful, 201 Created is returned.

    +

    If the request fails, an error code and error information are returned. For details, see Error Codes.

    +
+
+
diff --git a/docs/dis/api-ref/dis_02_0015.html b/docs/dis/api-ref/dis_02_0015.html new file mode 100644 index 000000000..26037e8dc --- /dev/null +++ b/docs/dis/api-ref/dis_02_0015.html @@ -0,0 +1,22 @@ + + +

API Description

+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0016_01.html b/docs/dis/api-ref/dis_02_0016_01.html new file mode 100644 index 000000000..3dc89891b --- /dev/null +++ b/docs/dis/api-ref/dis_02_0016_01.html @@ -0,0 +1,370 @@ + + +

Creating Streams

+

Function

This API is used to create a stream.

+
  • When creating a stream, specify a stream type (common or advanced) and the number of partitions.

    +
  • By default, an account can create a maximum of 10 advanced stream partitions and 50 common stream partitions. You can submit a service ticket to increase the quota.

    +
+
+

URI

POST /v2/{project_id}/streams

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

The stream name can contain 1 to 64 characters, including letters, digits, underscores (_), and hyphens (-).

+

Maximum: 64

+

partition_count

+

Yes

+

Integer

+

Number of partitions. Partitions are the base throughput unit of a DIS stream.

+

stream_type

+

No

+

String

+

Stream type.

+
  • COMMON: a common stream. The bandwidth is 1 MB/s.

    +
  • ADVANCED: an advanced stream. The bandwidth is 5 MB/s.

    +
+

Enumeration values:

+
  • COMMON

    +
  • ADVANCED

    +
+

data_type

+

No

+

String

+

Source data type.

+
  • BLOB: a set of binary data stored in a database management system.

    +
  • JSON: an open-source file format that uses readable text to transmit data objects consisting of attribute values or serialized values.

    +
  • CSV: a simple text format for storing tabular data in a plain text file. Commas (,) are used as separators by default.

    +
+

Default value: BLOB

+

Enumeration values:

+
  • BLOB

    +
  • JSON

    +
  • CSV

    +
+

data_duration

+

No

+

Integer

+

Period of time for which data is retained in the stream. Value range: 24-72 Unit: hour Default value: 24 If this parameter is left blank, the default value is used.

+

Maximum: 168

+

Default: 24

+

auto_scale_enabled

+

No

+

Boolean

+

Specifies whether to enable auto scaling.

+
  • true: Auto scaling is enabled.

    +
  • false: Auto scaling is disabled.

    +
+

This function is disabled by default.

+

Default: false

+

auto_scale_min_partition_count

+

No

+

Long

+

Minimum number of partitions for automatic scale-down when auto scaling is enabled.

+

Minimum: 1

+

auto_scale_max_partition_count

+

No

+

Integer

+

Maximum number of partitions for automatic scale-up when auto scaling is enabled.

+

data_schema

+

No

+

String

+

Source data structure that defines JSON and CSV formats. It is described in the syntax of the Avro schema.

+

csv_properties

+

No

+

CSVProperties object

+

Attributes of data in CSV format, such as delimiter.

+

compression_format

+

No

+

String

+

Compression type of data. Currently, the value can be:

+
  • snappy

    +
  • gzip

    +
  • zip

    +
+

Data is not compressed by default.

+

Enumeration values:

+
  • snappy

    +
  • gzip

    +
  • zip

    +
+

tags

+

No

+

Array of Tag objects

+

List of stream tags.

+

sys_tags

+

No

+

Array of SysTag objects

+

Stream enterprise projects.

+
+
+ +
+ + + + + + + + + + + +
Table 4 CSVProperties

Parameter

+

Mandatory

+

Type

+

Description

+

delimiter

+

No

+

String

+

Data separator.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 5 Tag

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

No

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Minimum: 1

+

Maximum: 36

+

value

+

No

+

String

+

Value.

+
  • The value contains a maximum of 43 characters.

    +
  • Character set: A-Z, a-z, 0-9, '. ', '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
  • The value can contain only digits, letters, hyphens (-), and underscores (_).

    +
+

Minimum: 0

+

Maximum: 43

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 6 SysTag

Parameter

+

Mandatory

+

Type

+

Description

+

key

+

No

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The value must be _sys_enterprise_project_id.

    +
+

Enumeration values:

+
  • _sys_enterprise_project_id

    +
+

value

+

No

+

String

+

Value. The value is the enterprise project ID, which needs to be obtained on the enterprise management page.

+
  • 36-digit UUID

    +
+
+
+
+

Response Parameters

None

+
+

Example Requests

Creating Streams

+
POST https://{Endpoint}/v2/{project_id}/streams
+
+{
+  "stream_name" : "newstream",
+  "partition_count" : 3,
+  "data_duration" : 24
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Created

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0018.html b/docs/dis/api-ref/dis_02_0018.html new file mode 100644 index 000000000..b2adb2696 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0018.html @@ -0,0 +1,259 @@ + + +

Uploading Data

+

Function

This API is used to upload data to DIS streams.

+
+

URI

POST /v2/{project_id}/records

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+

stream_id

+

No

+

String

+

Unique ID of the stream.

+

If no stream is found by stream_name and stream_id is not empty, stream_id is used to search for the stream.

+

Note:

+

This parameter is mandatory when data is uploaded to the authorized stream.

+

records

+

Yes

+

Array of PutRecordsRequestEntry objects

+

List of records to be uploaded.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 PutRecordsRequestEntry

Parameter

+

Mandatory

+

Type

+

Description

+

data

+

Yes

+

String

+

Data to be uploaded. The uploaded data is the serialized binary data (character string encoded using Base64). For example, if the character string data needs to be uploaded, the character string after Base64 encoding is ZGF0YQ==.

+

explicit_hash_key

+

No

+

String

+

Hash value of the data to be written to the partition. The hash value overwrites the hash value of partition_key. Value range: 0–long.max

+

partition_id

+

No

+

String

+

Partition ID of the stream. The value can be in either of the following formats:

+
  • shardId-0000000000

    +
  • 0

    +
+

For example, if a stream has three partitions, the partition identifiers are 0, 1, and 2, or shardId-0000000000, shardId-0000000001, and shardId-0000000002, respectively.

+

partition_key

+

No

+

String

+

Partition to which data is written to. Note:

+

If the partition_id parameter is transferred, the partition_id parameter is used preferentially. If partition_id is not transferred, partition_key is used.

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

failed_record_count

+

Integer

+

Number of data records that fail to be uploaded.

+

records

+

Array of PutRecordsResultEntry objects

+

List of upload results.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 6 PutRecordsResultEntry

Parameter

+

Type

+

Description

+

partition_id

+

String

+

ID of the partition to which data is uploaded.

+

sequence_number

+

String

+

Sequence number of the data to be uploaded. A sequence number is a unique identifier for each record. DIS automatically allocates a sequence number the data producer calls the PutRecords operation to add data to the DIS stream. Sequence number of the same partition key usually changes with time. A longer interval between PutRecords requests results in a larger sequence number.

+

error_code

+

String

+

Error code.

+

error_message

+

String

+

Error message.

+
+
+
+

Example Requests

Uploading Data

+
POST https://{Endpoint}/v2/{project_id}/records
+
+{
+  "stream_name" : "newstream",
+  "records" : [ {
+    "data" : "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE="
+  } ]
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0019.html b/docs/dis/api-ref/dis_02_0019.html new file mode 100644 index 000000000..ed512cd37 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0019.html @@ -0,0 +1,216 @@ + + +

Downloading Data

+

Function

This API is used to download data from DIS streams.

+
+

URI

GET /v2/{project_id}/records

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

partition-cursor

+

Yes

+

String

+

Data cursor, which needs to be obtained through the API for obtaining data cursors.

+

Value range: a string of 1 to 512 characters

+

Note:

+

The validity period of a data cursor is 5 minutes.

+

max_fetch_bytes

+

No

+

Integer

+

Maximum number of bytes that can be obtained for each request.

+

Note:

+

If the value is less than the size of a single record in the partition, the record cannot be obtained.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

records

+

Array of Record objects

+

List of downloaded records.

+

next_partition_cursor

+

String

+

Next iterator.

+

Note:

+

The validity period of a data cursor is 5 minutes.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Record

Parameter

+

Type

+

Description

+

partition_key

+

String

+

Partition key set when data is being uploaded.

+

Note:

+

If the partition_key parameter is passed when data is uploaded, this parameter will be returned when data is downloaded. If partition_id instead of partition_key is passed when data is uploaded, no partition_key is returned.

+

sequence_number

+

String

+

Sequence number of the data record.

+

data

+

String

+

Downloaded data.

+

The downloaded data is the serialized binary data (Base64-encoded character string).

+

For example, the data returned by the data download API is "ZGF0YQ==", which is "data" after Base64 decoding.

+

timestamp

+

Long

+

Timestamp when the record is written to DIS.

+

timestamp_type

+

String

+

Timestamp data type.

+
  • CreateTime: creation time.

    +
+

Default: CreateTime

+
+
+
+

Example Requests

Downloading Data

+
GET https://{Endpoint}/v2/{project_id}/records
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "records" : [ {
+    "partition_key" : "0",
+    "sequence_number" : "485",
+    "data" : "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx",
+    "timestamp" : 1527577402541,
+    "timestamp_type" : "CreateTime"
+  } ],
+  "next_partition_cursor" : "eyJpdGVyR2VuVGltZSI6MTQ5MDk1MDE1Nzc0NywiU3RyZWFtTmFtZSI6IjY2MCIsIlNoYXJkSWQiOiIwIiwiU2hhcmRJdGVyYXRvclR5cGUiOiJBVF9TRVFVRU5DRV9OVU1CRVIiLCJTdGFydGluZ1NlcXVlbmNlTnVtYmVyIjoiMjIiLCJUaW1lU3RhbXAiOjB9"
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0020.html b/docs/dis/api-ref/dis_02_0020.html new file mode 100644 index 000000000..0e803edf9 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0020.html @@ -0,0 +1,193 @@ + + +

Obtaining Data Cursors

+

Function

This API is used to obtain data cursors.

+
+

URI

GET /v2/{project_id}/cursors

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

stream-name

+

Yes

+

String

+

Name of the stream.

+

partition-id

+

Yes

+

String

+

Partition ID of the stream. The value can be in either of the following formats:

+
  • shardId-0000000000

    +
  • 0

    +
+

For example, if a stream has three partitions, the partition identifiers are 0, 1, and 2, or shardId-0000000000, shardId-0000000001, and shardId-0000000002, respectively.

+

cursor-type

+

No

+

String

+

Cursor type.

+
  • AT_SEQUENCE_NUMBER: Data is read from the position denoted by a specific sequence number (that is defined by starting-sequence-number). This is the default cursor type.

    +
  • AFTER_SEQUENCE_NUMBER: Data is read right after the position denoted by a specific sequence number (that is defined by starting-sequence-number).

    +
  • TRIM_HORIZON: Data is read from the earliest data record in the partition. For example, a tenant uses a DIS stream to upload three pieces of data A1, A2, and A3. N days later, A1 has expired and A2 and A3 are still in the validity period. In this case, if the tenant uses TRIM_HORIZON to download the data, the system downloads data from A2.

    +
  • LATEST: Data is read from the latest record in the partition. This setting ensures that you always read the latest record in the partition.

    +
  • AT_TIMESTAMP: Data is read from the position denoted by a specific timestamp.

    +
+

Enumeration values:

+
  • AT_SEQUENCE_NUMBER

    +
  • AFTER_SEQUENCE_NUMBER

    +
  • TRIM_HORIZON

    +
  • LATEST

    +
  • AT_TIMESTAMP

    +
+

starting-sequence-number

+

No

+

String

+

Serial number. A sequence number is a unique identifier for each record. DIS automatically allocates a sequence number when the data producer calls the PutRecords operation to add data to the DIS stream. SN of the same partition key usually changes with time. A longer interval between PutRecords requests results in a larger sequence number.

+

The sequence number is closely related to cursor types AT_SEQUENCE_NUMBER and AFTER_SEQUENCE_NUMBER. The two parameters determine the position of the data to be read.

+

Value range: 0 to 9,223,372,036,854,775,807

+

timestamp

+

No

+

Long

+

Timestamp when the data record starts to be read, which is closely related to cursor type AT_TIMESTAMP. The two parameters determine the position of the data to be read.

+

Note:

+

The timestamp is accurate to milliseconds.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

partition_cursor

+

String

+

Data cursor. Value range: a string of 1 to 512 characters

+

Note:

+

The validity period of a data cursor is 5 minutes.

+

Minimum: 1

+

Maximum: 512

+
+
+
+

Example Requests

Obtaining Data Cursors

+
GET https://{Endpoint}/v2/{project_id}/cursors
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "partition_cursor" : "eyJnZXRJdGVyYXRvclBhcmFtIjp7InN0cmVhbS1uYW1lIjoianpjIiwicGFydGl0aW9uLWlkIjoiMCIsImN1cnNvci10eXBlIjoiQVRfU0VRVUVOQ0VfTlVNQkVSIiwic3RhcnRpbmctc2VxdWVuY2UtbnVtYmVyIjoiMTAifSwiZ2VuZXJhdGVUaW1lc3RhbXAiOjE1MDYxNTk1NjM0MDV9"
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0022.html b/docs/dis/api-ref/dis_02_0022.html new file mode 100644 index 000000000..4c638feb5 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0022.html @@ -0,0 +1,334 @@ + + +

Status Codes

+

A status code is an HTTPS response issued by DIS to indicate whether an API request has been successfully completed.

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

Status Code

+

Status

+

Description

+

100

+

Continue

+

The server has received the initial part of the request and the client should continue to send the remaining part.

+

It is issued on a provisional basis while request processing continues. It alerts the client to wait for a final response.

+

101

+

Switching Protocols

+

The requester has asked the server to switch protocols and the server has agreed to do so. The target protocol must be more advanced than the source protocol.

+

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

+

200

+

OK

+

The server has successfully processed the request.

+

201

+

Created

+

The request has been fulfilled, resulting in the creation of a new resource.

+

202

+

Accepted

+

The request has been accepted for processing, 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 does not return any content.

+

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

+

205

+

Reset Content

+

The server has successfully processed the request, but does not return any content. Unlike a 204 response, this response requires that the requester reset the content.

+

206

+

Partial Content

+

The server has successfully processed a part of the GET request.

+

300

+

Multiple Choices

+

There are multiple options for the requested resource. For example, this code could be used to present a list of resource characteristics and addresses from which the client such as a browser may choose.

+

301

+

Moved Permanently

+

This and all future requests should be permanently directed to the given URI indicated in this response.

+

302

+

Found

+

The requested resource was temporarily moved.

+

303

+

See Other

+

The response to the request can be found under another URI using a GET or POST method.

+

304

+

Not Modified

+

The requested resource has not been modified. In such a case, there is no need to retransmit the resource since the client still has a previously-downloaded copy.

+

305

+

Use Proxy

+

The requested resource is available only through a proxy.

+

306

+

Unused

+

This HTTP status code is no longer used.

+

400

+

BadRequest

+

The request is invalid.

+

The client should modify the request instead of re-initiating it.

+

401

+

Unauthorized

+

The authentication information provided by the client is incorrect or invalid.

+

402

+

Payment Required

+

Reserved for future use.

+

403

+

Forbidden

+

The server has received the request and understood it, but the server is refusing to respond to it.

+

The client should modify the request instead of re-initiating it.

+

404

+

NotFound

+

The requested resource could not be found.

+

The client should modify the request instead of re-initiating it.

+

405

+

MethodNotAllowed

+

A request method is not supported for the requested resource.

+

The client should modify the request instead of re-initiating it.

+

406

+

Not Acceptable

+

The server could not fulfill the request according to the content characteristics of the request.

+

407

+

Proxy Authentication Required

+

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

+

408

+

Request Time-out

+

The server timed out waiting for the request.

+

The client may re-initiate the request without modifications at any later time.

+

409

+

Conflict

+

The request could not be processed due to a conflict in the request.

+

For example, an edit conflict between multiple simultaneous updates or the resource that the client attempts to create already exists.

+

410

+

Gone

+

The requested resource has been deleted permanently and will not be available again.

+

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

+

411

+

Length Required

+

The server refused to process the request because the request does not specify the length of its content.

+

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 the server is willing or able to process. The server may close the connection to prevent the client from continuing the request. If the server temporarily cannot process the request, 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 does not support the media type 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 was well-formed but was unable to be followed 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.

+

441

+

Authentication Error

+

Authentication fails.

+

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 was acting as a gateway or proxy and received an invalid request from a remote server.

+

503

+

ServiceUnavailable

+

The requested service is invalid.

+

The client should modify the request instead of re-initiating it.

+

504

+

ServerTimeout

+

The server could not return a timely response. The response will reach the client only if the request carries a timeout parameter.

+

505

+

HTTP Version not supported

+

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

+
+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0023.html b/docs/dis/api-ref/dis_02_0023.html new file mode 100644 index 000000000..1686070a7 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0023.html @@ -0,0 +1,36 @@ + + +

Change History

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

Released On

+

Description

+

2018-10-25

+

Accepted in OTC 3.2.

+

2018-09-29

+

Modified the following contents:

+

Added tag management APIs

+

2018-09-26

+

Modified the following contents:

+

A status code was added in Status Codes.

+

2018-03-16

+

This issue is the first official release.

+
+
+
diff --git a/docs/dis/api-ref/dis_02_0024.html b/docs/dis/api-ref/dis_02_0024.html new file mode 100644 index 000000000..9263cf8c0 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0024.html @@ -0,0 +1,390 @@ + + +

Querying Streams

+

Function

This API is used to query all streams created by the current tenant.

+

During the query, specify the stream from which the stream list is returned and the maximum number of streams to be returned for a single request.

+
+

URI

GET /v2/{project_id}/streams

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

limit

+

No

+

Integer

+

The maximum number of DIS streams to list in a single API call.

+

Value range: 1-100 Default value: 10

+

Minimum: 1

+

Maximum: 100

+

Default: 10

+

start_stream_name

+

No

+

String

+

Name of the DIS stream to start the stream list with. The returned stream list does not contain this DIS stream name.

+

If pagination query is required, this parameter is not transferred for query on the first page. If the value of has_more_streams is true, the query is performed on the next page. The value of start_stream_name is the name of the last stream in the query result of the first page.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

total_number

+

Long

+

Total number of all the DIS streams created by the current tenant.

+

stream_names

+

Array of strings

+

List of the streams meeting the current requests.

+

has_more_streams

+

Boolean

+

Specify whether there are more matching DIS streams to list. Possible values:

+
  • true: yes

    +
  • false: no

    +
+

Default: false

+

stream_info_list

+

Array of StreamInfo objects

+

Stream details.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 StreamInfo

Parameter

+

Type

+

Description

+

stream_name

+

String

+

Name of the stream.

+

create_time

+

Long

+

Time when the stream is created. The value is a 13-bit timestamp.

+

retention_period

+

Integer

+

Period for storing data in units of hours.

+

status

+

String

+

Current status of the stream. Possible values:

+
  • CREATING: The stream is being created.

    +
  • RUNNING: The stream is running.

    +
  • TERMINATING: The stream is being deleted.

    +
  • TERMINATED: The stream has been deleted.

    +
+

Enumeration values:

+
  • CREATING

    +
  • RUNNING

    +
  • TERMINATING

    +
  • FROZEN

    +
+

stream_type

+

String

+

Stream type.

+
  • COMMON: a common stream. The bandwidth is 1 MB/s.

    +
  • ADVANCED: an advanced stream. The bandwidth is 5 MB/s.

    +
+

Enumeration values:

+
  • COMMON

    +
  • ADVANCED

    +
+

data_type

+

String

+

Source data type.

+
  • BLOB: a collection of binary data stored as a single entity in a database management system.

    +
  • JSON: an open-standard file format that uses human-readable text to transmit data objects consisting of attribute–value pairs and array data types.

    +
  • CSV: a simple text format for storing tabular data in a plain text file. Commas are used as delimiters.

    +
+

Default value: BLOB

+

Enumeration values:

+
  • BLOB

    +
  • JSON

    +
  • CSV

    +
+

partition_count

+

Integer

+

Quantity of partitions. Partitions are the base throughput unit of a DIS stream.

+

auto_scale_enabled

+

Boolean

+

Specifies whether to enable auto scaling.

+
  • true: auto scaling is enabled.

    +
  • false: auto scaling is disabled.

    +
+

This function is disabled by default.

+

Default: false

+

auto_scale_min_partition_count

+

Integer

+

Minimum number of partitions for automatic scale-down when auto scaling is enabled.

+

Minimum: 1

+

auto_scale_max_partition_count

+

Integer

+

Maximum number of partitions for automatic scale-up when auto scaling is enabled.

+

tags

+

Array of Tag objects

+

List of stream tags.

+

sys_tags

+

Array of SysTag objects

+

Stream enterprise projects.

+
+
+ +
+ + + + + + + + + + + + + +
Table 6 Tag

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Minimum: 1

+

Maximum: 36

+

value

+

String

+

Value.

+
  • The value contains a maximum of 43 characters.

    +
  • Character set: A-Z, a-z, 0-9, '. ', '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
  • The value can contain only digits, letters, hyphens (-), and underscores (_).

    +
+

Minimum: 0

+

Maximum: 43

+
+
+ +
+ + + + + + + + + + + + + +
Table 7 SysTag

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The value must be _sys_enterprise_project_id.

    +
+

Enumeration values:

+
  • _sys_enterprise_project_id

    +
+

value

+

String

+

Value. The value is the enterprise project ID, which needs to be obtained on the enterprise management page.

+
  • 36-digit UUID

    +
+
+
+
+

Example Requests

Querying Streams

+
GET https://{Endpoint}/v2/{project_id}/streams
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "total_number" : 1,
+  "stream_names" : [ "newstream" ],
+  "stream_info_list" : [ {
+    "stream_id" : "8QM3Nt9YTLOwtUVYJhO",
+    "stream_name" : "newstream",
+    "create_time" : 1593569685875,
+    "retention_period" : 24,
+    "status" : "RUNNING",
+    "stream_type" : "COMMON",
+    "data_type" : "BLOB",
+    "partition_count" : 1,
+    "tags" : [ ],
+    "auto_scale_enabled" : false,
+    "auto_scale_min_partition_count" : 0,
+    "auto_scale_max_partition_count" : 0
+  } ],
+  "has_more_streams" : false
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0025.html b/docs/dis/api-ref/dis_02_0025.html new file mode 100644 index 000000000..c6fddb8a4 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0025.html @@ -0,0 +1,565 @@ + + +

Querying Stream Details

+

Function

This API is used to query details about a specified stream.

+
+

URI

GET /v2/{project_id}/streams/{stream_name}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Stream to be queried.

+

Maximum: 60

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

start_partitionId

+

No

+

String

+

Name of the partition to start the partition list with. The returned partition list does not contain this partition.

+

limit_partitions

+

No

+

Integer

+

Maximum number of partitions to list in a single API call. Value range: 1-1,000 Default value: 100

+

Minimum: 1

+

Maximum: 1000

+

Default: 100

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

stream_name

+

String

+

Name of the stream.

+

create_time

+

Long

+

Time when a stream is created. The value is a 13-bit timestamp.

+

last_modified_time

+

Long

+

Time when a stream is the most recently modified. The value is a 13-bit timestamp.

+

status

+

String

+

Current status of the stream. Possible values:

+
  • CREATING: The stream is being created.

    +
  • RUNNING: The stream is running.

    +
  • TERMINATING: The stream is being deleted.

    +
  • TERMINATED: The stream has been deleted.

    +
+

Enumeration values:

+
  • CREATING

    +
  • RUNNING

    +
  • TERMINATING

    +
  • FROZEN

    +
+

stream_type

+

String

+

Stream type.

+
  • COMMON: a common stream. The bandwidth is 1 MB/s.

    +
  • ADVANCED: an advanced stream. The bandwidth is 5 MB/s.

    +
+

Enumeration values:

+
  • COMMON

    +
  • ADVANCED

    +
+

partitions

+

Array of PartitionResult objects

+

A list of partitions that comprise the DIS stream.

+

has_more_partitions

+

Boolean

+

Specifies whether there are more matching partitions of the DIS stream to list.

+
  • true: yes

    +
  • false: no

    +
+

retention_period

+

Integer

+

Period for storing data in units of hours.

+

stream_id

+

String

+

Unique identifier of the stream.

+

data_type

+

String

+

Source data type.

+
  • BLOB: a set of binary data stored in a database management system.

    +
  • JSON: an open-source file format that uses readable text to transmit data objects consisting of attribute values or serialized values.

    +
  • CSV: a simple text format for storing tabular data in a plain text file. Commas (,) are used as separators by default.

    +
+

Default value: BLOB

+

Enumeration values:

+
  • BLOB

    +
  • JSON

    +
  • CSV

    +
+

data_schema

+

String

+

Source data structure that defines JSON and CSV formats. It is described in the syntax of the Avro schema. For details about Avro, go to http://avro.apache.org/docs/current/

+

compression_format

+

String

+

Compression type of data. Currently, the value can be:

+
  • snappy

    +
  • gzip

    +
  • zip

    +
+

Data is not compressed by default.

+

Enumeration values:

+
  • snappy

    +
  • gzip

    +
  • zip

    +
+

csv_properties

+

CSVProperties object

+

Attributes of data in CSV format, such as delimiter.

+

writable_partition_count

+

Integer

+

Total number of writable partitions (including partitions in ACTIVE state only).

+

readable_partition_count

+

Integer

+

Total number of readable partitions (including partitions in ACTIVE and DELETED state).

+

update_partition_counts

+

Array of UpdatePartitionCount objects

+

List of scaling operation records.

+

tags

+

Array of Tag objects

+

List of stream tags.

+

sys_tags

+

Array of SysTag objects

+

Enterprise project of a stream.

+

auto_scale_enabled

+

Boolean

+

Specifies whether to enable auto scaling.

+
  • true: auto scaling is enabled.

    +
  • false: auto scaling is disabled.

    +
+

This function is disabled by default.

+

auto_scale_min_partition_count

+

Integer

+

Minimum number of partitions for automatic scale-down when auto scaling is enabled.

+

auto_scale_max_partition_count

+

Integer

+

Maximum number of partitions for automatic scale-up when auto scaling is enabled.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 PartitionResult

Parameter

+

Type

+

Description

+

status

+

String

+

Current status of the partition. Possible values:

+
  • CREATING: The stream is being created.

    +
  • ACTIVE: The stream is available.

    +
  • DELETED: The stream is being deleted.

    +
  • EXPIRED: The stream has expired.

    +
+

Enumeration values:

+
  • CREATING

    +
  • ACTIVE

    +
  • DELETED

    +
  • EXPIRED

    +
+

partition_id

+

String

+

Unique identifier of the partition.

+

hash_range

+

String

+

Possible value range of the hash key used by the partition.

+

sequence_number_range

+

String

+

Sequence number range of the partition.

+

parent_partitions

+

String

+

Parent partition.

+
+
+ +
+ + + + + + + + + +
Table 6 CSVProperties

Parameter

+

Type

+

Description

+

delimiter

+

String

+

Data separator.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7 UpdatePartitionCount

Parameter

+

Type

+

Description

+

create_timestamp

+

Long

+

Scaling execution timestamp, which is a 13-digit timestamp.

+

src_partition_count

+

Integer

+

Number of partitions before scaling.

+

target_partition_count

+

Integer

+

Number of partitions after scaling.

+

result_code

+

Integer

+

Response code of the scaling operation.

+

result_msg

+

Integer

+

Response to the scaling operation.

+

auto_scale

+

Boolean

+

Specifies whether the scaling operation is automatic.

+
  • true: Auto scaling is enabled.

    +
  • false: Manual scaling is enabled.

    +
+
+
+ +
+ + + + + + + + + + + + + +
Table 8 Tag

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The key value of a resource must be unique.

    +
  • Character set: A-Z, a-z, 0-9, '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
+

Minimum: 1

+

Maximum: 36

+

value

+

String

+

Value.

+
  • The value contains a maximum of 43 characters.

    +
  • Character set: A-Z, a-z, 0-9, '. ', '-', '_', and Unicode characters (\u4E00-\u9FFF).

    +
  • The value can contain only digits, letters, hyphens (-), and underscores (_).

    +
+

Minimum: 0

+

Maximum: 43

+
+
+ +
+ + + + + + + + + + + + + +
Table 9 SysTag

Parameter

+

Type

+

Description

+

key

+

String

+

Key.

+
  • This field cannot be left blank.

    +
  • The value must be _sys_enterprise_project_id.

    +
+

Enumeration values:

+
  • _sys_enterprise_project_id

    +
+

value

+

String

+

Value. The value is the enterprise project ID, which needs to be obtained on the enterprise management page.

+
  • 36-digit UUID

    +
+
+
+
+

Example Requests

Querying Stream Details

+
GET https://{Endpoint}/v2/{project_id}/streams/{stream_name}
+
+

Example Responses

Status code: 200

+

Normal response.

+
{
+  "stream_id" : "8QM3Nt9YTLOwtUVYJhO",
+  "stream_name" : "newstream",
+  "create_time" : 1593569685875,
+  "last_modified_time" : "1599050091026,",
+  "retention_period" : 24,
+  "status" : "RUNNING",
+  "stream_type" : "COMMON",
+  "data_type" : "BLOB",
+  "writable_partition_count" : 1,
+  "readable_partition_count" : 1,
+  "tags" : [ ],
+  "auto_scale_enabled" : false,
+  "auto_scale_min_partition_count" : 0,
+  "auto_scale_max_partition_count" : 0,
+  "partitions" : [ {
+    "status" : "ACTIVE",
+    "partition_id" : "shardId-0000000000",
+    "hash_range" : "[0 : 9223372036854775807]",
+    "sequence_number_range" : "[289911 : 289927]"
+  } ],
+  "has_more_partitions" : false
+}
+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

200

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0200.html b/docs/dis/api-ref/dis_02_0200.html new file mode 100644 index 000000000..90d2eb189 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0200.html @@ -0,0 +1,5 @@ + + +

API Overview

+

DIS provides self-developed APIs that comply with RESTful API design specifications. You can use DIS functions listed in API Description by calling these APIs.

+
diff --git a/docs/dis/api-ref/dis_02_0400.html b/docs/dis/api-ref/dis_02_0400.html new file mode 100644 index 000000000..e7b8dc475 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0400.html @@ -0,0 +1,195 @@ + + +

Making an API Request

+

This section describes the structure of a REST API request, and uses the IAM API for obtaining a user token as an example to demonstrate how to call an API. The obtained token can then be 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}

+

Although a request URI is included in the request header, most programming languages or frameworks require the request URI to be transmitted separately.

+ +
+ + + + + + + + + + + + + + + + +
Table 1 URI parameter description

Parameter

+

Description

+

URI-scheme

+

Protocol used to transmit requests. All APIs use HTTPS.

+

Endpoint

+

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

+

resource-path

+

Access path of an API for performing a specified operation. Obtain the path from the URI of an API. For example, the resource-path of the API used to obtain a user token is /v3/auth/tokens.

+

query-string

+

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

+
+
+

To simplify the URI display in this document, each API is provided only with a resource-path and a request method. The URI-scheme of all APIs is HTTPS, and the endpoints of all APIs in the same region are identical.

+
+
+

Request Methods

The HTTP protocol defines the following request methods that can be used to send a request to the server: +
+ + + + + + + + + + + + + + + + + + + + + + +
Table 2 HTTP methods

Method

+

Description

+

GET

+

Requests the server to return specified resources.

+

PUT

+

Requests the server to update specified resources.

+

POST

+

Requests the server to add resources or perform special operations.

+

DELETE

+

Requests the server to delete specified resources, for example, an object.

+

HEAD

+

Same as GET except that the server must return only the response header.

+

PATCH

+

Requests the server to update partial content of a specified resource.

+

If the resource does not exist, a new resource will be created.

+
+
+
+

For example, in the case of the API used to obtain a user token, the request method is POST, and the request is as follows:

+
+

Request Header

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

+
Table 3 lists common request headers. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Common request headers

Parameter

+

Description

+

Mandatory

+

Example

+

Host

+

Specifies the server domain name and port number of the resources being requested. The value can be obtained from the URL of the service API. The value is in the format of Hostname:Port number. If the port number is not specified, the default port is used. The default port number for HTTPS is 443.

+

No

+

This field is mandatory for AK/SK authentication.

+

code.test.com

+

or

+

code.test.com:443

+

Content-Type

+

Specifies the request body MIME type. Its default value is application/json. Other values of this field will be provided for specific APIs if any.

+

Yes

+

application/json

+

Content-Length

+

Specifies the length of the request body. The unit is byte.

+

No

+

3495

+

X-Project-Id

+

Specifies the project ID. Obtain the project ID by following the instructions in Obtaining a Project ID.

+

No

+

e9993fc787d94b6c886cbaa340f9c0f4

+

X-Auth-Token

+

Specifies the user token.

+

It is a response to the API used to obtain a user token. This API is the only one that does not require authentication.

+

After the request is processed, the value of X-Subject-Token in the header is the token value.

+

No

+

This field is mandatory for token authentication.

+

The following is part of an example token:

+

MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ

+
+
+
+

In addition to supporting token-based authentication, APIs also support authentication using access key ID/secret access key (AK/SK). During AK/SK-based authentication, an SDK is used to sign the request, and the Authorization (signature authentication) and X-Sdk-Date (time when the request is sent) header fields are automatically added to the request.

+

For more information, see "AK/SK-based Authentication" in Authentication.

+
+

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:

+
+

(Optional) Request Body

This part is optional. The body of a request is often sent in a structured format as specified in the Content-Type header field, such as JSON or XML. The request body transfers content except the request header.

+

The request body varies between APIs. Some APIs do not require the request body, such as the APIs requested using the GET and DELETE methods.

+

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.

+

The scope parameter specifies where a token takes effect. In the following example, the token takes effect only for the resources in a specified project. You can set scope to a domain or a project under a domain. In the following example, the token takes effect only for the resources in a specified project. For more information about this API, see obtaining a user token.

+
+
+Content-Type: application/json
+{
+    "auth": {
+        "identity": {
+            "methods": [
+                "password"
+            ],
+            "password": {
+                "user": {
+                    "name": "username",
+                    "password": "********",
+                    "domain": {
+                        "name": "domainname"
+                    }
+                }
+            }
+        },
+        "scope": {
+            "project": {
+                "name": "xxxxxxxxxxxxxxxxxx"
+            }
+        }
+    }
+}
+

If all data required for the API request is available, you can send the request to call the API through curl, Postman, or coding. In the response to the API used to obtain a user token, x-subject-token is the desired user token. This token can then be used to authenticate the calling of other APIs.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0403.html b/docs/dis/api-ref/dis_02_0403.html new file mode 100644 index 000000000..54cdf7412 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0403.html @@ -0,0 +1,173 @@ + + +

Submitting Checkpoints

+

Function

This API is used to submit checkpoints.

+
+

URI

POST /v2/{project_id}/checkpoints

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

app_name

+

Yes

+

String

+

Name of the app, which is the unique identifier of a user data consumption program.

+

checkpoint_type

+

Yes

+

String

+

Type of the checkpoint.

+
  • LAST_READ: Only sequence numbers are recorded in databases.

    +
+

Enumeration values:

+
  • LAST_READ

    +
+

stream_name

+

Yes

+

String

+

Name of the stream.

+

partition_id

+

Yes

+

String

+

Partition identifier of the stream. The value can be in either of the following formats:

+
  • shardId-0000000000

    +
  • 0

    +
+

For example, if a stream has three partitions, the partition identifiers are 0, 1, and 2, or shardId-0000000000, shardId-0000000001, and shardId-0000000002, respectively.

+

sequence_number

+

Yes

+

String

+

Sequence number to be submitted, which is used to record the consumption checkpoint of the stream. Ensure that the sequence number is within the valid range.

+

metadata

+

No

+

String

+

Metadata information of the consumer application.

+

The metadata information can contain a maximum of 1,000 characters.

+

Maximum: 1000

+
+
+
+

Response Parameters

None

+
+

Example Requests

Submitting Checkpoints

+
POST https://{Endpoint}/v2/{project_id}/checkpoints
+
+{
+  "stream_name" : "newstream",
+  "app_name" : "newapp",
+  "partition_id" : "0",
+  "sequence_number" : "2",
+  "checkpoint_type" : "LAST_READ"
+}
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0410.html b/docs/dis/api-ref/dis_02_0410.html new file mode 100644 index 000000000..63676539a --- /dev/null +++ b/docs/dis/api-ref/dis_02_0410.html @@ -0,0 +1,348 @@ + + +

Adding OBS Dump Tasks

+

Function

This API is used to add OBS dump tasks.

+
+

URI

POST /v2/{project_id}/streams/{stream_name}/transfer-tasks

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID.

+

stream_name

+

Yes

+

String

+

Name of the stream.

+

Maximum: 60

+
+
+
+

Request Parameters

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

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

The token can be obtained by calling the IAM API (value of X-Subject-Token in the response header).

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

destination_type

+

Yes

+

String

+

Dump destination. Possible values:

+
  • OBS: Data is dumped to OBS.
  • MRS: Data is dumped to MRS.
  • DLI: Data is dumped to DLI.
  • CLOUDTABLE: Data is dumped to CloudTable.
  • DWS: Data is dumped to DWS.
+

Default: NOWHERE

+

Enumeration values:

+
  • OBS
+

obs_destination_descriptor

+

No

+

OBSDestinationDescriptorRequest object

+

Parameter list of OBS to which data in the DIS stream will be dumped.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 OBSDestinationDescriptorRequest

Parameter

+

Mandatory

+

Type

+

Description

+

task_name

+

Yes

+

String

+

Name of the dump task. The task name consists of letters, digits, hyphens (-), and underscores (_). It must be a string of 1 to 64 characters.

+

agency_name

+

Yes

+

String

+

Name of the agency created on IAM. DIS uses an agency to access your specified resources. The parameters for creating an agency are as follows:

+
  • Agency Type: Cloud service
  • Cloud Service: DIS
  • Validity Period: unlimited
  • Scope: Global service, Project: OBS. Select the Tenant Administrator role for the global service project.
+

If agencies have been created, you can obtain available agencies from the agency list by using the "Listing Agencies " API.

+

This parameter cannot be left blank and the parameter value cannot exceed 64 characters.

+

If there are dump tasks on the console, the system displays a message indicating that an agency will be automatically created. The name of the automatically created agency is dis_admin_agency.

+

Maximum: 64

+

deliver_time_interval

+

Yes

+

Integer

+

User-defined interval at which data is imported from the current DIS stream into OBS. If no data is pushed to the DIS stream during the current interval, no dump file package will be generated.

+

Value range: 30-900

+

Default value: 300

+

Unit: second

+

Minimum: 30

+

Maximum: 900

+

Default: 300

+

consumer_strategy

+

No

+

String

+

Offset.

+
  • LATEST: Maximum offset, indicating that the latest data will be extracted.
  • TRIM_HORIZON: Minimum offset, indicating that the earliest data will be extracted.
+

Default value: LATEST

+

Default: LATEST

+

Enumeration values:

+
  • LATEST
  • TRIM_HORIZON
+

file_prefix

+

No

+

String

+

Directory to store files that will be dumped to OBS. Different directory levels are separated by slashes (/) and cannot start with slashes.

+

The value can contain a maximum of 50 characters, including letters, digits, underscores (_), and slashes (/).

+

This parameter is left empty by default.

+

Maximum: 50

+

partition_format

+

No

+

String

+

Directory structure of the object file written into OBS. The directory structure is in the format of yyyy/MM/dd/HH/mm (time at which the dump task was created).

+
  • N/A: Leave this parameter empty, indicating that the date and time directory is not used.
  • yyyy: year
  • yyyy/MM: year/month
  • yyyy/MM/dd: year/month/day
  • yyyy/MM/dd/HH: year/month/day/hour
  • yyyy/MM/dd/HH/mm: year/month/day/hour/minute
+

Example: in 2017/11/10/14/49, the directory structure is 2017 > 11 > 10 > 14 > 49. 2017 indicates the outermost folder.

+

Default value: empty.

+

Note:

+

After data is successfully dumped, the directory structure is obs_bucket_path/file_prefix/partition_format.

+

Enumeration values:

+
  • yyyy
  • yyyy/MM
  • yyyy/MM/dd
  • yyyy/MM/dd/HH
  • yyyy/MM/dd/HH/mm
+

obs_bucket_path

+

Yes

+

String

+

Name of the OBS bucket used to store data from the DIS stream.

+

destination_file_type

+

No

+

String

+

Dump file format. Possible values:

+
  • Text (default)
  • Parquet
  • CarbonData
+

Note:

+

You can select Parquet or CarbonData only when Source Data Type is set to JSON and Dump Destination is set to OBS.

+

Default: text

+

Enumeration values:

+
  • text
  • parquet
  • carbon
+

processing_schema

+

No

+

ProcessingSchema object

+

Dump time directory generated based on the timestamp of the source data and the configured partition_format. Directory structure of the object file written into OBS. The directory structure is in the format of yyyy/MM/dd/HH/mm.

+

record_delimiter

+

No

+

String

+

Delimiter for the dump file, which is used to separate the user data that is written into the dump file.

+

Value range:

+
  • Comma (,), which is the default value
  • Semicolon (;)
  • Vertical bar (|)
  • Newline character (\n)
+

Default: \n

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 5 ProcessingSchema

Parameter

+

Mandatory

+

Type

+

Description

+

timestamp_name

+

Yes

+

String

+

Attribute name of the source data timestamp.

+

timestamp_type

+

Yes

+

String

+

Type of the source data timestamp.

+
  • String
  • Timestamp: 13-bit timestamp of the long type
+

timestamp_format

+

No

+

String

+

OBS directory generated based on the timestamp format. This parameter is mandatory when the timestamp type of the source data is String.

+

Value range:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+

Enumeration values:

+
  • yyyy/MM/dd HH:mm:ss
  • MM/dd/yyyy HH:mm:ss
  • dd/MM/yyyy HH:mm:ss
  • yyyy-MM-dd HH:mm:ss
  • MM-dd-yyyy HH:mm:ss
  • dd-MM-yyyy HH:mm:ss
+
+
+
+

Response Parameters

None

+
+

Example Requests

  • Adding OBS Dump Tasks
    POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks
    +
    +{
    +  "destination_type" : "OBS",
    +  "obs_destination_descriptor" : {
    +    "task_name" : "newtask",
    +    "consumer_strategy" : "LATEST",
    +    "agency_name" : "dis_admin_agency",
    +    "destination_file_type" : "text",
    +    "obs_bucket_path" : "obsbucket",
    +    "file_prefix" : "",
    +    "partition_format" : "yyyy/MM/dd/HH/mm",
    +    "record_delimiter" : "|",
    +    "deliver_time_interval" : 30
    +  }
    +}
    +
  • Adding OBS Dump Tasks (The dump file format is Parquet.)
    POST https://{Endpoint}/v2/{project_id}/streams/{stream_name}/transfer-tasks
    +
    +{
    +  "destination_type" : "OBS",
    +  "obs_destination_descriptor" : {
    +    "task_name" : "newtask",
    +    "consumer_strategy" : "LATEST",
    +    "agency_name" : "dis_admin_agency",
    +    "destination_file_type" : "parquet",
    +    "obs_bucket_path" : "obsbucket",
    +    "file_prefix" : "",
    +    "partition_format" : "yyyy/MM/dd/HH/mm",
    +    "record_delimiter" : "|",
    +    "deliver_time_interval" : 30
    +  }
    +}
    +
+
+

Example Responses

None

+
+

Status Codes

+
+ + + + + + + +

Status Code

+

Description

+

201

+

Normal response.

+
+
+
+

Error Codes

See Error Codes.

+
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0500.html b/docs/dis/api-ref/dis_02_0500.html new file mode 100644 index 000000000..8ae0f2889 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0500.html @@ -0,0 +1,14 @@ + + +

Appendix

+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0501.html b/docs/dis/api-ref/dis_02_0501.html new file mode 100644 index 000000000..d06e34aa8 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0501.html @@ -0,0 +1,49 @@ + + +

Obtaining a Project ID

+

Obtaining a Project ID by Calling an API

You can obtain a project ID by calling the API for Querying Project Information Based on the Specified Criteria.

+

The API for obtaining the project ID is GET https://{Endpoint}/v3/projects/, where Endpoint indicates the endpoint of IAM. You can obtain the endpoint from Regions and Endpoints. For details about API authentication, see Authentication.

+

The following is an example response. The value of id is the project ID. If multiple IDs are returned, obtain the desired project ID based on the actual region (name).

+
{
+    "projects": [
+        {
+            "domain_id": "65382450e8f64ac0870cd180d14e684b",
+            "is_domain": false,
+            "parent_id": "65382450e8f64ac0870cd180d14e684b",
+            "name": "region_name",
+            "description": "",
+            "links": {
+                "next": null,
+                "previous": null,
+                "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99"
+            },
+            "id": "a4a5d4098fb4474fa22cd05f897d6b99",
+            "enabled": true
+        }
+    ],
+    "links": {
+        "next": null,
+        "previous": null,
+        "self": "https://www.example.com/v3/projects"
+    }
+}
+
+

Obtaining a Project ID from the Console

A project ID is required for some URLs when an API is called. To obtain a project ID, perform the following operations:

+
  1. Log in to the management console.
  2. Click the username and select My Credentials from the drop-down list.

    On the My Credentials page, view project IDs in the project list.

    +
+
Figure 1 Viewing project IDs
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/dis/api-ref/dis_02_0511.html b/docs/dis/api-ref/dis_02_0511.html new file mode 100644 index 000000000..17558dc47 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0511.html @@ -0,0 +1,18 @@ + + +

Before You Start

+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0512.html b/docs/dis/api-ref/dis_02_0512.html new file mode 100644 index 000000000..4f85c986a --- /dev/null +++ b/docs/dis/api-ref/dis_02_0512.html @@ -0,0 +1,10 @@ + + +

API Calling

+

DIS supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS. For details about API calling, see Calling APIs.

+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0513.html b/docs/dis/api-ref/dis_02_0513.html new file mode 100644 index 000000000..a173042dc --- /dev/null +++ b/docs/dis/api-ref/dis_02_0513.html @@ -0,0 +1,10 @@ + + +

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/dis/api-ref/dis_02_0514.html b/docs/dis/api-ref/dis_02_0514.html new file mode 100644 index 000000000..51930b516 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0514.html @@ -0,0 +1,10 @@ + + +

Constraints

+
  • For more constraints, see API description.
+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0515.html b/docs/dis/api-ref/dis_02_0515.html new file mode 100644 index 000000000..9bef405f6 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0515.html @@ -0,0 +1,25 @@ + + +

Concepts

+
  • Domain

    A domain is created upon successful registration. The domain has full access permissions for all of its cloud services and resources. It can be used to reset user passwords and grant user permissions. The domain is a payment entity and should not be used directly to perform routine management. For security purposes, create users and grant them permissions for routine management.

    +
  • User

    A user is created using an accounta domain to use cloud services. Each user has its own identity credentials (password and access keys).

    +

    The account, username, and password will be required for API authentication.

    +
  • Project

    Projects group and isolate resources (including compute, storage, and network resources) across physical regions. A default project is provided for each region, and subprojects can be created under each default project. Users can be granted permissions to access all resources in a specific project. For more refined access control, create subprojects under a project and create resources in the subprojects. Users can then be assigned permissions to access only specific resources in the subprojects.

    +
    Figure 1 Project isolating model
    +
  • Checkpoint

    When an application consumes data, the latest SN of the consumed data is recorded as a checkpoint. When the data is reconsumed, the consumption can be continued based on this checkpoint.

    +
  • Application

    Multiple applications can consume data in the same stream. The consumed data in the stream by each application is recorded by checkpoints generated for each application.

    +
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/dis/api-ref/dis_02_0516.html b/docs/dis/api-ref/dis_02_0516.html new file mode 100644 index 000000000..5e3b6e469 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0516.html @@ -0,0 +1,14 @@ + + +

Calling APIs

+
+
+ +
diff --git a/docs/dis/api-ref/dis_02_0517.html b/docs/dis/api-ref/dis_02_0517.html new file mode 100644 index 000000000..b9e373ac4 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0517.html @@ -0,0 +1,63 @@ + + +

Authentication

+
Requests for calling an API can be authenticated using either of the following methods:
  • Token-based authentication: Requests are authenticated using a token.
  • AK/SK-based authentication: Requests are authenticated by encrypting the request body using an AK/SK pair. AK/SK-based authentication is recommended because it is more secure than token-based authentication.
+
+

Token-based 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 used to obtain a user token.

+
+

A token specifies temporary permissions in a computer system. During API authentication using a token, the token is added to a request to get permissions for calling the API.

+

When calling the API to obtain a user token, you must set auth.scope in the request body to project.

+
{
+    "auth": {
+        "identity": {
+            "methods": [
+                "password"
+            ],
+            "password": {
+                "user": {
+                    "name": "username",
+                    "password": "********",
+                    "domain": {
+                        "name": "domainname"
+                    }
+                }
+            }
+        },
+        "scope": {
+            "project": {
+                "id": "xxxxxxxxxxxxxxxxxx"
+            }
+        }
+    }
+}
+

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, the API used to query a connection list. For example, if the token is ABCDEFJ...., X-Auth-Token: ABCDEFJ.... can be added to a request as follows:

+
+GET https://{{endpoint}}/v1/{project_id}/connections
+Content-Type: application/json
+X-Auth-Token: ABCDEFJ....
+
+

AK/SK-based Authentication

AK/SK-based authentication supports API requests with a body not larger than 12 MB. For API requests with a larger body, token-based authentication is recommended.

+
+

In AK/SK-based authentication, AK/SK is used to sign requests and the signature is then added to the requests for authentication.

+
  • AK: access key ID, which is a unique identifier used in conjunction with a secret access key to sign requests cryptographically.
  • SK: secret access key used in conjunction with an AK to sign requests cryptographically. It identifies a request sender and prevents the request from being modified.
+
To obtain an access key, perform the following steps:
  1. Log in to the management console, move the cursor to the username in the upper right corner, and select My Credentials from the drop-down list.
  2. On the My Credentials page, choose Access Keys, and click Create Access Key. See Figure 1.
    Figure 1 Clicking Create Access Key
    +
  3. Click OK and save the access key file as prompted. The access key file will be saved to your browser's configured download location. Open the credentials.csv file to view Access Key Id and Secret Access Key.
+
+
In AK/SK-based authentication, you can use an AK/SK to sign requests based on the signature algorithm or use the signing SDK to sign requests.

The signing SDKs are only used for signing requests and different from the SDKs provided by services.

+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/dis/api-ref/dis_02_0518.html b/docs/dis/api-ref/dis_02_0518.html new file mode 100644 index 000000000..be94a243a --- /dev/null +++ b/docs/dis/api-ref/dis_02_0518.html @@ -0,0 +1,46 @@ + + +

Response

+

Status Code

After sending a request, you will receive a response, including a 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 Codes.

+

For example, if status code 201 is returned for calling the API used to obtain a user token, the request is successful.

+
+

Response Header

Similar to a request, a response also has a header, for example, Content-Type.

+

Figure 1 shows the response header fields for the API used to obtain a user token. The x-subject-token header field is the desired user token. This token can then be used to authenticate the calling of other APIs.

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

(Optional) Response Body

The body of a response is often returned in structured format as specified in the Content-Type header field, such as JSON or XML. The response body transfers content except the response header.

+
+

The following is part of the response body for the API used to obtain a user token.

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

If an error occurs during API calling, an error code and a message will be displayed. The following shows an error response body.

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

In the response body, error_code is an error code, and error_msg provides information about the error.

+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/dis/api-ref/dis_02_0600.html b/docs/dis/api-ref/dis_02_0600.html new file mode 100644 index 000000000..8c5c43714 --- /dev/null +++ b/docs/dis/api-ref/dis_02_0600.html @@ -0,0 +1,12 @@ + + +

Overview

+

Welcome to Data Ingestion Service API Reference. Data Ingestion Service (DIS) provides efficient collection, transmission, and distribution capabilities for real-time IoT and Internet data, supports multiple IoT protocols, and provides various APIs to help you quickly build real-time data applications.

+

This document describes how to use application programming interfaces (APIs) to perform operations on DIS, such as uploading or downloading data. For details about all supported operations, see API Overview.

+

If you plan to access DIS through an API, ensure that you are familiar with DIS concepts. For details, see "Service Overview" in the DIS User Guide.

+
+
+ +
diff --git a/docs/dis/api-ref/en-us_image_0000001135802808.png b/docs/dis/api-ref/en-us_image_0000001135802808.png new file mode 100644 index 0000000000000000000000000000000000000000..323d460df25fd1e49527874f9a8d1efd49f9c064 GIT binary patch literal 23829 zcmd42c{E$y_b}e4leVflQe)autr}|{qa!Uv(N@i+hMH>@LfR_YDxv1NszeP*4Mh-X zsWBvo3Sz7wA|xRQBJoR~&*yo*>;3Qjt@T^)@4ai~=ALu+xoe+&_SwVPd%wMJV!(Gq z_{g3;d-(3&xn;g*&wk*ZJ%70!I>_xYp}sZd{{0nTZg67{94kuZHuk$+H@?1SPbHLh z$MFESefaqutAIUwjz{ng=H;=E^%ZRy=x*B^x1FORbWPP;Vk?$Y#TOsNW_r4B7v zc}2ijMZnHu*zoG0`9-&iuT@)n#LpWl>R&t%)7W-@to+q0e~}Zfn}wcz`HPZdX1r!*k2$4t~SfRY5_94z*bwPYxl(mTKYW;*|vs9hk9Eu|%gr+3=4T{Kq# zCFgwJ{D*eV$LErG0m}x2Zkb(rxz74p^=ijOgCgDEng{YJ-sUzNIaV>dAG#W~ccx*% zk&-ui{B_q&eT{-FKAtl_PEKpTIHyz|8dI)!=4|A&f%_QoT>KX`@*x3D6Ymd)+b$}3 zbTJ2}`6T|C&B;6iS@2k5yJ^Spr`TSjI2T-73F%Deg(HCFFUIB@Hg@vLUYN`lnT49c z&id(#N-T;=$YYpjX(Uc_&c*o)W75y)^NQiNYI-xL^C-mB!+N0gUmlPo^&bI{_`Ba1 zSc`5(9o<4>A(woi8gsv$s=e%$EV~US)A|u;xr?d!U5mchJB@i-pJ3fyoA;zrkTVl` zG7NRmR13?XoIH;zYbmsDzmWR6^2k^UHK{*xzNDN(QIWnnqmKrfb(cQE%tv|G-tlWD zduBS2n|uPvDw#X(cJuDCKVEYu;)P(qlJRam zfePZOx3?pGA(G#|Op%qmt7a^ep+yg?7P1p2dMy(~OXbrYeF>e=3B|hON(CD!jQXAE8v__pe1LW>^7G_IUyN7^bolVPfih#Ya->kCu+8i zi=ThF!+5Qw88r9aD{mWC?q|v-8B`U1yD6NW(v7Enh3s4k8QYaky*(Lphmh*}CDJbL zl`;O2mWNq^1XRn(*L5i=Uq00s?42K-hHsNi7 z%T*e(!Rw6}a}bZi=n;3bcKj-rG)G+1=Fm$smTBrN-CLvCy-hoDAT0V`GJ2Uj2X31$ zAG~)tsnRp@9zSI<#i+vDze^i6XNY>>j(}dAgylb7oyj_^Pmd`^*r&NJl7xDeBE^i=H9t`^UDK3P`IKkEm0RD<}R|myS-uU?r$2UnXh#@++3{o z`6|s?V-tsrRCv3g+*?IzRQCVT7~F|APW}}frvBNz_tusH11y)d^V};r<=Iu|XWMJS z5#IPN5!Z%?wU<{AsSX(Fy1MqQ2i2c{o3yU*0&rc4Cm{asw^K!w4LWrMD1|+&&f&D9q&n%iF^hXXcNUG@@`CJ-dHtEbD_Zuf{RMn*jlp|m zO-ltvdur#`BuHulZ|02ra>m8h7|4bAmyZAJojc}uQcEnv%wjp$Z{jHLX-$se?#CPg z$xi2TfV~n96!y7C@2pntP1Cn?1Y^$S=GCR0cs6>Kpk6u-B2ruF;P#Gpq z9hz(LEKJv-vg_gIrdg?jLXsl_BI%IJ3oZOtdOJTaf<{BX-!|TzHeKyLOWGDi?7(bv z=f*99jO@EZ}26#Jo`#}mUKUt4cgr)g?NPRLr<1mrdWntv45D&9IvbJ46AREWY zS4X{hZzc1k%oQc;HxwrTF%jciHzY5E+oXO!5L6Ib-xw9IMpLokZY^Kr|5=KI7Tb?D z=?Wggg3N|9_S3BbS8m|xya2NHm(Td~@r>LFiCth&@{(rg1K}ult>osZg)P^SCNR9o ziS~W9T!-Bta4yG>WWi^y%km}#3McDD3I{aWq3Ks|NiDQleS^j5#&$}36{Us^Ci|rd4<_6j}dTd6vr+*j! zi>T%HgH5`;$M#yrw}I15o3OVKv7>U=YQkU*JLx@#^3*;dskw_z!kmJZ7y7V5l>Aco zexEMk>|_Vbe$?}4w`d<2)Nkr}^5ZF>N^^zCX$ia6?xw$xb=B;sd&3_?K9Uo~Ab#@p z!m8-VnrG&vu(}MUazEZ)KsDNg;fJ3A&lwIad!fJzzkE#+OW!n7o@?9uN3kC|A0>xU z0B;JaMwl2jA9cuX{V8+pS=8=S+nV%MbcBs-`KI;8634n!5G={4%TK~Lj>o+OvK`Eo zAjwOc#n(M7Wz&Q({M}m?nFM;tg#Z0uuMtUxn`PJQGX`@zZLU_jlSd~%q7;sG&(A$H z;eR)s-=!YgoVLZV#4P6W6s}}!E=p&EPxMFYYp`2{O$r6Ld8JGK*3*&hy->dqO%U71TITy z>0W%b#r)!c`BKK!^kAo{EI}W8fB0L!#q3{7)~2b4<99m-jQv9=-BvsL=rGQg2lEj8 zl`pE)XtSuT8G|aMW&`PV;B@P(N48gOh&SjF2kDipVyD7r^vHs|GgL ?pUP7KFTN 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 literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/en-us_image_0000001238312593.jpg b/docs/dis/api-ref/en-us_image_0000001238312593.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0e263d9b79bf2d87a08575ce6509555ca60d44c GIT binary patch literal 112824 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 literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/en-us_image_0170647338.png b/docs/dis/api-ref/en-us_image_0170647338.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f16671971f9e54c930a12bf9fb9dccd29a2a8c GIT binary patch literal 42231 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 &Jji!|#@?sr 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

MsdAc+3IvaDb`0+@{6{iKa+%bXzHOo7P%Q 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 + +

Permissions Policies and Supported Actions

+

This chapter describes fine-grained permissions management for your DIS. If your cloud account does not need individual IAM users, then you may skip over this chapter.

+

By default, new IAM users do not have any permissions assigned. You need to add a user to one or more groups, and assign permissions policies to these groups. The user then inherits permissions from the groups it is a member of. This process is called authorization. After authorization, the user can perform specified operations on DIS based on the permissions.

+

You can grant users permissions by using roles and policies. Roles are a type of coarse-grained authorization mechanism provided by IAM that defines permissions related to user responsibilities. Policies define API-based permissions for operations on specific resources under certain conditions, allowing for more fine-grained, secure access control of cloud resources.

+

Note:

+

Policy-based authorization is useful if you want to allow or deny the access to an API.

+

An account has all of the permissions required to call all APIs, but IAM users must have the required permissions specifically assigned. The permissions required for calling an API are determined by the actions supported by the API. Only users who have been granted permissions allowing the actions can call the API successfully. For example, if an IAM user queries MRS clusters using an API, the user must have been granted permissions that allow the dis:streams:list action.

+

Supported Actions

+

DIS provides system-defined policies that can be directly used in IAM. You can also create custom policies and use them to supplement system-defined policies, implementing more refined access control. Operations supported by policies are specific to APIs. The following are common concepts related to policies:

+

· Permission: A statement in a policy that allows or denies certain operations.

+

· APIs: REST APIs that can be called in a custom policy.

+

· Action: Specific operations that are allowed or denied.

+

· IAM or enterprise projects: Type of projects for which an action will take effect. Policies that contain actions supporting both IAM and enterprise projects can be assigned to user groups and take effect in both IAM and Enterprise Management. Policies that only contain actions for IAM projects can be used and only take effect for IAM.

+

Note:

+

The check mark (√) indicates that an action takes effect. The cross mark (x) indicates that an action does not take effect.

+

Table 1 lists the actions that can be defined in custom policies of DIS. All actions listed in the following table support both Project and Enterprise Project.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Permissions policies and supported actions

Permissions

+

APIs

+

Actions

+

Project

+

Enterprise Project

+

Creating a consumer app

+

POST /v2/{project_id}/apps

+

dis:apps:create

+

+

×

+

Deleting an app

+

DELETE /v2/{project_id}/apps/{app_name}

+

dis:apps:delete

+

+

×

+

Querying apps

+

GET

+

/v2/{project_id}/apps

+

dis:apps:list

+

+

×

+

Querying app details

+

GET

+

/v2/{project_id}/apps/{app_name}

+

dis:apps:get

+

+

×

+

Querying the app consumption status

+

GET

+

/v2/{project_id}/apps/{app}/streams/{stream_name}

+

dis:appState:get

+

+

+

Querying all events of a user in pagination mode

+

GET

+

/v1/{project_id}/events

+

dis:events:list

+

+

×

+

Creating a subscription

+

POST

+

/v1/{project_id}/event-subs

+

dis:eventEnumSubs:create

+

+

×

+

Deleting a subscription

+

DELETE

+

/v1/{project_id}/event-subs/{sub_id}

+

dis:eventEnumSubs:delete

+

+

×

+

Modifying a subscription

+

PUT

+

/v1/{project_id}/event-subs/{sub_id}

+

dis:eventEnumSubs:update

+

+

×

+

Querying all subscriptions of a user

+

GET

+

/v1/{project_id}/event-subs

+

dis:eventEnumSubs:list

+

+

×

+

Adding a permission policy

+

POST

+

/v2/{project_id}/streams/{streamName}/policies

+

dis:streamPolicies:create

+

+

+

Querying permission policies

+

GET

+

/v2/{project_id}/streams/{streamName}/policies

+

dis:streamPolicies:list

+

+

+

Deleting a permission policy of a stream

+

DELETE

+

/v2/{project_id}/streams/{streamName}/policies

+

dis:streamPolicies:delete

+

+

+

Querying details of a stream

+

GET

+

/v2/{project_id}/streams/{streamName}

+

dis:streams:get

+

+

+

Creating a stream

+

POST

+

/v2/{project_id}/streams

+

dis:streams:create

+

+

+

Deleting a Stream

+

DELETE

+

/v2/{project_id}/streams/{stream_name}

+

dis:streams:delete

+

+

+

Querying streams

+

GET

+

/v2/{project_id}/streams

+

dis:streams:list

+

+

×

+

Updating stream information

+

PUT

+

/v2/{project_id}/streams/{stream_name}/update

+

dis:streams:update

+

+

+

Creating a dump task

+

POST

+

/v2/{project_id}/streams/{stream_name}/transfer-tasks

+

dis:transferTasks:create

+

+

+

Updating a dump task

+

PUT

+

/v2/{project_id}/streams/{stream_name}/transfer-tasks

+

dis:transferTasks:update

+

+

+

Querying dump tasks

+

GET

+

/v2/{project_id}/streams/{stream_name}/transfer-tasks

+

dis:transferTasks:list

+

+

+

Querying details of a dump task

+

GET

+

/v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}

+

dis:transferTasks:get

+

+

+

Deleting a dump task

+

DELETE

+

/v2/{project_id}/streams/{stream_name}/transfer-tasks/{task_name}

+

dis:transferTasks:delete

+

+

+

Uploading Data to a DIS Stream

+

POST

+

/v2/{project_id}/records

+

dis:records:write

+

+

+

Obtaining a data cursor

+

GET

+

/v2/{project_id}/cursors

+

dis:records:readCursor

+

+

+

Downloading data from a DIS stream

+

GET

+

/v2/{project_id}/records

+

dis:records:read

+

+

+

Adding a checkpoint

+

POST

+

/v2/{project_id}/checkpoints

+

dis:checkpoints:commit

+

+

+

Querying checkpoint details

+

GET

+

/v2/{project_id}/checkpoints

+

dis:checkpoints:get

+

+

+

Deleting a checkpoint

+

DELETE

+

/v2/{project_id}/checkpoints

+

dis:checkpoints:delete

+

+

+

Filtering streams by tag

+

POST

+

/{project_id}/{resource_type}/resource_instances/action

+

dis:tagResources:list

+

+

×

+

Adding or deleting resource tags in batches

+

POST

+

/{project_id}/{resource_type}/{resource_id}/tags/action

+

dis:tagResources:update

+

+

×

+

Adding a Tag to a Specified Stream

+

POST

+

/{project_id}/{resource_type}/{resource_id}/tags

+

dis:tagResources:create

+

+

×

+

Deleting a tag of a specified stream

+

DELETE

+

/{project_id}/{resource_type}/{resource_id}/tags/{key}

+

dis:tagResources:delete

+

+

×

+

Querying all tags of a specified region

+

GET

+

/{project_id}/{resource_type}/tags

+

dis:tags:list

+

+

×

+
+
+

Note: For the actions not listed Table 1, for example, viewing app quota (/{projectId}/quotas) and viewing DIS resource statistics on the homepage (/v1/{projectId}/statistics), configure system-defined policy DIS User, DIS ReadOnlyAccess, DIS CommonOperations, or DIS FullAccess for users.

+
diff --git a/docs/dis/api-ref/public_sys-resources/ExpandCollapse.js b/docs/dis/api-ref/public_sys-resources/ExpandCollapse.js new file mode 100644 index 000000000..3f1b7db00 --- /dev/null +++ b/docs/dis/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/dis/api-ref/public_sys-resources/caution_3.0-en-us.png b/docs/dis/api-ref/public_sys-resources/caution_3.0-en-us.png new file mode 100644 index 0000000000000000000000000000000000000000..60f60762138fe7d98fa081415cf26a4943897779 GIT binary patch literal 2752 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: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/dis/api-ref/public_sys-resources/commonltr_print.css b/docs/dis/api-ref/public_sys-resources/commonltr_print.css new file mode 100644 index 000000000..a59823141 --- /dev/null +++ b/docs/dis/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/dis/api-ref/public_sys-resources/commonrtl.css b/docs/dis/api-ref/public_sys-resources/commonrtl.css new file mode 100644 index 000000000..947a9a033 --- /dev/null +++ b/docs/dis/api-ref/public_sys-resources/commonrtl.css @@ -0,0 +1,2 @@ +.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/dis/api-ref/public_sys-resources/danger_3.0-en-us.png b/docs/dis/api-ref/public_sys-resources/danger_3.0-en-us.png new file mode 100644 index 0000000000000000000000000000000000000000..47a9c723532a0ac410285e5152684262127922bf GIT binary patch literal 2771 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 literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/icon-arrowdn.gif b/docs/dis/api-ref/public_sys-resources/icon-arrowdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..84eec9be2f2ce458e888f8a9b803f9387247726a GIT binary patch literal 68 zcmZ?wbhEHbzkByxQ$u Mo$o?7J5~m305MV#!~g&Q literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/icon-arrowrt.gif b/docs/dis/api-ref/public_sys-resources/icon-arrowrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..39583d168d6db303b366b5b8c1780698a6bb6017 GIT binary patch literal 70 zcmZ?wbhEHbEMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/icon-danger.gif b/docs/dis/api-ref/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..079c79b263f4b48089f3b3256154c73e7699593f GIT binary patch literal 1086 zcmW+#YfRQ<6hA3LZMyP?V}KhnEtF{Q4vGxS52AozEVM85nq$#%tv8gRF!3GhgM?_) zd5Luv3SKrXFTGCpn$y>EMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/icon-huawei.gif b/docs/dis/api-ref/public_sys-resources/icon-huawei.gif new file mode 100644 index 0000000000000000000000000000000000000000..a31d60f895af919d33855217ca02daf4093136d7 GIT binary patch literal 2767 zcmV;=3NZCYNk%w1VaEV40Oo%H*MEWRpQG)+!RUX6`tR@RDKg4%aM+KK_}}3B+S#H2 z0rt<*_Nl4!k%7|y4fwgY^uNNg00pZ61NzIz@q2NyEiLIHE%S?g^NEbfKt%9!YU?yQ z^qh&+U}WbD8{q&E?Mq9<013DN2H5})@N8$u01CkX3Fs9f^{bWHKuGLFOZ1kS)=*aD z01@p=RQ9r(>pemK^YiUeQPU6`>94W!hk53YleQ2Q>_SB7aCr2fj@; z@a|n&?qX^0W?<$J9`9pa@`8Bj9VzWnT-qQk!yqQl01W6ECF?mp=LHtlFgo|Iv-PHs z+HiFBprpVM7yReuz5od5zrUyu5$;)5@{gDATVup9HOgRO=U{2(0u;*t3-Hg-^OuGE z;N9vkH}7a--=Co1Fg#jPP{_r^k&B8kCM0%mZLFxL@$v9KH8SJk;?~sDy0^BTnwV%{ zUQ9zlgnfM9U}wHiP~xwz{`dCrZ*%7e7{X9d^{Afom69VE761SLA^8LW004ggEC2ui z0LK6@000O7fPaF6goTEOh>41ejE#|lU+C8$A-c{-jb1$W_sAqMbtN`+RZ#DGFR(dnrcRE3N%f+!F;*y7(oOv#1FPiAwy#YP$z^Q7U<_8BLs** zMSr>_(L`oBgxA?;z>x3<218xJ;14v)$l4!yG&Wrk_I1$$0*;vB$B=#`at4uppizkb zkVG1Zq>_oSkp_`a7SaZiZXiMjk!m2q29j+I!X%PpB5B5wO%5V}2qJRl1%NsHfxr&G z=|x^!dAKu_41Dql0y7LOA)N(0dcZ^rABfh-m_;ITB$a5UdB~$fR(S{-NTzYfmPE#Z z$dyBCddM0`(jjJQ3^=Hu0tmpW@WUTds1O^W zCv4aPqTVsWsFRSgiX^m^Dgr8zYZ&qdl5-rgEs}5?A_tOhoSJHxtD4)WAg_+-CV)r$ z0l^3=PP3O0e*huI221P;!@n>Lqi=>hZs_9&J75vyw2nR*>5$YWnFy(5hH1$EwSHt- z2&Y^c@+FZL3&QBRsy<8z0uiv;-+usJMIdJZ34w1G1pu?}1~|L$M-&7rk*ppEBV3oW z3{UE?w2~S^sl>(pGc6ETQUgwH}48uSiAJo0SA(QX~FrGzYvq#TC0!EGVmk{K=`YG64w z*^4Iq2N`U_YT26(@Ww;iA6V3a3V*n8!U;+!QN-&o;K;WJKrdVR4kI*6wC0H)Z8+gt z8&Y|wjA~4X(?lBohtwStGUbrnULHxSg=BE{y8s3-FXI^_2KJ7l* zPUi?^WVSHxgDj2s;6@ith~r!?-DM$hAerqT7$efv{s0FgQSEnvBN74j@P$DTKnvHC zONlTuy0+nk2Y*mO7rMX%Cg?#AOZY{0)h5f{2_S7&W;+3~xxv`varUz{DmpF%e^`f&wJ41t9(5fhwzv1mBc| z0U*EuBM2j%FvtTFnh*k5Fk|UZh`TZf2my8Qf){uKMUtgzel#qE{5o z`T+owlz=pEZ~#HrKnm`Pm2OzzgBhrem4EOJodD;_ahfxf-U+}Ak|4_v=x&*|EE67c z`G;K+;#whFp8pE*u^;}yhknQwAj5S;KNQlDsB)$xqbbb@AmI*w_<|O)xy2+vAOLDp z8yCVE${l#|oS_`S5dZ^$BP4;HUf`rVX&Fy4%@bn4W7;49dBA^~$q>dQOL?8kgXdnQvsYOnDfj24t0FVQ&GJsH);SXF0X(+eq z0|aFCq_QkQ2uwgnL@)|$U)!lnaS7A<-BO9Aav~Zq1~shtZ;*=2X&Qw1zoAY~flO_x zQ=i%a0w5p*o16;-5U|cJ{sE(En`{^}sx}@hzy~=vDN0qkRui}|sdcU4U8UAnL&&wT ze-NTA73oVe_41G0LefE{2Z>hMA+geI=u@QtfIkQT2`1nUZwBxt8^}v-apD4J9dHDm z*r2j$RqI-*fP_WBP>(V+WFp;)q}Cd-rO7KqPBT@AJ}!>D^n`Dbmde!NE;eOIpur!e zT2+HIfiCh&!V$`4~D_J+6+9nP?X4+~QQR3Nd6O>yUni+~O!R{(#Yf%|x3 zV=w6V57*_SoPYe_5lO*{ETyMCXS!kI{qmTJC@5?}tYs@Z`Gp%cnIOCjX8WdC#YjMN znOSg%0i?hn3uwZe>0DG@D8{!L9NVviU!0?6(AlZm;xWpa)Zb-c0Yf<`I615cvC$3@R|NPo+jf8PRu)%BB zhMd<%u5!4#ylXATHvtr$a54bk<~ZL%26n#lMX-S98Gr)LaZUq?L;OQXHv|E!0Ok|h zR|}ywHv~IJbrC%JsW+&2(zpJHJ2XAlm3#yMI(PL)OS76>Px~OC`E{mNAnK0zLI%qI z)ZlJG?RXaiuD@;tv`>NzH;90J?Vk56!rvj>leB^Xjy?$j0N@7pwE`ImPx(Jo;pSvu Vyd?-=a{xfJ@}LjB=qC{f06U7uGEOJ7jGVWt0R$WZ8s=je-u*DOe&kq9}!i z4KyN^y7WUtlMt&*F%bljtRbDEJamX6>@vOi{twMwE+=kqtJr%yLc-a1j}Z>-)`f9GBO%WDhy=L0>5=eLzUZCI?G``P_| zXl3c^-NL}=_M!Zh=FG7pU)shB58htr9~}O0uVbq2_rt-Fxv_(zmmdB7)lfOReyZ>D zrqum6#Z#+~moGM-oS4Ziby(A(@4L&ZrWcR4wV&_mTide#$G4kXKF-|cGp}2pJe$2t GE&l)<3Z_>8 literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/icon-notice.gif b/docs/dis/api-ref/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..409070650a49518feb1624c624d814c3bfa63d2e GIT binary patch literal 962 zcmb7D&r8&C5S<{wSd_qn6)U)w5LOaRh!N}_*49lD)S!dZp@M<3gPIX|@UR9-fz+X3 zAaT9)OY{xZtO-;RC85Vab;JEUNIMS5f^r$7-e%-XK`j{0+N$CsgpRd6B1wp z8dw-cH^rU^H4`&7qgabf)l^K`l!66{q9$U(CKRO5%W5pfY)s&YQ6n`HBR0ZTum%`N zgC%I8hQ+`JG_WvCAt-W$sIn@BKCDG1qQWW^a=`*c7G+i@s0S(ZDv1&+K_2`7O-#cM z=m!ZX1Z#kSG+3e)Jg^wpfCd(Yb5TZ)U=a!DwsG z)Z`|1ejMK4ap%CHj;%+>T6=D++5I=uBbQ$fZ48cf{hV1}9&Njl-I}i7e0#6Hdug@s zsr-57_=gLr&9Ros$k}}M>tJ77=hEJ}iPaZ%8|P+gUbS|Oj}5I{|5nZZc)C1$e*Rj` d`09hYXJ4M@PhCx)dHK8WZo1*|*q+^V@*ncduk8Q; literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/icon-tip.gif b/docs/dis/api-ref/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..c47bae05c9fd17c02a851d96cfac67bf194498d8 GIT binary patch literal 879 zcmchWKWmj?48@OdDOZPr)a61!OE4yGD)salg#|^Ix$qIEF#uk)V>D{95e^!2r`i+9t# zTMu5YtUcd+@#gp0tDE;9ug>oLIzL$6dOx4-t#2PKExu1KulwoYeD?Os#mVO%AMWih HO|EMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/imageResize.js b/docs/dis/api-ref/public_sys-resources/imageResize.js new file mode 100644 index 000000000..e4c520739 --- /dev/null +++ b/docs/dis/api-ref/public_sys-resources/imageResize.js @@ -0,0 +1,4 @@ +/** 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/dis/api-ref/public_sys-resources/imageclose.gif b/docs/dis/api-ref/public_sys-resources/imageclose.gif new file mode 100644 index 0000000000000000000000000000000000000000..56818c26b104c9247a82680f6da2c69f9bd58033 GIT binary patch literal 155 zcmZ?wbhEHb6krfwSj52a|NsA^N008^yLao>t!vk=Wq<+2pDdgV46F<~AOVnC295*< zZWf7v1q%)~GqG@}I5a$PY-W<+k~py8;bA60Nuebx1QU-kGH?}b>G+uJ(X7m#l2h^N zfyZQV*Q^xD%@4dL8RnPm*-_+hs@>N4-xki`wBrl-gVR_fCoewKsjI(AM?iqV8URhk BH5vc_ literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/imageclosehover.gif b/docs/dis/api-ref/public_sys-resources/imageclosehover.gif new file mode 100644 index 0000000000000000000000000000000000000000..3bcf231f1d23f6e6e8a3cbb2d501770ff40e495a GIT binary patch literal 179 zcmZ?wbhEHb6krfw*v!E2|Ns9f_r6cL_PyuY_m*qltIvHeKKEU6?Ry3sK=CIFCj$cq zgAPa@WCjCA0)rrjM#F*y2b)=0IBW_U9ym6$O7NxJ_@LO-!NVJ~=m_h}-YkIww~n098Sz4fXkH$Ol3p2EY;V-Pv{Ap;9@ L-=-QV0S0RTMs_~T literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/imagemax.gif b/docs/dis/api-ref/public_sys-resources/imagemax.gif new file mode 100644 index 0000000000000000000000000000000000000000..49fe390b113c71fa56110f3dc36d9a6a50f5b6e6 GIT binary patch literal 181 zcmZ?wbhEHb6krfw*v!E2|NsB*-@m_q|NhytXZP;iJ9_l!-o1ObZr!?e?OFzGK=CIF zCj$c~gAPa%WCjCA5`!>@jK&3qre+R70hI^^MW<#yb{-yviwm6@MFeF$b_66GV`j9_ z`y-*yc%qZdk;`CZprRuayMvm=gar=H)AhY)O*yei`Cv0s<1e09K`#Opy45NjUAbk& Q(dDf3^IRev5*!$;0Rb{R%K!iX literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/imagemaxhover.gif b/docs/dis/api-ref/public_sys-resources/imagemaxhover.gif new file mode 100644 index 0000000000000000000000000000000000000000..387b0a981ad70a1123a8d97d76f96c014c7f8619 GIT binary patch literal 185 zcmZ?wbhEHb6krfw*v!E2|NsB@K=l3pz3>08z5l=W{r{!+zDFGeqW4~V-#hJnZ@Bfn z=GOO;Yu__~f#OdVP6h@(1|1L&WCjCA8iOo{jD~S$J)w3@U??y!%=BxkR{1 fG<+7hb}F&15=pzXSZpzujlfq`Cl)4VCI)K&ahXC) literal 0 HcmV?d00001 diff --git a/docs/dis/api-ref/public_sys-resources/jquery-migrate-1.2.1.min.js b/docs/dis/api-ref/public_sys-resources/jquery-migrate-1.2.1.min.js new file mode 100644 index 000000000..fc18734e9 --- /dev/null +++ b/docs/dis/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){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}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&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),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/dis/api-ref/public_sys-resources/jquery-ui.min.js b/docs/dis/api-ref/public_sys-resources/jquery-ui.min.js new file mode 100644 index 000000000..ba0b043dc --- /dev/null +++ b/docs/dis/api-ref/public_sys-resources/jquery-ui.min.js @@ -0,0 +1,12 @@ +/*! jQuery UI - v1.12.1 - 2016-10-02 +* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/selectmenu.js, widgets/slider.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.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 +* Copyright jQueryHW2 Foundation and other contributors; Licensed MIT */ + +(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQueryHW2)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("
"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(p.inline?p.dpDiv.parent()[0]:p.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var c=!1;t(document).on("mouseup",function(){c=!1}),t.widget("ui.mouse",{version:"1.12.1",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(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),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(e){if(!c){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),c=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,c=!1,e.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}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},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;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.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=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0) +},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?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(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.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,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.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(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&u(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var u=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&u(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=u(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({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,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),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(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(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),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".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=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),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,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/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&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-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")];4>e;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;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),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:++i.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,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,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}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0}; +t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",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 e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("
"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",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 t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQueryHW2(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQueryHW2(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQueryHW2:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t(" ",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.leftthis.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.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){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.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||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].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(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :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 e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.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){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_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(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;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 e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.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 e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).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(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.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(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.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.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()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.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":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.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(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.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 e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var 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",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",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 e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("