# pmts-parser **Repository Path**: baihr/pmts-parser ## Basic Information - **Project Name**: pmts-parser - **Description**: PMTS 系统日志解析器。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-07 - **Last Updated**: 2024-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 说明 ## 测试和运行环境 node v14.16.0; redis v3.2.11; ## 设置Redis 设置Redis键过期事件通知,设置成功后在`__keyevent@*__*`通道发送事件。 临时设置(在Redis server重启后失效):`config set notify-keyspace-events Ex`, 永久设置:在配置文件中修改`notify-keyspace-events`配置为‘Ex’。 ## 启动解析 程序命令行参数请阅读代码或者执行`node xxx.js --help`。 注意事项: 1. 为保证相对耗时的正确性,`waiter.js`和`cook.js`需要在同一主机运行; 2. 需要注意`waiter.js`和`cook.js`参数中PubSub通道名称的配置; 3. `waiter.js`和`cook.js`需连接相同Redsi的相同DB,默认为0。 启动步骤: 1. 每个PMTS实例日志发送通道启动一个`waiter.js`,注意根据发送的数据结构修改程序中接收数据的代码; 2. 启动一个`cook.js`,接收Redis过期通知后处理累积在Redis的报文,并将结果发送到Redis通道中; ## 测试 运行`test/test-input.js`即可将日志文件发布到Redis,用于模拟数据采集。 waiter发出的交易数据样例: ```json { "2021-02-28T00:57:40.186Z": "{'msgId':'0000000500002021021868623170','msgType':'saps.601.001.01','mesgDirection':'D','msgHeader':'{H:010000 IBPS313821001016IBPS20210218053015XMLsaps.601.001.01 IBPA6014CC8E22247821IBPA6014CC8E222478213D2 }'}", "2021-02-28T00:57:40.177Z": "{'msgId':'1051000000172021021803754393','msgType':'ibps.101.001.02','mesgDirection':'D','msgHeader':'{H:01105100000017IBPS313821001016IBPS20210218053014XMLibps.101.001.02 20210218050561986146202102180505619861463D }'}", "meta": "{'msgId':'1051000000172021021803754393','msgType':'ibps.101.001.02','mesgDirection':'D','msgHeader':'{H:01105100000017IBPS313821001016IBPS20210218053014XMLibps.101.001.02 20210218050561986146202102180505619861463D }'}", "2021-02-28T00:57:40.181Z": "{'msgId':'3138210010162021021873098137','msgType':'ibps.102.001.01','mesgDirection':'U','msgHeader':'{H:01313821001016IBPS105100000017IBPS20210218053015XMLibps.102.001.01 10162021021873098137101620210218730981373U X }'}" } ``` cook发出的数据: ```json { "meta": { "msgId": "1051000000172021021803754393", "msgType": "ibps.101.001.02", "mesgDirection": "D", "msgHeader": "{H:01105100000017IBPS313821001016IBPS20210218053014XMLibps.101.001.02 20210218050561986146202102180505619861463D }" }, "msgSeq": [ { "timestamp": "2021-02-28T00:57:40.177Z", "body": "{'msgId':'1051000000172021021803754393','msgType':'ibps.101.001.02','mesgDirection':'D','msgHeader':'{H:01105100000017IBPS313821001016IBPS20210218053014XMLibps.101.001.02 20210218050561986146202102180505619861463D }'}" }, { "timestamp": "2021-02-28T00:57:40.181Z", "body": "{'msgId':'3138210010162021021873098137','msgType':'ibps.102.001.01','mesgDirection':'U','msgHeader':'{H:01313821001016IBPS105100000017IBPS20210218053015XMLibps.102.001.01 10162021021873098137101620210218730981373U X }'}" }, { "timestamp": "2021-02-28T00:57:40.186Z", "body": "{'msgId':'0000000500002021021868623170','msgType':'saps.601.001.01','mesgDirection':'D','msgHeader':'{H:010000 IBPS313821001016IBPS20210218053015XMLsaps.601.001.01 IBPA6014CC8E22247821IBPA6014CC8E222478213D2 }'}" } ], "durationSeq": [4, 5, 9] } ``` ## 更新日志 `all.js`同时代表`waiter.js`和`cook.js`。 ### 1.0.0 1. 实现解析基本功能,发布。 ### 1.1.0 1. `waiter.js`增加过滤报文类型; 2. `all.js`Key前缀在启动参数中设置,含有默认值; 3. `waiter.js`Transaction Key过期时间延长为5分钟,避免未完成消息消费而Key过期造成的数据丢失; 4. `cook.js`删除rpsub参数,改为使用subscribe方式订阅指定DB的键过期事件; 5. `all.js`使用log4js进行日志管理,日志名称包含必须参数以区分不同实例的日志; 6. `all.js`安全关闭资源。 ## 未尽事项 1. 因为存在未考察到的类型,合法日志块可能被过滤,根据数据需求变更进行调整; 2. 目前通过消息中的特定字符串检查请求或者响应,如果因消息格式变动或者新增加的消息类型引起问题,可调整为根据已知的报文类型进行判断。