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

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


The following commit(s) were added to refs/heads/master by this push:
     new bda8f4c305 [INLONG-10532][SDK] Add dataproxy python SDK sample and the 
corresponding document (#10546)
bda8f4c305 is described below

commit bda8f4c305712b5c4a743dd8eb94908a28bbb90e
Author: LeeWY <[email protected]>
AuthorDate: Tue Jul 2 11:45:43 2024 +0800

    [INLONG-10532][SDK] Add dataproxy python SDK sample and the corresponding 
document (#10546)
    
    Co-authored-by: jameswyli <[email protected]>
---
 .../dataproxy-sdk-python/README.md                 | 76 ++++++++++++++++++++++
 .../dataproxy-sdk-python/demo/config_example.json  | 30 +++++++++
 .../dataproxy-sdk-python/demo/send_demo.py         | 75 +++++++++++++++++++++
 3 files changed, 181 insertions(+)

diff --git a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/README.md 
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/README.md
index d85a8632f3..bb490d8743 100644
--- a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/README.md
+++ b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/README.md
@@ -39,3 +39,79 @@ chmod +x ./build.sh
 After the build process finished, you can import the package (`import 
inlong_dataproxy`) in your python project to use InLong dataproxy.
 
 > **Note**: When the C++ SDK or the version of Python you're using is updated, 
 > you'll need to rebuild it by re-executing the `build.sh` script
+
+## Config Parameters
+
+Refer to `demo/config_example.json`.
+
+| name                     | default value                                     
                 | description                                                  
                                              |
+|:-------------------------|:-------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------|
+| thread_num               | 10                                                
                 | number of network sending threads                            
                                              |
+| inlong_group_ids         | ""                                                
                 | the list of inlong_group_id, seperated by commas, such as 
"b_inlong_group_test_01, b_inlong_group_test_02" |
+| enable_groupId_isolation | false                                             
                 | whether different groupid data using different buffer pools 
inside the sdk                                 |
+| buffer_num_per_groupId   | 5                                                 
                 | number of buffer pools of each groupid                       
                                              |
+| enable_pack              | true                                              
                 | whether multiple messages are packed while sending to 
dataproxy                                            |
+| pack_size                | 4096                                              
                 | byte, pack messages and send to dataproxy when the data in 
buffer pool exceeds this value                  |
+| ext_pack_size            | 16384                                             
                 | byte, maximum length of a message                            
                                              |
+| enable_zip               | true                                              
                 | whether zip data while sending to dataproxy                  
                                              |
+| min_ziplen               | 512                                               
                 | byte, minimum zip len                                        
                                              |
+| enable_retry             | true                                              
                 | whether do resend while failed to send data                  
                                              |
+| retry_ms                 | 3000                                              
                 | millisecond, resend interval                                 
                                              |
+| retry_num                | 3                                                 
                 | maximum resend times                                         
                                              |
+| max_active_proxy         | 3                                                 
                 | maximum number of established connections with dataproxy     
                                              |
+| max_buf_pool             | 50 `*`1024`*` 1024                                
                 | byte, the size of buffer pool                                
                                              |
+| log_num                  | 10                                                
                 | maximum number of log files                                  
                                              |
+| log_size                 | 10                                                
                 | MB, maximum size of one log file                             
                                              |
+| log_level                | 2                                                 
                 | log level: trace(4)>debug(3)>info(2)>warn(1)>error(0)        
                                              |
+| log_file_type            | 2                                                 
                 | type of log output: 2->file, 1->console                      
                                              |
+| log_path                 | ./logs/                                           
                 | log path                                                     
                                              |
+| proxy_update_interval    | 10                                                
                 | interval of requesting and updating dataproxy lists from 
manager                                           |
+| manager_url              | 
"http://127.0.0.1:8083/inlong/manager/openapi/dataproxy/getIpList"; | the url of 
manager openapi                                                                 
                |
+| need_auth                | false                                             
                 | whether need authentication while interacting with manager   
                                              |
+| auth_id                  | ""                                                
                 | authenticate id if need authentication                       
                                              |
+| auth_key                 | ""                                                
                 | authenticate key if need authentication                      
                                              |
+
+## Usage
+
+Follow these steps to use the DataProxy Python SDK:
+
+1. **Initialize the SDK**: Before using the SDK, you need to initialize it by 
calling `init_api(config_file)`. The `config_file` parameter is the path to 
your configuration file. It is recommended to use an absolute path. Please note 
that this function only needs to be called once per process.
+
+   Example:
+   ```python
+   inlong_api = inlong_dataproxy.InLongApi()
+   inlong_api.init_api("path/to/your/config_file.json")
+   ```
+
+2. **Send data**: To send data, use the `send(inlong_group_id, 
inlong_stream_id, msg, msg_len, call_back_func = null)` function. The 
parameters are as follows:
+    - `inlong_group_id`: The group ID associated with the data.
+    - `inlong_stream_id`: The stream ID associated with the data.
+    - `msg`: The data message to be sent.
+    - `msg_len`: The length of the data message.
+    - `call_back_func` (optional): A callback function that will be called if 
your data fails to send.
+
+   Example:
+   ```python
+   inlong_api.send("your_inlong_group_id", "your_inlong_stream_id", 
"your_message", len("your_message"), call_back_func = your_callback_function)
+   ```
+
+3. **Close the SDK**: Once you have no more data to send, close the SDK by 
calling `close_api(max_waitms)`. The `max_waitms` parameter is the maximum time 
interval (in milliseconds) to wait for data in memory to be sent.
+
+   Example:
+   ```python
+   inlong_api.close_api(1000)
+   ```
+
+4. **Function return values**: The functions mentioned above return 0 if they 
are successful, and a non-zero value indicates failure. Make sure to check the 
return values to ensure proper execution.
+
+## Demo
+
+You can refer to the `/demo/send_demo.py` file. To run this demo, you first 
need to ensure that the SDK has been built and installed properly. Then, follow 
these steps:
+
+1. Navigate to the `demo` directory in your terminal or command prompt.
+2. Modify the configuration settings in `config_example.json` as needed to 
match your specific use case.
+3. Execute the following command, replacing `[inlong_group_id]` and 
`[inlong_stream_id]` with the appropriate IDs:
+
+   ```bash
+   python send_demo.py config_example.json [inlong_group_id] [inlong_stream_id]
+   ```
\ No newline at end of file
diff --git 
a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/demo/config_example.json 
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/demo/config_example.json
new file mode 100644
index 0000000000..252c8808a3
--- /dev/null
+++ 
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/demo/config_example.json
@@ -0,0 +1,30 @@
+{
+  "init-param": {
+    "inlong_group_ids": "test_pulsar_group",
+    "manager_url": 
"http://127.0.0.1:8083/inlong/manager/openapi/dataproxy/getIpList";,
+    "manager_update_interval": 2,
+    "manager_url_timeout": 5,
+    "msg_type": 7,
+    "max_proxy_num": 8,
+    "per_groupid_thread_nums": 1,
+    "dispatch_interval_zip": 8,
+    "dispatch_interval_send": 10,
+    "recv_buf_size": 10240000,
+    "send_buf_size": 10240000,
+    "enable_pack": true,
+    "pack_size": 409600,
+    "pack_timeout": 3000,
+    "ext_pack_size": 409600,
+    "enable_zip": true,
+    "min_zip_len": 512,
+    "tcp_detection_interval": 60000,
+    "tcp_idle_time": 600000,
+    "log_num": 10,
+    "log_size": 104857600,
+    "log_level": 3,
+    "log_path": "./",
+    "need_auth": false,
+    "auth_id": "",
+    "auth_key": ""
+  }
+}
diff --git 
a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/demo/send_demo.py 
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/demo/send_demo.py
new file mode 100644
index 0000000000..e8c33bc23a
--- /dev/null
+++ b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-python/demo/send_demo.py
@@ -0,0 +1,75 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import sys
+
+import inlong_dataproxy
+
+# user defined callback function
+def callback_func(inlong_group_id, inlong_stream_id, msg, msg_len, 
report_time, ip):
+    print("******this is call back, print info******")
+    print("inlong_group_id:", inlong_group_id, ", inlong_stream_id:", 
inlong_stream_id)
+    print("msg_len:", msg_len, ", msg content:", msg)
+    print("report_time:", report_time, ", client ip:", ip)
+    print("******call back end******")
+    return 0
+
+def main():
+    if len(sys.argv) < 2:
+        print("USAGE: python send_demo.py config_example.json 
[inlong_group_id] [inlong_stream_id]")
+        return
+
+    inlong_api = inlong_dataproxy.InLongApi()
+
+    # step1. init api
+    init_status = inlong_api.init_api(sys.argv[1])
+    if init_status:
+        print("init error, error code is: " + init_status)
+        return
+
+    print("---->start sdk successfully")
+
+    count = 5
+    inlong_group_id = "test_pulsar_group"
+    inlong_stream_id = "test_pulsar_stream"
+
+    if (len(sys.argv) == 4):
+        inlong_group_id = sys.argv[2]
+        inlong_stream_id = sys.argv[3]
+
+    print("inlong_group_id:", inlong_group_id, ", inlong_stream_id:", 
inlong_stream_id)
+
+    msg = "python sdk|1234"
+
+    # step2. send message
+    print("---->start tc_api_send")
+    for i in range(count):
+        send_status = inlong_api.send(inlong_group_id, inlong_stream_id, msg, 
len(msg), callback_func)
+        if send_status:
+            print("tc_api_send error, error code is: " + send_status)
+
+    # step3. close api
+    close_status = inlong_api.close_api(10000)
+    if close_status:
+        print("close sdk error, error code is: " + close_status)
+    else:
+        print("---->close sdk successfully")
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file

Reply via email to