引文
如果说初步接触W5是对基础功能的简要学习,那么本部分则侧重于深入探讨在企业实际应用中需重点关注的功能。
1.应用编写
1.1.应用架构介绍
w5的app目录位于:/w5-main/apps/"appname"。这里以base64为例,看一下它的结构。
base64/ #应用目录
├── app.json #APP 配置文件
├── icon.png #APP 图标
├── main #APP 代码目录
│ ├── __init__.py #根据需要添加即可,不必要
│ └── run.py #APP 入口文件
└── readme.md #APP 说明文件
1.2.app.json
1.2.1.功能介绍
app.json作为应用的配置文件,配置了应用的功能。包括:
-
动作
-
参数
1.2.2.编写介绍
{
"identification": "w5soar", // w5soar 签名,无需更改,必须存在
"is_public": true, // 是否为公开 APP,设置 false 为私有 APP
"name": "Hello World", // APP 名称
"version": "0.1", // APP 版本
"description": "W5 SOAR - Hello World", // APP 描述
"type": "基本应用", // APP 分类
"action": [ // APP 动作列表
{
"name": "HelloWorld", // APP 动作名称
"func": "hello_world" // 动作对应的函数名
}
],
"args": { // 动作参数
"hello_world": [ // 动作对应的函数名
{
"key": "name", // 动作参数名
"type": "text", // 动作参数类型
"required": true // 是否是必填项
}
]
}
}
1.3.icon.png
1.3.1.功能介绍
用户能够自定义应用程序的图像。以下提供了具体的示例以供参考。
1.4.readme.md
1.4.1.功能介绍
readme为应用APP的说明文档,用于描述APP应用的功能,用户点击查看文档,弹出的就是改应用对应的readme.md文件。建议说明文档有如下几点:
-
APP说明:介绍应用功能
-
动作列表:每个动作需要包含:动作名、参数信息、返回值。
1.4.2.编写介绍
## APP 说明
> W5 SOAR Hello World
## 动作列表
### HellWorld
**参数:**
| 参数 | 类型 | 必填 | 备注 |
| ---- | ---- | ---- | ---- |
| **name** | string | `是` | 名字 |
**返回值:**
Hello,{{name}} !"
1.5.run.py
1.5.1.功能介绍
run.py 作为应用程序的核心组件,允许用户通过自定义函数,并结合 w5 框架内置的日志记录和响应格式功能,实现并展示在 w5 剧本上的各种应用功能。
1.5.2.编写介绍
run.py的日常代码demo如下
#!/usr/bin/env python
# encoding:utf-8
# cython:language_
from loguru import logger
async def hello_world(name):
try:
import nmap
except:
logger.info("[Hello World] 导入 nmap 模块失败, 请输入命令 pip install nmap")
return {"status":2,"result":"导入 nmap 失败"}
logger.info("[Hello World] 该 APP 执行参数为: {name}", name=name)
return {"status":0,"result":"Hello," + name}
其中有几个部分需要着重注意:
-
logger日志记录
w5利用logger作为日志记录,用户通过配置日志,可以输出所需信息,方便后续问题排查。
from loguru import logger
logger.info("[Hello World] 该 APP 执行参数为: {name}", name=name)
-
函数定义
函数定义时,建议使用async开启异步,提升性能
-
返回数据
应用执行结果,使用result进行传递,常见格式如下:
return {"status": 0, "result": "Hello," + name}
-
try except
作者建议在编写脚本函数时,建议使用try except保证稳定性。
-
头部注释信息
头部注释信息建议不要修改,默认即可。
-
状态码
在return的结果时,可以看到status字段的值是int,该值为状态码。
状态码 | 说明 |
---|---|
0 | 正常 |
1 | 警告 |
2 | 异常 |
3 | 威胁 |
1.6.编写demo
写一个app用于把字符串转成json
1.run.py
#!/usr/bin/env python
# encoding:utf-8
# cython:language_
from loguru import logger
import json
async def json2str(js):
try:
json_obj = json.loads(js)
jsona = json_obj['a']
logger.info("[json2str] 该 APP 执行参数为: {js}", js=js)
return {"status":0,"result":str(jsona)}
except json.JSONDecodeError as e:
logger.info("错误: 无法解析该字符串为 JSON", e)
return {"status":2,"result":"提供字符串有误"}
2.readme.md
## APP 说明
> W5 SOAR str2json
## 动作列表
### string_to_json
**参数:**
| 参数 | 类型 | 必填 | 备注 |
| ---- | ---- | ---- | ---- |
| **js** | string | `是` | 输入字符串 |
**返回值:**
json格式后的结果
3.icon.png
随意即可。
4.app.json
需要注意json格式不能出错,不然上传应用后会报错500错误。
{
"identification": "w5soar",
"is_public": true,
"name": "json2str",
"version": "0.1",
"description": "json2str",
"type": "其它",
"action": [
{
"name": "字符串转json,并输出a的值",
"func": "json2str"
}
],
"args": {
"json2str": [
{
"key": "js",
"type": "text",
"required": true
}
]
}
}
5.打包所有文件成zip压缩包,文件结构如下。
6.应用中心--》本地上传即可完成
7.查看插件文档
8.创建剧本调用json2str。
2.剧本自动化调用
在掌握了应用APP开发及剧本编写技巧之后,如何有效地调用这些剧本来实现自动化办公成为了关键所在。以下将介绍两种在日常工作中广泛采用的方法。
2.1.计划任务
2.1.1.实际意义
**作用:**减少人工操作,提高效率,确保任务准时执行。
场景:
-
人员入职账号自动激活
-
定时发送通告等
2.1.2.使用说明
1.编写剧本,在原有剧本基础上添加一个定时器
2.邮件定时器,编辑计划任务后保存剧本,定时器设定种类包含:
-
定时执行:到点执行
-
间隔执行:定时执行
-
执行计划:cron表达式
3.进入任务调度功能,点击圆圈即可启动计划任务。
4.查看日志即可看到剧本已执行
2.2.webhook
2.2.1.实际意义
**作用:**对接机器人/workflow流,方便剧本自动化处置。
场景:
-
工单自动封禁IP
-
机器人剔除用户下线等
2.2.2.使用说明
1.编写剧本,在数据输入的地方添加一个webhook,并且利用其余剧本接受webhook参入数据后保存剧本。
2.在系统设置获取API KEY
3.构造webhook请求,并且请求即可。
curl "http://localhost:8888/api/v1/w5/webhook"-H "Content-Type: application/json" -d '{"key": "2814C7C44A179D7DC9423896516BBFC1","uuid": "0d38eb70-e5ff-11ef-9a7d-0f8c52c79e1e","data": "3"}' -X POST
4.查询日志,即可看到成功接受参数
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)