功能预览
- 1、请勿压测,建议使用 chrome浏览器;
- 2、目前【任务管理】的socket连接不是并发的(因为我比较菜...),如果多人同时访问可能需要排队等待,同时这是提供预览的;
- 3、在线上预览版本注册的账号后续可能会清除,正式使用请用docker部署到本地;
前言
现有产品用的友盟统计。
免费版的友盟统计每个应用最多只能有500个有效的自定义事件,超过最大数量后如果想要新增,则需要先暂停一些不常用或者已废弃的自定义事件才行。在友盟官网,是有“批量暂停”操作的,但其“批量暂停”跟“筛选功能”是分开的,导致我不能筛选符合自身需求的一些事件进行暂停。
其次,有的时候产品改版,功能描述可能发生变化,需要修改自定义事件的显示名称,想要修改友盟自定义事件显示名称的话,则需要一个id一个id地搜索,然后一个一个地修改。如果变更的自定义事件过多或者变更次数比较频繁,那这样机械的操作就挺繁琐的。虽然友盟官网有批量上传自定义事件功能,但是已存在的自定义事件id不会进行更新,而是被忽略掉,所以要想更新显示名称,还是得一个一个地查找才能更新。
另外,如果同一个产品有多个包名(多马甲),里面的自定义事件基本都是一样的,照上面所述情况,假如有功能差不多&自定义事件一致的应用A、应用B、应用C,则需要机械地来回操作多次,这真是一件耗时耗力的事情,一次两次还好,但如果操作次数多了,每次都需要繁琐的打开官网进行一些必要而枯燥的操作,心里总会有一些马儿在奔腾。
所以,就上面遇到的问题,我多希望有个工具能够解决我的痛点,于是我发挥自己的强项:百度 & google & cv,不断输入“友盟批处理工具”、“友盟自定义事件批量管理”、“友盟助手”等关键词,翻了几页之后没有找到符合自己需求的工具,有些失望。后来我就想,要不自己写代码实现这样的批处理操作好了。于是我花了一天时间,分析友盟自定义事件操作api,写了一个python脚本,基本满足了自己的需求:
- 1、读取友盟自定义事件模板文件,存在则更新,不存在则插入;
- 2、缓存友盟自定义事件列表到本地,根据筛选指定事件进行暂停操作,实现筛选并批量暂停;
- 3、实现将“应用A”的自定义事件状态,批量复制(同步)到“应用B”、“应用C”上。
后面一段时间,我都是直接执行这个脚本来完成相应操作的。一开始自己还算比较满意,但是操作次数多了,感觉还是比较繁琐(人的欲望与需求总是无穷无尽啊),因为有时候友盟那边的cookie失效了,还得打开项目手动更新文件里面的配置项,另外就是筛选条件的配置项也得修改配置文件。所以我又想着,能不能自己写一个web管理页面呢(因为我现主业务是搞Android的)?结合自己的使用习惯再顺便加点功能。
于是我便开始web管理页面的开发了。取名 UMEM。
技术选型
最早最早我想着用 Flask + html 来写的,主要我之前用Flask写过一些小api还算比较熟悉(只是熟悉简单应用,囫囵吞枣不精通)。不过最终还是选用了Django + vue3作为开发脚手架,这哥俩我也是第一次接触,由于只是要做个小工具,所以利用闲暇时间边学边做对于我来说也算是一举两得。而且vue的教程目前也很多,饿了么的element-plus(vue3) 提供的界面控件也很符合目前开发的需求。
开发历程
由于前面已经用python脚本实现了基本功能,所以在web端上,一开始我只是希望:
- 1、操作更加便捷,比如上传自定义事件文件我想要简单的拖拽就行;
- 2、执行友盟自定义任务事,希望及时看到相应的操作日志及进度;
- 3、自定义事件有专门的筛选条件方便检索;
以上功能都逐一(通过各种搜索 & 各种cv)解决了,在后续开发进程中,由于需要操作的友盟应用还是需要自己手动输入key、友盟的cookie过期后还是得自己复制粘贴进行更新,所以自己继续追加了新需求:
- 1、希望直接从已有的友盟应用列表中选择需要操作的应用,而不是自己手动输入应用key;
- 2、友盟的cookie能够一键更新,减少繁琐的复制粘贴操作;
第一个需求点容易处理,第二个需求点我一开始是想通过程序模拟请求友盟api来获取cookie,但是那样又需要账号密码,同时还得处理登录前的一个验证码校验,所以这个方案不太行。正好我看到一些谷歌浏览器插件可以更新cookie(一些可将文章批量更新各大平台的产品的附属插件),我便进行海量搜索&模仿着写一个符合自己需求的谷歌浏览器插件,这个插件能够一键更新友盟的cookie信息,于是便有了UMEM-友盟登录助手 一键更新配置,免去手动复制粘贴之劳形。点击下载插件
再后来,考虑到在局域网内部署供多人使用,于是追加了注册登录功能。
在功能都开发得差不多的情况下,我将程序打包为docker镜像,方便一键部署到本地或者远程服务器。
运行docker镜像
1、创建本地目录,用于挂载docker运行时的log目录、数据库(这小工具数据库目前使用的是sqlite3)
mkdir -p ~/umem/log mkdir -p ~/umem/db
2、运行 docker ( -e LANG=C.UTF-8 是解决python处理中文的问题, 这里的/home/samge/umem是对应宿主机的绝对路径,需要更换为上一步自己实际创建的本地目录 ):
docker run -d \ -v /home/samge/umem/db:/app/db \ -v /home/samge/umem/log:/app/log \ -p 8000:8000 \ -p 9001:9001 \ --name umem \ --pull=always \ --restart always \ -e LANG=C.UTF-8 \ samge/umem:v1
访问
UMEM访问地址:http://localhost:8000
Supervisor管理页面:http://localhost:9001/
Supervisor账号:admin
Supervisor密码:admin
点击预览线上部署的测试版本
(请勿压测,建议使用 chrome浏览器,目前【任务管理】的socket连接不是并发的,如果多人同时访问可能需要排队等待,同时这是提供预览的,注册的账号后续可能会清除,尽量自己用docker部署到本地使用)
使用
- 1、注册账号登录
- 2、进入“配置管理”页,配置友盟登录后的cookie等相关信息,这里可使用 UMEM-友盟登录助手 一键更新配置
- 3、在“友盟key”页,选择需要操作的友盟应用
- 4、配置完成,可进行测试/使用
相关截图
最后
目前 UMEM 只是一款个人开发的非常小众的小工具,没有大面积测试,在我自己电脑的谷歌浏览器中运行暂时没发现大的问题,符合个人需求。
如果刚好有类似需求(友盟自定义事件批处理)的同学,希望在正式使用前,先自行测试,符合自己需求后再正式使用,谨慎些总没错。
同时在使用的过程中如果有什么意见或者建议都可以在项目仓库里的 issues里提出来。