Python 便携插件扩展示例
以下为pysam插件示例的介绍及打包过程,pysam插件可通过算法集成的便捷插件页签,点击下载便携插件示例获取。
部署要求
使用Python 便携插件,需要有 Python3 环境。
如果您通过安装包的方式安装 NeuronEX ,则需要
- 手动安装 python 3.x 环境。
- 通过 pip 安装
ekuiper和pynng库
shellpip install ekuiper pynng如果您通过 docker 的方式安装 NeuronEX ,请使用 neuronex:3.x.x 类型的 NeuronEX 镜像,该镜像已经包含了 Python3 环境,以及一些相关的函数库。
pysam插件整体介绍
pysam插件的目录内包含如下文件:
pysam.json:必需,插件元数据文件,用于描述插件的元数据信息。pysam.py:必需,插件主程序可执行文件。pyjson.py:可选,插件中的一个数据源Source插件。sources文件夹、pyjson.json、pyjson.yaml:可选,插件中的数据源Source插件pyjson.py的配置信息。print.py:可选,插件中的一个动作Sink插件。sinks文件夹、print.json:可选,插件中的动作Sink插件print.py的配置信息。revert.py:可选,插件中的一个函数Function插件。functions文件夹、revert.json:可选,插件中的函数Function插件revert.py的配置信息。

提示
一个插件可以包含一个或多个数据源Source、动作Sink和函数Function插件,在pysam示例中包含了一个数据源Source插件pyjson、一个动作Sink插件print和一个函数插件revert。
插件元数据文件介绍
pysam.json文件是插件的元数据文件,用于描述插件的元数据信息。以下是元数据文件中的关键信息介绍:
language:该字段指定了插件实现的语言,插件必须以单一语言实现,python类型插件填入python。executable:字段需要指定了插件主程序可执行文件的名称。在本例中为pysam.py文件。
提示
此pysam.py文件名并不必需要与插件的元数据文件pysam.json重名。比如可在executable字段填入main.py,将pysam.py重命名为main.py亦可。
sources:该字段为数组格式,包含了插件中的所有数据源Source插件信息。sinks:该字段为数组格式,包含了插件中的所有动作Sink插件信息。functions:该字段为数组格式,包含了插件中的所有函数Function插件信息。
{
"version": "v1.0.0",
"language": "python",
"executable": "pysam.py",
"sources": [
"pyjson"
],
"sinks": [
"print"
],
"functions": [
"revert"
]
}提示
pysam.json文件是插件的元数据文件,文件名称pysam必须与 NeuronEX Dashboard上数据处理 -> 扩展 -> 便携插件页签上,点击创建便携插件时填入的插件名称相同。
插件主程序介绍
在该示例中,pysam.py文件是插件的主程序可执行文件,该文件中包含了插件的主程序逻辑,将具体的数据源Source、动作Sink和函数Function插件进行插件配置及注册。
from ekuiper import plugin, PluginConfig
from print import PrintSink
from pyjson import PyJson
from revert import revertIns
if __name__ == '__main__':
c = PluginConfig("pysam", {"pyjson": lambda: PyJson()}, {"print": lambda: PrintSink()},
{"revert": lambda: revertIns})
plugin.start(c)具体插件实现介绍
在该示例中,pyjson.py文件是插件中的一个数据源Source插件,print.py文件是插件中的一个动作Sink插件,revert.py文件是插件中的一个函数Function插件。以函数Function插件revert.py为例,通过在revert.py文件中的exec函数,实现自定义的功能需求。
from typing import Any, List
from ekuiper import Function, Context
class RevertFunc(Function):
def __init__(self):
pass
def validate(self, args: List[Any]):
return ""
def exec(self, args: List[Any], ctx: Context):
return args[0][::-1]
def is_aggregate(self):
return False
revertIns = RevertFunc()插件打包及安装
在完成插件开发后,我们需要将结果打包成zip进行安装。在pysam.json的同级目录下,执行以下命令进行打包:
zip -r pysam.zip ./*通过以上命令,将会在当前目录下生成pysam.zip文件,该文件即为我们需要安装的插件包,在便携插件页签,点击创建便携插件。在弹出的窗口输入插件名称pysam,上传插件pysam.zip,即可完成插件的安装。
插件安装完成后,会在插件列表显示插件的详细信息,如下: 
提示
在安装完插件后,NeuronEX不需要重启,即可正常使用插件功能。
插件使用示例
在数据源Source中使用插件
在源管理页面,点击创建流,即可选择pysam插件作为自定义数据源使用。 
在SQL中使用插件
在规则页面,点击新建规则,即可在规则SQL中直接调用自定义函数revert,在该示例中,revert函数从demoStream流中获取device_name字段的值,并实现了字符串反转的功能输出到result字段。
SELECT revert(device_name) as result FROM demoStream假设demoStream流中的输入数据如下:
{
"device_name": "abcdefg"
}则,规则输出数据如下:
{
"result": "gfedcba"
}在动作Sink中使用插件
在添加动作页面,即可选择print插件作为自定义动作使用。 
其他
其他插件可选项
用户可以在插件目录下添加install.sh文件以及requirements.txt文件,插件在安装时,会自动执行install.sh脚本,安装插件所需的依赖库。
install.sh文件示例如下:
cur=$(dirname "$0")
echo "Base path $cur"
pip install -r $cur/requirements.txt
echo "Done"requirements.txt文件示例如下:
numpy==1.22.3
scipy==1.8.0提示
用户可以在插件目录下添加相应的算法模型文件,如model.pkl文件,在插件python代码中可直接调用该模型文件。