# llnw 环境部署 ## 相关资料 网站 https://control.llnw.com/acontrol/#/login API explorer: https://support.limelight.com/public/explorer/llnw-api-explorer.html 文档 https://support.limelight.com/public/openapi/configuration/index.html SDK https://github.com/llnw/llnw-sdk-python Python打包工具`Nuitka` https://github.com/Nuitka/Nuitka GRPC https://grpc.io/docs/languages/python/basics/ ## 信息 **GRPC 端口:50052** **代码生成** ```shell python3 gencode.py ``` **启动** ```shell python3 src/main.py ``` ## 编译流程 ### `Miniconda` 安装 ```shell #下载 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh #安装 ./Miniconda3-latest-Linux-x86_64.sh #关闭自启动conda conda config --set auto_activate_base false #miniconda源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ ``` ### 设置环境 ```shell conda create -n llnw python=3.10 libpython-static grpcio grpcio-tools pydash requests nuitka conda activate llnw ``` ### 编译 ```shell python3 -m nuitka --onefile src/main.py ``` # Public Limelight python SDK for Limelight Networks services ## Download and deployment ``` git clone cd llnw-sdk-python pip install -e . ``` ## Example of usage config-api ``` import client: from sdk.config_api import ConfigApiClient Initialize client: username = "{llnw_user}" shared_key = "{llnw_shared_key}" cl = ConfigApiClient('apis.llnw.com', username, shared_key) ``` Verify that it works ``` print(cl.get_status().json()) Should be returned something like this: {'version': '5.9-RC2', 'timestamp': '2020-04-03T15:39:03+0300', 'branch': 'ea4b4ca4c77cf8185d8b55381936a451bad87622', 'commitId': 'ea4b4ca4c77cf8185d8b55381936a451bad87622', 'mysqlConnection': {'connectionTime': '3'}, 'cfgMgmtConnection': {'available': 'true'}, 'remoteComponentsConnection': {'available': 'true'}, 'serviceDbConnection': {'available': 'true'}} ``` ### How to create Delivery config Generate delivery payload: ``` from sdk.utils.config_api_helper.deilver import DeliverServiceInstanceObj a = DeliverServiceInstanceObj() a.generate_default('{llnw_shortname}', 'example.pub.llnw.com', 'w.example.orig.llnw.com', 'LLNW-Generic', 'https', 'https') {'accounts': [{'shortname': '{llnw_shortname}'}], 'body': {'protocolSets': [{'options': [], 'publishedProtocol': 'http', 'sourceProtocol': 'http'}], 'publishedHostname': 'example.pub.llnw.com', 'publishedUrlPath': '', 'serviceKey': {'name': 'delivery'}, 'serviceProfileName': 'LLNW-Generic', 'sourceHostname': 'w.example.orig.llnw.com', 'sourceUrlPath': ''}} ``` Using this payload you can create or validate delivery service instance: ``` cl.validate_delivery_service_instance(a) ``` Validate call always return 200, but in body it has key 'Success' it can be True if everything is fine or False if an error occurs ``` cl.create_delivery_service_instance(a) ``` Return 200 if config was successfully created or error code(400, 403, etc) for errors ## Example of usage realtime-reporting-api ``` import client: from sdk.realtime-reporting-api import RealtimeReportingClient username = "{llnw_user}" shared_key = "{llnw_shared_key}" Initialize client: cl = RealtimeReportingClient('apis.llnw.com', username, shared_key) ``` Verify that it works ``` print(cl.health_check().json()) ['OK'] ``` ### Get traffic data via realtime-reporting-api response = cl.traffic(shortname="{llnw_shortname}", service=[cl.SERVICE_HTTP, cl.SERVICE_HLS], requestedFields=cl.TRAFFIC_REQUESTED_FIELDS, timespan=cl.LAST_24_HOURS, granularity=cl.GRANULARITY_FIVE_MINUTES) or via general request and key: value argument (similar in limelight javaScript sdk) response2 = cl2.request(**{"report": 'traffic', "shortname": "{llnw_shortname}", "service": [cl2.SERVICE_HTTP, cl2.SERVICE_HLS], "requestedFields": cl2.REQUESTED_FIELDS_INBYTES, "timespan": cl2.LAST_24_HOURS, "granularity": cl2.GRANULARITY_FIVE_MINUTES}) Congratulate you've done well ## Running the tests Run tests ``` pytest -v --pyargs sdk.test ```